Name: series-workflow5l9pv Phase: Succeeded StartedAt: 2026-07-10 22:55:43 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[0] Phase: Succeeded StartedAt: 2026-07-10 22:55:43 +0000 UTC FinishedAt: 2026-07-10 23:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 22:55:43 +0000 UTC FinishedAt: 2026-07-10 23:17:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "acb138b8235c63564aa1bcd2666fdc9707e2f1e0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_WANGXUN", "NGBE", "TXGBE", "NGBEVF", "TXGBEVF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "acb138b8235c63564aa1bcd2666fdc9707e2f1e0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_WANGXUN", "NGBE", "TXGBE", "NGBEVF", "TXGBEVF" ], "series_id": "984dcb89-2ad4-4bbe-9f6a-634bb37a1d29" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "wx_set_ringparam_vf", "wx_write_eitr_vf", "wx_set_ring", "wx_set_coalesce" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfV0FOR1hVTiYjMzQ7LAogICAgJiMzNDtOR0JFJiMzNDssCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O05HQkVWRiYjMzQ7LAogICAgJiMzNDtUWEdCRVZGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d3hfc2V0X3JpbmdwYXJhbV92ZiYjMzQ7LAogICAgJiMzNDt3eF93cml0ZV9laXRyX3ZmJiMzNDssCiAgICAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgICAmIzM0O3d4X3NldF9jb2FsZXNjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY3NTc0MjI0YjY3MTg1NTRmNjRhYzc5MmQxODkzODY0MGRhYzM1NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzoxNDo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uMjIwMzdmMDE1ZGVkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjaW5jbHVkZSBcJiMzNDt3eF9ldGh0b29sLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdmZfY29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbiBcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xuIFx0Y2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dO1xuQEAgLTQ4Nyw3ICYjNDM7NDg5LDEwIEBAIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdHd4X3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuJiM0MztcdFx0aWYgKHd4LVx1MDAzZXBkZXYtXHUwMDNlaXNfdmlydGZuKVxuJiM0MztcdFx0XHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG4gXHR9XG4gXG4gXHR3eF91cGRhdGVfcnNjKHd4KTtcbkBAIC03NzUsNiAmIzQzOzc4MCw2NSBAQCBzdGF0aWMgaW50IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHd4X3NldF9yaW5ncGFyYW1fdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gKmtlcm5lbF9yaW5nLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50O1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nICp0ZW1wX3Jpbmc7XG4mIzQzO1x0aW50IGksIGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG5ld190eF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLVx1MDAzZXR4X3BlbmRpbmcsIFdYX01JTl9UWEQsIFdYX01BWF9UWEQpO1xuJiM0MztcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xuJiM0MztcbiYjNDM7XHRuZXdfcnhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cdTAwM2VyeF9wZW5kaW5nLCBXWF9NSU5fUlhELCBXWF9NQVhfUlhEKTtcbiYjNDM7XHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ld190eF9jb3VudCA9PSB3eC1cdTAwM2V0eF9yaW5nX2NvdW50IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZXdfcnhfY291bnQgPT0gd3gtXHUwMDNlcnhfcmluZ19jb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0MztcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4mIzQzO1xuJiM0MztcdFx0Z290byBjbGVhcl9yZXNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cbiYjNDM7XHRpID0gbWF4X3QoaW50LCB3eC1cdTAwM2VudW1fdHhfcXVldWVzLCB3eC1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiYjNDM7XHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcbiYjNDM7XHRpZiAoIXRlbXBfcmluZykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gY2xlYXJfcmVzZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3eHZmX2Rvd24od3gpO1xuJiM0MztcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuJiM0MztcdCAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGxcbiYjNDM7XHQgKiByZXF1ZXN0ZWQgcmluZyBwYXJhbWV0ZXJzIGNvdWxkIGJlIGNvbmZpZ3VyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O2ZhaWxlZCB0byBzZXQgcmluZyBwYXJhbWV0ZXJzOiAlZFwmIzM0OywgZXJyKTtcbiYjNDM7XHR3eF9jb25maWd1cmVfdmYod3gpO1xuJiM0MztcdHd4dmZfdXBfY29tcGxldGUod3gpO1xuJiM0MztcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuJiM0MztjbGVhcl9yZXNldDpcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVFhfTUFYX0ZSQU1FU19JUlEgfFxuQEAgLTc4Miw4ICYjNDM7ODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3eF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG4mIzQzO1x0LnNldF9yaW5ncGFyYW1cdFx0PSB3eF9zZXRfcmluZ3BhcmFtX3ZmLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHd4X2dldF9tc2dsZXZlbCxcbiBcdC5nZXRfY29hbGVzY2VcdFx0PSB3eF9nZXRfY29hbGVzY2UsXG4mIzQzO1x0LnNldF9jb2FsZXNjZVx0XHQ9IHd4X3NldF9jb2FsZXNjZSxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBkMDQyNTY3YjgxMjg0Yi4uMmU1ZGJhODhkMDRhMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMzI0OCw4ICYjNDM7MzI0OCw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xuIFxuLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbi1cdFx0IHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4mIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuJiM0MztcdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcbiB7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbkBAIC0zMjcxLDcgJiM0MzszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMjk5LDcgJiM0MzszMjk5LDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMzExLDYgJiM0MzszMzExLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFxuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0fVxuJiM0MztcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NldF9yaW5nKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLmJjNjcxNzg2OTc4ZTU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTM2LDggJiM0MzszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuLVx0XHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4mIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuJiM0MztcdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxuaW5kZXggZWI2Y2EzZmU0ZTk3YjYuLmI2NGE0ZGUwODlmMmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcbkBAIC00MSw3ICYjNDM7NDEsNiBAQFxuICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDRcbiBcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgJiM0MzsgKDQgKiAoaSkpKSAvKiBpPVswLDFdICovXG4tI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKVxuICNkZWZpbmUgV1hfVlhJVFJfQ05UX1dESVMgICAgICAgIEJJVCgzMSlcbiAjZGVmaW5lIFdYX1ZYSVZBUl9NSVNDICAgICAgICAgICAweDI2MFxuICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCAmIzQzOyAoNCAqIChpKSkpIC8qIGk9WzAsM10gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuaW5kZXggMGQyZGI4ZDM4Y2Q1NmMuLjI2ZGU3OGU5YTY5ZWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuQEAgLTI2OSw3ICYjNDM7MjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG4gXHR3cjMyKHd4LCBXWF9WWElNQywgd3gtXHUwMDNlZWltc19lbmFibGVfbWFzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiYjNDM7dm9pZCB3eHZmX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0LyogQWx3YXlzIHNldCB0aGUgY2FycmllciBvZmYgKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtMzI0LDcgJiM0MzszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3h2Zl9vcGVuKTtcbiBcbi1zdGF0aWMgdm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiYjNDM7dm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5pbmRleCBjYmJiMWIxNzhjYjJjNS4uZDQ1ZDVkOGFjM2FiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5AQCAtMTUsNyAmIzQzOzE1LDkgQEAgdm9pZCB3eF9zZXRfcnhfbW9kZV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4X2NvbmZpZ3VyZV92ZihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTtcbiB2b2lkIHd4dmZfd2F0Y2hkb2dfdXBkYXRlX2xpbmsoc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3h2Zl91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0Mzt2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5pbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5AQCAtMTYsNyAmIzQzOzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKVxuIFx0aW50IHZfaWR4ID0gcV92ZWN0b3ItXHUwMDNldl9pZHg7XG4gXHR1MzIgaXRyX3JlZztcbiBcbi1cdGl0cl9yZWcgPSBxX3ZlY3Rvci1cdTAwM2VpdHIgXHUwMDI2IFdYX1ZYSVRSX01BU0s7XG4mIzQzO1x0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuJiM0MztcdGNhc2Ugd3hfbWFjX3NwOlxuJiM0MztcdFx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfU1BfTUFYX0VJVFI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIHd4X21hY19hbWw6XG4mIzQzO1x0Y2FzZSB3eF9tYWNfYW1sNDA6XG4mIzQzO1x0XHRpdHJfcmVnID0gKHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwM2VcdTAwM2UgMykgXHUwMDI2IFdYX0FNTF9NQVhfRUlUUjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpdHJfcmVnID0gcV92ZWN0b3ItXHUwMDNlaXRyIFx1MDAyNiBXWF9FTV9NQVhfRUlUUjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcbiBcdC8qIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhblxuIFx0ICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgICAmIzM0O05HQkUmIzM0OywKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7TkdCRVZGJiMzNDssCiAgICAmIzM0O1RYR0JFVkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3eF9zZXRfcmluZ3BhcmFtX3ZmJiMzNDssCiAgICAmIzM0O3d4X3dyaXRlX2VpdHJfdmYmIzM0OywKICAgICYjMzQ7d3hfc2V0X3JpbmcmIzM0OywKICAgICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJiMzOTtzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzU3NDIyNGI2NzE4NTU0ZjY0YWM3OTJkMTg5Mzg2NDBkYWMzNTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTQ6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDVkZjk3MWFjYTllMzVmLi4yMjAzN2YwMTVkZWQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKQEAgLTksNiAmIzQzOzksOCBAQAogI2luY2x1ZGUgJiMzNDt3eF9ldGh0b29sLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfdmZfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfdmZfbGliLmgmIzM0OwogCiBzdHJ1Y3Qgd3hfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTQ4Nyw3ICYjNDM7NDg5LDEwIEBAIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZWxzZQogCQkJLyogcnggb25seSBvciBtaXhlZCAqLwogCQkJcV92ZWN0b3ItJmd0O2l0ciA9IHJ4X2l0cl9wYXJhbTsKLQkJd3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7CiYjNDM7CQlpZiAod3gtJmd0O3BkZXYtJmd0O2lzX3ZpcnRmbikKJiM0MzsJCQl3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl3eF93cml0ZV9laXRyKHFfdmVjdG9yKTsKIAl9CiAKIAl3eF91cGRhdGVfcnNjKHd4KTsKQEAgLTc3NSw2ICYjNDM7NzgwLDY1IEBAIHN0YXRpYyBpbnQgd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHd4X3NldF9yaW5ncGFyYW1fdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtICprZXJuZWxfcmluZywKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKJiM0MzsJc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZzsKJiM0MzsJaW50IGksIGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ld190eF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLSZndDt0eF9wZW5kaW5nLCBXWF9NSU5fVFhELCBXWF9NQVhfVFhEKTsKJiM0MzsJbmV3X3R4X2NvdW50ID0gQUxJR04obmV3X3R4X2NvdW50LCBXWF9SRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CiYjNDM7CiYjNDM7CW5ld19yeF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLSZndDtyeF9wZW5kaW5nLCBXWF9NSU5fUlhELCBXWF9NQVhfUlhEKTsKJiM0MzsJbmV3X3J4X2NvdW50ID0gQUxJR04obmV3X3J4X2NvdW50LCBXWF9SRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CiYjNDM7CiYjNDM7CWlmIChuZXdfdHhfY291bnQgPT0gd3gtJmd0O3R4X3JpbmdfY291bnQgJmFtcDsmYW1wOwomIzQzOwkgICAgbmV3X3J4X2NvdW50ID09IHd4LSZndDtyeF9yaW5nX2NvdW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7CXNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiYjNDM7CQl3eC0mZ3Q7dHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDsKJiM0MzsJCXd4LSZndDtyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwomIzQzOwomIzQzOwkJZ290byBjbGVhcl9yZXNldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBhbGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVyIHRvIHN0b3JlIHJpbmdzIGluICovCiYjNDM7CWkgPSBtYXhfdChpbnQsIHd4LSZndDtudW1fdHhfcXVldWVzLCB3eC0mZ3Q7bnVtX3J4X3F1ZXVlcyk7CiYjNDM7CXRlbXBfcmluZyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHd4X3JpbmcsIGkpOwomIzQzOwlpZiAoIXRlbXBfcmluZykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gY2xlYXJfcmVzZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3h2Zl9kb3duKHd4KTsKJiM0MzsJLyogd3hfc2V0X3JpbmcoKSBtYXkgcGFydGlhbGx5IGFwcGx5IGNoYW5nZXMgYmVmb3JlCiYjNDM7CSAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGwKJiM0MzsJICogcmVxdWVzdGVkIHJpbmcgcGFyYW1ldGVycyBjb3VsZCBiZSBjb25maWd1cmVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O2ZhaWxlZCB0byBzZXQgcmluZyBwYXJhbWV0ZXJzOiAlZCYjMzQ7LCBlcnIpOwomIzQzOwl3eF9jb25maWd1cmVfdmYod3gpOwomIzQzOwl3eHZmX3VwX2NvbXBsZXRlKHd4KTsKJiM0MzsJa3ZmcmVlKHRlbXBfcmluZyk7CiYjNDM7Y2xlYXJfcmVzZXQ6CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHd4X2V0aHRvb2xfb3BzX3ZmID0gewogCS5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8CiAJCQkJICAgICBFVEhUT09MX0NPQUxFU0NFX1RYX01BWF9GUkFNRVNfSVJRIHwKQEAgLTc4Miw4ICYjNDM7ODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHd4X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfcmluZ3BhcmFtCQk9IHd4X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5zZXRfcmluZ3BhcmFtCQk9IHd4X3NldF9yaW5ncGFyYW1fdmYsCiAJLmdldF9tc2dsZXZlbAkJPSB3eF9nZXRfbXNnbGV2ZWwsCiAJLmdldF9jb2FsZXNjZQkJPSB3eF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gd3hfc2V0X2NvYWxlc2NlLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKaW5kZXggZDA0MjU2N2I4MTI4NGIuLjJlNWRiYTg4ZDA0YTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTMyNDgsOCAmIzQzOzMyNDgsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogfQogRVhQT1JUX1NZTUJPTCh3eF9mZWF0dXJlc19jaGVjayk7CiAKLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKLQkJIHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpCiYjNDM7aW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiYjNDM7CQl1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKQogewogCWludCBpLCBlcnIgPSAwOwogCkBAIC0zMjcxLDcgJiM0MzszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogCQkJCQlpLS07CiAJCQkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKCZhbXA7dGVtcF9yaW5nW2ldKTsKIAkJCQl9Ci0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQl9CiAKQEAgLTMyOTksNyAmIzQzOzMyOTksNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJCQkJCWktLTsKIAkJCQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMoJmFtcDt0ZW1wX3JpbmdbaV0pOwogCQkJCX0KLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCX0KIApAQCAtMzMxMSw2ICYjNDM7MzMxMSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIAl9CiYjNDM7CXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC0zNiw4ICYjNDM7MzYsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTsKLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKLQkJIHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpOwomIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAomIzQzOwkJdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7CiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oCmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaApAQCAtNDEsNyAmIzQzOzQxLDYgQEAKICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDQKIAogI2RlZmluZSBXWF9WWElUUihpKSAgICAgICAgICAgICAgKDB4MjAwICYjNDM7ICg0ICogKGkpKSkgLyogaT1bMCwxXSAqLwotI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKQogI2RlZmluZSBXWF9WWElUUl9DTlRfV0RJUyAgICAgICAgQklUKDMxKQogI2RlZmluZSBXWF9WWElWQVJfTUlTQyAgICAgICAgICAgMHgyNjAKICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCAmIzQzOyAoNCAqIChpKSkpIC8qIGk9WzAsM10gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCkBAIC0yNjksNyAmIzQzOzI2OSw3IEBAIHN0YXRpYyB2b2lkIHd4dmZfaXJxX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4KQogCXdyMzIod3gsIFdYX1ZYSU1DLCB3eC0mZ3Q7ZWltc19lbmFibGVfbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKJiM0Mzt2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIHsKIAkvKiBBbHdheXMgc2V0IHRoZSBjYXJyaWVyIG9mZiAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKHd4LSZndDtuZXRkZXYpOwpAQCAtMzI0LDcgJiM0MzszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKHd4dmZfb3Blbik7CiAKLXN0YXRpYyB2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KQomIzQzO3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oCmluZGV4IGNiYmIxYjE3OGNiMmM1Li5kNDVkNWQ4YWMzYWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oCkBAIC0xNSw3ICYjNDM7MTUsOSBAQCB2b2lkIHd4X3NldF9yeF9tb2RlX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCB3eF9jb25maWd1cmVfdmYoc3RydWN0IHd4ICp3eCk7CiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTsKIHZvaWQgd3h2Zl93YXRjaGRvZ191cGRhdGVfbGluayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7CiBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzO3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpOwogaW50IHd4dmZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwppbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwpAQCAtMTYsNyAmIzQzOzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKQogCWludCB2X2lkeCA9IHFfdmVjdG9yLSZndDt2X2lkeDsKIAl1MzIgaXRyX3JlZzsKIAotCWl0cl9yZWcgPSBxX3ZlY3Rvci0mZ3Q7aXRyICZhbXA7IFdYX1ZYSVRSX01BU0s7CiYjNDM7CXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CiYjNDM7CWNhc2Ugd3hfbWFjX3NwOgomIzQzOwkJaXRyX3JlZyA9IHFfdmVjdG9yLSZndDtpdHIgJmFtcDsgV1hfU1BfTUFYX0VJVFI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSB3eF9tYWNfYW1sOgomIzQzOwljYXNlIHd4X21hY19hbWw0MDoKJiM0MzsJCWl0cl9yZWcgPSAocV92ZWN0b3ItJmd0O2l0ciAmZ3Q7Jmd0OyAzKSAmYW1wOyBXWF9BTUxfTUFYX0VJVFI7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWl0cl9yZWcgPSBxX3ZlY3Rvci0mZ3Q7aXRyICZhbXA7IFdYX0VNX01BWF9FSVRSOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAogCS8qIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhbgogCSAqIGltbWVkaWF0ZSBhc3NlcnRpb24gb2YgdGhlIGludGVycnVwdAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF9saWIuaGAsIGB3eF92Zi5oYCwgYHd4X3ZmX2NvbW1vbi5jYCwgYHd4X3ZmX2NvbW1vbi5oYCwgYW5kIGB3eF92Zl9saWIuY2AuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhbmQgbW9kaWZ5aW5nIGB3eF9zZXRfY29hbGVzY2VgIHRvIGludm9rZSBgd3hfd3JpdGVfZWl0cl92ZmAgZm9yIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGV5JiMzOTt2ZSBhbHNvIHR3ZWFrZWQgYHd4X3dyaXRlX2VpdHJfdmZgIGluIGB3eF92Zl9saWIuY2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0JiMzOTtzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLCBhIFBDSWUgZGV2aWNlLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kIGlzLCBob3cgcHJldmFsZW50IGlzIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJcyBpdCBldmVuIHJlbGV2YW50IGluIHRob3NlIGVudmlyb25tZW50cz8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBjYW4gdGhpcyBiZSBmdXp6ZWQ/CgpJIGtub3cgc3l6a2FsbGVyIGNhbiBoYW5kbGUgZnV6emluZyBQQ0kgZHJpdmVycywgYnV0IGl0JiMzOTtzIHVzdWFsbHkgZ2VhcmVkIHRvd2FyZCBzcGVjaWZpYyBkZXZpY2VzIG9yIG1vcmUgZ2VuZXJpYyBQQ0kgZnV6emluZy4gRm9yIFdhbmd4dW4gc3BlY2lmaWNhbGx5LCBpdCBkZXBlbmRzLCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgaXQuIEkgc2hvdWxkIHNlYXJjaCBLY29uZmlnIGZvciBgd2FuZ3h1bmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FuZ3h1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCBvZiBXYW5neHVuIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgTkdCRVZGLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXNlIFdhbmd4dW4gZHJpdmVycyBldmVuIGNvdmVyZWQgYnkgc3l6a2FsbGVyJiMzOTtzIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIGtub3cgc3l6a2FsbGVyIGlzbiYjMzk7dCBleGFjdGx5IGJyaW1taW5nIHdpdGggc3BlY2lmaWMgZW11bGF0aW9uIGZvciBXYW5neHVuIGhhcmR3YXJlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLiBBaCwgaGVyZSBpdCBpczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4mIzM0OyBUaGlzIGlzIGtleS4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgV2FuZ3h1biBoYXJkd2FyZSAqZW11bGF0ZWQqIGluIFFFTVU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBjaGVja2luZyBmb3IgbWVudGlvbnMgb2YgJiMzNDt3YW5neHVuJiMzNDsgaW4gdGhlIGNvZGUgaXMgZGlmZmljdWx0LgoKSG9sZCBvbiwgSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhY3R1YWxseSBiZSAqcmVhY2hlZCogd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZT8gSXQmIzM5O3MgYW4gZXRodG9vbCBvcGVyYXRpb24sIHJpZ2h0PyBBbmQgZXRodG9vbCBvcHMgYXJlIGNhbGxlZCBvbiBuZXRkZXZzLiBJZiB0aGUgbmV0ZGV2IGlzbiYjMzk7dCByZWdpc3RlcmVkLCBiZWNhdXNlIHRoZSBQQ0kgcHJvYmUgZmFpbGVkIOKAkyBtZWFuaW5nIG5vIGhhcmR3YXJlIGlzIHByZXNlbnQg4oCTIHRoZW4gdGhvc2UgZXRodG9vbCBvcHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpTbywgdGhlIG5leHQgdGhpbmcgaXMgdG8gc2VlIGlmIHRoZSBkcml2ZXIgcHJvdmlkZXMgYW55IGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIG9yIGEgZHVtbXkgZGV2aWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRyaXZlciYjMzk7cyBjb2RlYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbnkgc3VjaCBhYnN0cmFjdGlvbiB3b3VsZCBsaWtlbHkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipVbnBhY2tpbmcgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgd2hvbGUgcHJvY2VzcyBoaW5nZXMgb24gaG93IHRoZSBkcml2ZXIgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZnVuZGFtZW50YWwgbWVjaGFuaXNtIGZpcnN0LiBJcyBpdCBhIHN0YXRpYyByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBPUyBrZXJuZWw/IE9yIGlzIHRoZXJlIHNvbWUgZHluYW1pYyBkaXNjb3ZlcnkgbWVjaGFuaXNtIGF0IHBsYXk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcHByb2FjaD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgdGFibGUgbG9va3VwLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggZGV2aWNlIElEcyBhbmQgZHJpdmVyIHByb2Jpbmc/IFRoaXMgJiMzNDtyZWdpc3RyYXRpb24mIzM0OyBzdGVwIGlzIHRoZSBsaW5jaHBpbi4gSWYgSSBjYW4mIzM5O3QgcGluIHRoYXQgZG93biwgSSYjMzk7bSBnb2luZyB0byBoYXZlIGEgaGFyZCB0aW1lIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCByZWdpc3RyYXRpb24hIFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgZGV0YWlscywgc28gaG93IGFyZSB0aGUgZHJpdmVycyBiZWluZyBpZGVudGlmaWVkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTkwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MTk6bW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI1MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MjYxOm1vZHVsZV9wY2lfZHJpdmVyKG5nYmV2Zl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtOTczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc0Om1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmV2Zl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMjY6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmV2Zl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQQ0kgRXRoZXJuZXQgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZXNlIGFyZSBkZWZpbml0ZWx5IFBDSSBkcml2ZXJzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBrZXkgaGVyZSBpcyB0aGUgYHByb2JlYCBmdW5jdGlvbi4gSWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGBwcm9iZWAgd29uJiMzOTt0IGV2ZW4gYmUgY2FsbGVkLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gTXkgcXVlc3Rpb24gaXMsIGNhbiB3ZSBzb21laG93IHJlYWNoIHRoaXMgY29kZSBwYXRoICp3aXRob3V0KiByZWFsIGhhcmR3YXJlPwoKSSYjMzk7dmUgc2VlbiBTeXprYWxsZXIgdXRpbGl6ZSB2aXJ0dWFsIGRldmljZXMgZm9yIG90aGVyIHN1YnN5c3RlbXMuIEl0JiMzOTtzIGdvdCBgdmhjaWAgZm9yIEJsdWV0b290aCwgYGR1bW15YCBmb3IgbmV0d29ya2luZywgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHNuZC1kdW1teWAgZm9yIEFMU0EuIEJ1dCBmb3IgUENJIGV0aGVybmV0IGRyaXZlcnMsIGl0JiMzOTtzIHR5cGljYWxseSBhIGRlYWQgZW5kIHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBhIHNwZWNpZmljIFN5emthbGxlciBwc2V1ZG8tZGV2aWNlLgoKV2FpdCwgSSBzZWVtIHRvIHJlY2FsbCBTeXprYWxsZXIgaGF2aW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAuLi4gYnV0IHRoYXQmIzM5O3MgdmVyeSBsaW1pdGVkLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBnZW5lcmljIFBDSSBmdXp6aW5nLCBub3QgdGhlIGludHJpY2F0ZSBzZXF1ZW5jZXMgb2YgTU1JTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIHRoYXQgdGhlc2UgY29tcGxleCBldGhlcm5ldCBkcml2ZXJzIG5lZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcywgY2hlY2tpbmcgdGhlIGxpbmsgc3RhdHVzLCBhbmQgY2hlY2tpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYSBuZWNlc3Nhcnkgc2VxdWVuY2UuCgpNb3N0IGV0aGVybmV0IGRyaXZlcnMgd3JpdHRlbiBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdGhlIEludGVsIGUxMDAwZSwgaWdiLCBpeGdiZSwgb3IgdGhlIFdhbmd4dW4gbmdiZS90eGdiZSB2YXJpYW50cywgdGVuZCB0byBjaG9rZSBpbiB0aGVpciBgcHJvYmVgIGZ1bmN0aW9uIGlmIHRoZXkgZG9uJiMzOTt0IGdldCB0aGUgY29ycmVjdCByZXNwb25zZXMgZnJvbSBNTUlPIHJlYWRzLgoKSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbnMgb2YgYG5nYmV2ZmAgYW5kIGB0eGdiZXZmYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgbGlrZWx5IGZpbmQgdGhlIHN0aWNraW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MTAzPXN0YXRpYyBpbnQgdHhnYmV2Zl9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4Mi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODM6ICogdHhnYmV2Zl9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTg0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xODgtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODk6ICogdHhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xOTAtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxOTM6c3RhdGljIGludCB0eGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmV2Zl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxOC1cdC5pZF90YWJsZSA9IHR4Z2JldmZfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTk6XHQucHJvYmUgICAgPSB0eGdiZXZmX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyMC1cdC5yZW1vdmUgICA9IHR4Z2JldmZfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTUwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGV4YW1pbmluZyBgdHhnYmV2Zl9wcm9iZWA6CgoqKkFuYWx5emluZyBgdHhnYmV2Zl9wcm9iZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGB0eGdiZXZmX3Byb2JlYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW5pdGlhbCBkcml2ZXIgcHJvYmluZyBoYXBwZW5zLCBzbyBpdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogdG8gZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIGlzIGNvbXBhdGlibGUgYW5kLCBpZiBzbywgcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBpcyBmb3Igc29tZSB2YXJpYXRpb24gb2YgdGhlIGB0Z2JlYCBmYW1pbHksIGxpa2VseSB0aGUgVkYgb3IgdmlydHVhbCBmdW5jdGlvbiwgc28gdGhlIHByaW1hcnkgY29uY2VybiBpcyBnb2luZyB0byBiZSBhYm91dCBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIGhhcmR3YXJlIGFuZCBzZXR0aW5nIHVwIHRoZSB2aXJ0dWFsIGludGVyZmFjZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYSBzZXJpZXMgb2YgY2hlY2tzIGhlcmU6IGNoZWNrcyBmb3IgdGhlIGRldmljZSBJRCwgdGhlIFBDSSB2ZW5kb3IvZGV2aWNlIElEcywgYW55IHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBhbmQgcG9zc2libHkgZXZlbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHNwZWNpZmljIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdmlydHVhbCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgZmFpciBhbW91bnQgb2YgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGEgaGVhZGFjaGUgdG8gbWFuYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBkZXZpY2Utc3BlY2lmaWMgY2hlY2tzIGFyZS4KClRoZW4sIG9uY2UgdGhlIGRldmljZSBpcyBpZGVudGlmaWVkLCBJIGFudGljaXBhdGUgc2VlaW5nIHJlc291cmNlIGFsbG9jYXRpb246IG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgZXZlbiBETUEgY2hhbm5lbHMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBob3cgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGhlIG1lbW9yeSBtYXBwaW5nIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCwgZW5zdXJpbmcgdGhlIHZpcnR1YWwgZnVuY3Rpb24gbWVtb3J5IHNwYWNlIGlzIHByb3Blcmx5IG1hcHBlZCBhbmQgYWNjZXNzaWJsZS4KCkZpbmFsbHksIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkcml2ZXItc3BlY2lmaWMgc3RydWN0dXJlcyBpcyB2aXRhbC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgY29uZmlndXJlZC4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9mIGFueSBpbnRlcm5hbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyByZWxhdGVkIHRvIHRoZSBWRiYjMzk7cyB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2VzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBoYXBwZW4gYWZ0ZXIgdGhlIHByb2JlIGNvbXBsZXRlcy4gSSBtaWdodCBldmVuIGZpbmQgc29tZSBoaW50cyBhYm91dCBlcnJvciBoYW5kbGluZyBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3Igb2YgaG93IHdlbGwgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGVzZSBjb3JlIHRhc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MzpcdHN0YXRpYyBpbnQgdHhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAxOTQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiAxOTc6XHRcdHN0cnVjdCB3eCAqd3ggPSBOVUxMO1xuIDE5ODpcdFx0aW50IGVycjtcbiAxOTk6XHRcbiAyMDA6XHRcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTtcbiAyMDE6XHRcdGlmIChlcnIpXG4gMjAyOlx0XHRcdHJldHVybiBlcnI7XG4gMjAzOlx0XG4gMjA0Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbiAyMDU6XHRcdGlmIChlcnIpIHtcbiAyMDY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAyMDc6XHRcdFx0XHRcJiMzNDtObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiAyMDg6XHRcdFx0Z290byBlcnJfcGNpX2Rpc2FibGVfZGV2O1xuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0ZXJyID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuIDIxMjpcdFx0XHRcdFx0XHQgICBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pLFxuIDIxMzpcdFx0XHRcdFx0XHQgICBkZXZfZHJpdmVyX3N0cmluZyhcdTAwMjZwZGV2LVx1MDAzZWRldikpO1xuIDIxNDpcdFx0aWYgKGVycikge1xuIDIxNTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDIxNjpcdFx0XHRcdFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkIDB4JXhcXG5cJiMzNDssIGVycik7XG4gMjE3Olx0XHRcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldjtcbiAyMTg6XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDIyMTpcdFxuIDIyMjpcdFx0bmV0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMjIzOlx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbiAyMjQ6XHRcdFx0XHRcdFx0IFRYR0JFVkZfTUFYX1RYX1FVRVVFUyxcbiAyMjU6XHRcdFx0XHRcdFx0IFRYR0JFVkZfTUFYX1JYX1FVRVVFUyk7XG4gMjI2Olx0XHRpZiAoIW5ldGRldikge1xuIDIyNzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDIyODpcdFx0XHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xuIDIyOTpcdFx0fVxuIDIzMDpcdFxuIDIzMTpcdFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gMjMyOlx0XG4gMjMzOlx0XHR3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gMjM0Olx0XHR3eC1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gMjM1Olx0XHR3eC1cdTAwM2VwZGV2ID0gcGRldjtcbiAyMzY6XHRcbiAyMzc6XHRcdHd4LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCgtMSwgTkVUSUZfTVNHX0RSViB8XG4gMjM4Olx0XHRcdFx0XHRcdE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTtcbiAyMzk6XHRcdHd4LVx1MDAzZWh3X2FkZHIgPSBkZXZtX2lvcmVtYXAoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMjQwOlx0XHRcdFx0XHQgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXG4gMjQxOlx0XHRcdFx0XHQgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcbiAyNDI6XHRcdGlmICghd3gtXHUwMDNlaHdfYWRkcikge1xuIDI0MzpcdFx0XHRlcnIgPSAtRUlPO1xuIDI0NDpcdFx0XHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xuIDI0NTpcdFx0fVxuIDI0NjpcdFxuIDI0NzpcdFx0d3gtXHUwMDNlYjRfYWRkciA9IGRldm1faW9yZW1hcChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAyNDg6XHRcdFx0XHRcdCAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KSxcbiAyNDk6XHRcdFx0XHRcdCAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCkpO1xuIDI1MDpcdFx0aWYgKCF3eC1cdTAwM2ViNF9hZGRyKSB7XG4gMjUxOlx0XHRcdGVyciA9IC1FSU87XG4gMjUyOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IEtCVUlMRF9NT0ROQU1FO1xuIDI1NjpcdFx0d3hfc2V0X2V0aHRvb2xfb3BzX3ZmKG5ldGRldik7XG4gMjU3Olx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JldmZfbmV0ZGV2X29wcztcbiAyNTg6XHRcbiAyNTk6XHRcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuIDI2MDpcdFx0ZXJyID0gdHhnYmV2Zl9zd19pbml0KHd4KTtcbiAyNjE6XHRcdGlmIChlcnIpXG4gMjYyOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XG4gMjYzOlx0XG4gMjY0Olx0XHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BO1xuIDI2NTpcdFxuIDI2NjpcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gMjY3Olx0XHRldGhlcl9hZGRyX2NvcHkobmV0ZGV2LVx1MDAzZXBlcm1fYWRkciwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIDI2ODpcdFxuIDI2OTpcdFx0d3h2Zl9pbml0X3NlcnZpY2Uod3gpO1xuIDI3MDpcdFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiAyNzE6XHRcdGlmIChlcnIpXG4gMjcyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfc3dfaW5pdDtcbiAyNzM6XHRcbiAyNzQ6XHRcdHd4X2dldF9md192ZXJzaW9uX3ZmKHd4KTtcbiAyNzU6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIDI3NjpcdFx0aWYgKGVycilcbiAyNzc6XHRcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gMjc4Olx0XG4gMjc5Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuIDI4MDpcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gMjgxOlx0XG4gMjgyOlx0XHRyZXR1cm4gMDtcbiAyODM6XHRcbiAyODQ6XHRlcnJfcmVnaXN0ZXI6XG4gMjg1Olx0XHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiAyODY6XHRlcnJfZnJlZV9zd19pbml0OlxuIDI4NzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gMjg4Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gMjg5Olx0XHRrZnJlZSh3eC1cdTAwM2V2ZmluZm8pO1xuIDI5MDpcdFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gMjkxOlx0XHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIDI5MjpcdGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE5OQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkgc2VlIHRoZSBleGVjdXRpb24gaXMgaGl0dGluZyBgdHhnYmV2Zl9zd19pbml0YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBzb2Z0d2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiB0aGUgSW50ZWwgWDcxMC9YTDcxMCB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcg4oCTIHdoZXJlIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIHdoYXQgaGFyZHdhcmUgcmVnaXN0ZXJzIGl0JiMzOTtzIHRvdWNoaW5nLCBhbmQgd2hhdCByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkIGR1cmluZyB0aGUgc2V0dXAgcGhhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9ucywgaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlcywgYW5kIGNvbmZpZ3VyZXMgdGhlIHZhcmlvdXMgaW50ZXJydXB0IHZlY3RvcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmlydHVhbCBmdW5jdGlvbiBhbmQgdGhlIHBoeXNpY2FsIGZ1bmN0aW9uLCBhbmQgaG93IHRoZSBkcml2ZXIgZW5zdXJlcyBwcm9wZXIgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaW1lIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBhbmQgZXhhbWluZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWdpc3RlciBhY2Nlc3NlcyB3aXRoaW4gYHR4Z2JldmZfc3dfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDM6XHRzdGF0aWMgaW50IHR4Z2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIDEwNDpcdHtcbiAxMDU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4gMTA2Olx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHd4LVx1MDAzZXBkZXY7XG4gMTA3Olx0XHRpbnQgZXJyO1xuIDEwODpcdFxuIDEwOTpcdFx0LyogSW5pdGlhbGl6ZSBwY2llIGluZm8gYW5kIGNvbW1vbiBjYXBhYmlsaXR5IGZsYWdzICovXG4gMTEwOlx0XHRlcnIgPSB3eF9zd19pbml0KHd4KTtcbiAxMTE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTEyOlx0XHRcdGdvdG8gZXJyX3d4X3N3X2luaXQ7XG4gMTEzOlx0XG4gMTE0Olx0XHQvKiBJbml0aWFsaXplIHRoZSBtYWlsYm94ICovXG4gMTE1Olx0XHRlcnIgPSB3eF9pbml0X21ieF9wYXJhbXNfdmYod3gpO1xuIDExNjpcdFx0aWYgKGVycilcbiAxMTc6XHRcdFx0Z290byBlcnJfaW5pdF9tYnhfcGFyYW1zO1xuIDExODpcdFxuIDExOTpcdFx0LyogbWF4IHFfdmVjdG9ycyAqL1xuIDEyMDpcdFx0d3gtXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBUWEdCRVZGX01BWF9NU0lYX1ZFQ1RPUlM7XG4gMTIxOlx0XHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgdHlwZSAqL1xuIDEyMjpcdFx0dHhnYmV2Zl9pbml0X3R5cGVfY29kZSh3eCk7XG4gMTIzOlx0XHQvKiBsb2NrIHRvIHByb3RlY3QgbWFpbGJveCBhY2Nlc3NlcyAqL1xuIDEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2d3gtXHUwMDNlbWJ4Lm1ieF9sb2NrKTtcbiAxMjU6XHRcbiAxMjY6XHRcdGVyciA9IHd4X3Jlc2V0X2h3X3ZmKHd4KTtcbiAxMjc6XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0d3hfZXJyKHd4LCBcJiMzNDtQRiBzdGlsbCBpbiByZXNldCBzdGF0ZS4gSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXG5cJiMzNDspO1xuIDEyOTpcdFx0XHRnb3RvIGVycl9yZXNldF9odztcbiAxMzA6XHRcdH1cbiAxMzE6XHRcdHd4X2luaXRfaHdfdmYod3gpO1xuIDEzMjpcdFx0d3hfbmVnb3RpYXRlX2FwaV92Zih3eCk7XG4gMTMzOlx0XHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKHd4LVx1MDAzZW1hYy5hZGRyKSlcbiAxMzQ6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMTM1Olx0XHRcdFx0IFwmIzM0O01BQyBhZGRyZXNzIG5vdCBhc3NpZ25lZCBieSBhZG1pbmlzdHJhdG9yLlxcblwmIzM0Oyk7XG4gMTM2Olx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuIDEzOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QXNzaWduaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcblwmIzM0Oyk7XG4gMTQwOlx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZXRkZXYpO1xuIDE0MTpcdFx0XHRldGhlcl9hZGRyX2NvcHkod3gtXHUwMDNlbWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4gMTQyOlx0XHRcdGV0aGVyX2FkZHJfY29weSh3eC1cdTAwM2VtYWMucGVybV9hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdFxuIDE0NTpcdFx0d3gtXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSBUWEdCRVZGX01BWF9UWF9RVUVVRVM7XG4gMTQ2Olx0XHR3eC1cdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1JYX1FVRVVFUztcbiAxNDc6XHRcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4gMTQ4Olx0XHR3eC1cdTAwM2VhZGFwdGl2ZV9pdHIgPSB0cnVlO1xuIDE0OTpcdFx0d3gtXHUwMDNlcnhfaXRyX3NldHRpbmcgPSAxO1xuIDE1MDpcdFx0d3gtXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xuIDE1MTpcdFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xuIDE1MjpcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IFRYR0JFVkZfREVGQVVMVF9UWEQ7XG4gMTUzOlx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gVFhHQkVWRl9ERUZBVUxUX1JYRDtcbiAxNTQ6XHRcdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG4gMTU1Olx0XHR3eC1cdTAwM2V0eF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1RYX1dPUks7XG4gMTU2Olx0XHR3eC1cdTAwM2VyeF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1JYX1dPUks7XG4gMTU3Olx0XG4gMTU4Olx0XHR3eC1cdTAwM2VzZXRfbnVtX3F1ZXVlcyA9IHR4Z2JldmZfc2V0X251bV9xdWV1ZXM7XG4gMTU5Olx0XG4gMTYwOlx0XHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG4gMTYxOlx0XHRjYXNlIHd4X21hY19zcDpcbiAxNjI6XHRcdFx0YnJlYWs7XG4gMTYzOlx0XHRjYXNlIHd4X21hY19hbWw6XG4gMTY0Olx0XHRjYXNlIHd4X21hY19hbWw0MDpcbiAxNjU6XHRcdFx0c2V0X2JpdChXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiAxNjY6XHRcdFx0c2V0X2JpdChXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4gMTY3Olx0XHRcdGJyZWFrO1xuIDE2ODpcdFx0ZGVmYXVsdDpcbiAxNjk6XHRcdFx0YnJlYWs7XG4gMTcwOlx0XHR9XG4gMTcxOlx0XG4gMTcyOlx0XHRyZXR1cm4gMDtcbiAxNzM6XHRlcnJfcmVzZXRfaHc6XG4gMTc0Olx0XHRrZnJlZSh3eC1cdTAwM2V2ZmluZm8pO1xuIDE3NTpcdGVycl9pbml0X21ieF9wYXJhbXM6XG4gMTc2Olx0XHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiAxNzc6XHRcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gMTc4Olx0ZXJyX3d4X3N3X2luaXQ6XG4gMTc5Olx0XHRyZXR1cm4gZXJyO1xuIDE4MDpcdH1cbiAxODE6XHRcbiAxODI6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYHd4X3Jlc2V0X2h3X3ZmYCBmdW5jdGlvbiwgZGlzdGlsbGVkIHRvIGl0cyBjb3JlOgoKKipEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKioKCk9rYXksIEkmIzM5O20gZW5jb3VudGVyaW5nIGEgY2FsbCB0byBgd3hfcmVzZXRfaHdfdmZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuJiMzNDsgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGl0IHJlc2V0cywgd2hpY2ggaGFyZHdhcmUgY29tcG9uZW50cyBpdCB0YXJnZXRzLCBhbmQsIGNydWNpYWxseSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc2V0LiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyByZXNldCBpcyBuZWNlc3Nhcnk6IGlzIGl0IGZvciBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSBjbGVhbnVwIGJlZm9yZSByZWNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUga2V5IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfcmVzZXRfaHdfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NDE9c3RhdGljIGludCB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkoc3RydWN0IHd4ICp3eCwgdTMyICpyZXFfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NDogKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1LSAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTYxLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo2MjppbnQgd3hfcmVzZXRfaHdfdmYoc3RydWN0IHd4ICp3eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTEyNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6MTI4OkVYUE9SVF9TWU1CT0wod3hfcmVzZXRfaHdfdmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTEyOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg9MTExPXZvaWQgd3hfaW5pdF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaDoxMTI6aW50IHd4X3Jlc2V0X2h3X3ZmKHN0cnVjdCB3eCAqd3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oLTExMy12b2lkIHd4X2dldF9tYWNfYWRkcl92ZihzdHJ1Y3Qgd3ggKnd4LCB1OCAqbWFjX2FkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmM9MTQwPXZvaWQgd3hfcmVzZXRfdmYoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jLTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmM6MTQ1Olx0cmV0ID0gd3hfcmVzZXRfaHdfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYy0xNDYtXHRpZiAoIXJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTYwPXN0YXRpYyBpbnQgbmdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo4MjpcdGVyciA9IHd4X3Jlc2V0X2h3X3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtODMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTEwMz1zdGF0aWMgaW50IHR4Z2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTI2Olx0ZXJyID0gd3hfcmVzZXRfaHdfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTEyNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBoYXJkd2FyZSBhbmQgbGlrZWx5IGludm9sdmVkIGluIHNvbWUgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBmb3IgYHd4X3Jlc2V0X2h3X3ZmYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGF0IGZ1bmN0aW9uIG5hbWUuICYjMzQ7d3gmIzM0OyBsaWtlbHkgaGludHMgYXQgYSBzcGVjaWZpYyBmcmFtZXdvcmsgb3IgZHJpdmVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgYSBsYXJnZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuICYjMzQ7cmVzZXRfaHcmIzM0OyBpcyBzZWxmLWV4cGxhbmF0b3J5OyBpdCYjMzk7cyBhIGhhcmR3YXJlIHJlc2V0IHJvdXRpbmUuIEFuZCAmIzM0O3ZmJiMzNDsg4oCTIFZpcnR1YWwgRnVuY3Rpb24uIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBzaWduaWZpY2FudGx5LiBUaGlzIGlzIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGNvbnRleHQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCByZXNldHRpbmcgYSBWaXJ0dWFsIEZ1bmN0aW9uIG9mIGEgaGFyZHdhcmUgZGV2aWNlLgoKTXkgbWluZCYjMzk7cyBhbHJlYWR5IHJhY2luZywgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6CgoqICAgKipXaGF0IGtpbmQgb2YgaGFyZHdhcmU/KiogSXMgdGhpcyBuZXR3b3JrLCBzdG9yYWdlLCBncmFwaGljcz8gVGhhdCBzaGFwZXMgbXkgZXhwZWN0YXRpb25zIGFib3V0IHRoZSByZXNldCBwcm9jZWR1cmUmIzM5O3MgY29tcGxleGl0eS4KKiAgICoqV2hhdCB0cmlnZ2VycyB0aGlzIHJlc2V0PyoqIElzIHRoaXMgcGFydCBvZiBhIGJvb3QgcHJvY2VzcywgYW4gZXJyb3IgcmVjb3ZlcnksIGEgcmVzb3VyY2UgcmVhbGxvY2F0aW9uLCBvciBhIGhvdC1wbHVnIGV2ZW50PyBUaGUgdXNlIGNhc2UgZGljdGF0ZXMgaG93IHJvYnVzdCBhbmQgdGhvcm91Z2ggdGhlIHJlc2V0IG5lZWRzIHRvIGJlLgoqICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBEcm9wcGVkIGNvbm5lY3Rpb25zLCBkYXRhIGxvc3MsIHRlbXBvcmFyeSBzZXJ2aWNlIGludGVycnVwdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KKiAgICoqV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZT8qKiBCZWZvcmUgcmVzZXR0aW5nLCBpdOKAmXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdHVzLiBXaGF0IHJlc291cmNlcyBpcyBpdCBoYW5kbGluZz8KCkVzc2VudGlhbGx5LCBJJiMzOTttIHByaW1lZCB0byBhbmFseXplIHRoZSBjb2RlIHdpdGggYSBrZWVuIGF3YXJlbmVzcyBvZiB2aXJ0dWFsaXphdGlvbiwgaGFyZHdhcmUgY29udHJvbCwgYW5kIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGdlbmVyaWMgcmVzZXQgZnVuY3Rpb247IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGEgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MjpcdGludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxuICA2MzpcdHtcbiAgNjQ6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuICA2NTpcdFx0dTMyIG1zZ2J1Zls0XSA9IHtXWF9WRl9SRVNFVH07XG4gIDY2Olx0XHR1OCAqYWRkciA9ICh1OCAqKShcdTAwMjZtc2didWZbMV0pO1xuICA2NzpcdFx0dTMyIGI0X2J1ZlsxNl0gPSB7MH07XG4gIDY4Olx0XHR1MzIgdGltZW91dCA9IDIwMDtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XHR1MzIgaTtcbiAgNzE6XHRcbiAgNzI6XHRcdC8qIENhbGwgd3ggc3RvcCB0byBkaXNhYmxlIHR4L3J4IGFuZCBjbGVhciBpbnRlcnJ1cHRzICovXG4gIDczOlx0XHR3eF9zdG9wX2FkYXB0ZXJfdmYod3gpO1xuICA3NDpcdFxuICA3NTpcdFx0LyogcmVzZXQgdGhlIGFwaSB2ZXJzaW9uICovXG4gIDc2Olx0XHR3eC1cdTAwM2V2ZmluZm8tXHUwMDNldmZfYXBpID0gd3hfbWJveF9hcGlfbnVsbDtcbiAgNzc6XHRcbiAgNzg6XHRcdC8qIGJhY2t1cCBtc2l4IHZlY3RvcnMgKi9cbiAgNzk6XHRcdGlmICh3eC1cdTAwM2ViNF9hZGRyKSB7XG4gIDgwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyBpJiM0MzsmIzQzOylcbiAgODE6XHRcdFx0XHRiNF9idWZbaV0gPSByZWFkbCh3eC1cdTAwM2ViNF9hZGRyICYjNDM7IGkgKiA0KTtcbiAgODI6XHRcdH1cbiAgODM6XHRcbiAgODQ6XHRcdHdyMzJtKHd4LCBXWF9WWENUUkwsIFdYX1ZYQ1RSTF9SU1QsIFdYX1ZYQ1RSTF9SU1QpO1xuICA4NTpcdFx0cmQzMih3eCwgV1hfVlhTVEFUVVMpO1xuICA4NjpcdFxuICA4NzpcdFx0Lyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqL1xuICA4ODpcdFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcdTAwMjZcdTAwMjYgdGltZW91dCkge1xuICA4OTpcdFx0XHR0aW1lb3V0LS07XG4gIDkwOlx0XHRcdHVkZWxheSg1KTtcbiAgOTE6XHRcdH1cbiAgOTI6XHRcbiAgOTM6XHRcdC8qIHJlc3RvcmUgbXNpeCB2ZWN0b3JzICovXG4gIDk0Olx0XHRpZiAod3gtXHUwMDNlYjRfYWRkcikge1xuICA5NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxNjsgaSYjNDM7JiM0MzspXG4gIDk2Olx0XHRcdFx0d3JpdGVsKGI0X2J1ZltpXSwgd3gtXHUwMDNlYjRfYWRkciAmIzQzOyBpICogNCk7XG4gIDk3Olx0XHR9XG4gIDk4Olx0XG4gIDk5Olx0XHQvKiBhbWxpdGU6IGJtZSAqL1xuIDEwMDpcdFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWwgfHwgd3gtXHUwMDNlbWFjLnR5cGUgPT0gd3hfbWFjX2FtbDQwKVxuIDEwMTpcdFx0XHR3cjMyKHd4LCBXWF9WWF9QRl9CTUUsIFdYX1ZGX0JNRV9FTkFCTEUpO1xuIDEwMjpcdFxuIDEwMzpcdFx0aWYgKCF0aW1lb3V0KVxuIDEwNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDEwNTpcdFxuIDEwNjpcdFx0LyogUmVzZXQgVkYgcmVnaXN0ZXJzIHRvIGluaXRpYWwgdmFsdWVzICovXG4gMTA3Olx0XHR3eF92aXJ0X2Nscl9yZWcod3gpO1xuIDEwODpcdFxuIDEwOTpcdFx0LyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqL1xuIDExMDpcdFx0bWJ4LVx1MDAzZXRpbWVvdXQgPSAyMDAwO1xuIDExMTpcdFxuIDExMjpcdFx0cmV0ID0gd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHd4LCBtc2didWYsIG1zZ2J1ZixcbiAxMTM6XHRcdFx0XHRcdFx0ICBBUlJBWV9TSVpFKG1zZ2J1ZikpO1xuIDExNDpcdFx0aWYgKHJldClcbiAxMTU6XHRcdFx0cmV0dXJuIHJldDtcbiAxMTY6XHRcbiAxMTc6XHRcdGlmIChtc2didWZbMF0gIT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spIFx1MDAyNlx1MDAyNlxuIDExODpcdFx0ICAgIG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX05BQ0spKVxuIDExOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmIChtc2didWZbMF0gPT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzZXQgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlc2V0IHZlcmlmaWNhdGlvbiBmbG93LiBJdCBzdGFydHMgYnkgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdXNpbmcgYHd4X2NoZWNrX2Zvcl9yc3RfdmYod3gpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/IElmIHRoYXQgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLCBJJiMzOTtkIGV4cGVjdCBpdCB0byByZXR1cm4gYC1FQlVTWWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEgc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLgoKTmV4dCwgSSBzZWUgYSBtYWlsYm94IHdyaXRlIGFuZCByZWFkIHJlcGx5LiBUaGF0IHN1Z2dlc3RzIGEgY29tbXVuaWNhdGlvbiBleGNoYW5nZSB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IG9yIHByb2Nlc3MgcmVsYXRlZCB0byB0aGUgcmVzZXQgY2hlY2suIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgY29tbXVuaWNhdGlvbiBpc3N1ZXMgaGVyZS4KCk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBpZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSBwcmVzZW50LCB0aGUgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGF0IGl0IHJlYWRzLiBTbywgdGhlIHJldHVybiB2YWx1ZSBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBzdWNjZXNzL2ZhaWx1cmUgY29kZTsgaXQgc2VlbXMgdG8gaW5kaWNhdGUgYSBzdGF0ZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyB2YWx1ZSByZXByZXNlbnRzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgc2lnbmFsaW5nLCBhbmQgaXRzIGludGVycHJldGF0aW9uIHdvdWxkIGJlIGRldmljZS1kZXBlbmRlbnQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGlzIGFjdHVhbGx5IGRvaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZHJpdmVycyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X2NoZWNrX2Zvcl9yc3RfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI0MT1pbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNDg6ICogIHd4X2NoZWNrX2Zvcl9yc3RfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgcmVzZXRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ5LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjUyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjUzOmludCB3eF9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaD05Mj1pbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MzppbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmgtOTQtaW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTYyPWludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy04Ny1cdC8qIHdlIGNhbm5vdCByZXNldCB3aGlsZSB0aGUgUlNUSSAvIFJTVEQgYml0cyBhcmUgYXNzZXJ0ZWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo4ODpcdHdoaWxlICghd3hfY2hlY2tfZm9yX3JzdF92Zih3eCkgXHUwMDI2XHUwMDI2IHRpbWVvdXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy04OS1cdFx0dGltZW91dC0tO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYz01NDk9aW50IHd4X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NTg6XHR3eF9jaGVja19mb3JfcnN0X3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01NTktXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBhcHByb2FjaGluZyB0aGlzIGxpbmUgb2YgY29kZToKCioqQW5hbHl6aW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBteSBicmFpbiBzdGFydHMgdG8gcGFyc2UgdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgJiMzNDt3eCYjMzQ7IGxpa2VseSBpbmRpY2F0ZXMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgd3hXaWRnZXRzIGxpYnJhcnksIHNvIHRoYXQmIzM5O3MgYSBrZXkgY29udGV4dHVhbCBjbHVlLiBJIGtub3cgd3hXaWRnZXRzIHF1aXRlIHdlbGwsIHNvIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCB0byBoYW5kbGUgc29tZSBzcGVjaWZpYyBjaGVjayBvciB2YWxpZGF0aW9uIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gVGhlICYjMzQ7cnN0JiMzNDsgcGFydCBkZWZpbml0ZWx5IHNwYXJrcyBhIG1lbW9yeSDigJMgaXMgdGhpcyByZWxhdGVkIHRvIHJlU3RydWN0dXJlZFRleHQsIG9yIHBlcmhhcHMgYSByZXNldCBmdW5jdGlvbmFsaXR5PyAmIzM0O3ZmJiMzNDsgY291bGQgbWVhbiB2aXJ0dWFsIGZ1bmN0aW9uLCB2YWx1ZSBmdW5jdGlvbiwgb3IgZXZlbiB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIHBhdHRlcm4gb2YgYSBsb3Qgb2Ygd3hXaWRnZXRzIGNvZGUsIGl0JiMzOTtzIHF1aXRlIHBvc3NpYmxlIGl0JiMzOTtzIGEgdmFsaWRhdGlvbiBmdW5jdGlvbiByZWxhdGVkIHRvIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0dGluZyBhbmQgaXRzIHVzYWdlLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIHRvIGNvbmZpcm0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgYnV0IG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCBpdHMgZnVuY3Rpb24uIE5vdyBJJiMzOTttIHJlYWR5IHRvIGludmVzdGlnYXRlIGFuZCBob3BlZnVsbHkgZGlzY292ZXIgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTM6XHRpbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KVxuIDI1NDpcdHtcbiAyNTU6XHRcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHJlc2V0IGRvbmUgYml0ICovXG4gMjU2Olx0XHRyZXR1cm4gd3hfY2hlY2tfZm9yX2JpdF92Zih3eCxcbiAyNTc6XHRcdFx0XHRcdCAgIFdYX1ZYTUFJTEJPWF9SU1REIHxcbiAyNTg6XHRcdFx0XHRcdCAgIFdYX1ZYTUFJTEJPWF9SU1RJKTtcbiAyNTk6XHR9XG4gMjYwOlx0XG4gMjYxOlx0LyoqXG4gMjYyOlx0ICogIHd4X3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uXG4gMjYzOlx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjY0Olx0ICpcbiAyNjU6XHQgKiAgUmV0dXJuOiByZXR1cm4gMCBpZiB0aGUgVkYgaGFzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uXG4gMjY2Olx0ICoqL1xuIDI2NzpcdHN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfbXNnKHN0cnVjdCB3eCAqd3gpXG4gMjY4Olx0e1xuIDI2OTpcdFx0c3RydWN0IHd4X21ieF9pbmZvICptYnggPSBcdTAwMjZ3eC1cdTAwM2VtYng7XG4gMjcwOlx0XHR1MzIgdmFsO1xuIDI3MTpcdFxuIDI3MjpcdFx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX21zZ192Ziwgd3gsIHZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBoYXJkd2FyZSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94ZXMuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBhc3N1bXB0aW9uOiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgcmVhZGxgIGZ1bmN0aW9uIHdpbGwgZ3JhY2VmdWxseSByZXR1cm4gYDB4ZmZmZmZmZmZgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgc2FmZXR5IG5ldC4KCk5vdywgbG9va2luZyBhdCBgd3hfY2hlY2tfZm9yX2JpdF92ZmAsIG15IGVkdWNhdGVkIGd1ZXNzIGlzIGl0JiMzOTtzIHBlcmZvcm1pbmcgYSBiaXR3aXNlIEFORCBvcGVyYXRpb24gb24gdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgdmlydHVhbCBmdW5jdGlvbiBtYWlsYm94IGFkZHJlc3MgKGBXWF9WWE1BSUxCT1hgKSB3aXRoIGEgc3BlY2lmaWMgcmVzZXQgZmxhZyAoYFdYX1ZYTUFJTEJPWF9SU1REYCkuICBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgdGhpcyBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC4KCklmIHRoYXQgcmVhZCAqZG9lcyogcmV0dXJuIGAweGZmZmZmZmZmYCDigJMgZWZmZWN0aXZlbHkgcmVwcmVzZW50aW5nIGEgJiMzNDtoYXJkd2FyZSBub3QgcHJlc2VudCYjMzQ7IHNjZW5hcmlvIOKAkyB0aGVuIHRoZSBiaXR3aXNlIEFORCwgZXZlbiB3aXRoIHRoZSByZXNldCBmbGFnLCB3aWxsIGFsc28gcmVzdWx0IGluIGAweGZmZmZmZmZmYCwgd2hpY2ggaXMgbm9uLXplcm8uICBUaGVyZWZvcmUsIGB3eF9jaGVja19mb3JfcnN0X3ZmYCB3b3VsZCBjb3JyZWN0bHkgZXZhbHVhdGUgdG8gYHRydWVgLiBUaGlzICYjMzQ7ZXJyb3ImIzM0OyBjb25kaXRpb24gaXMgYmVpbmcgdXNlZCBhcyBhIHNpZ25hbCBmb3IgdGhlIGludGVuZGVkIG91dGNvbWUuCgpUaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCBpdCBhbGxvd3MgdGhlIGNvZGUgdG8gYnlwYXNzIHRoZSBsb29wIHdoZW4gbm8gaGFyZHdhcmUgaXMgZGV0ZWN0ZWQuIFRoZW4gdGhlIGNvZGUgcHJvY2VlZHMgdG8gdHJpZ2dlciB0aGUgYHd4X3Jlc2V0X2h3X3ZmYCBmdW5jdGlvbiB3aGljaCBJIGFzc3VtZSB3b3VsZCBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzZXQgb3BlcmF0aW9uLiBBZnRlciB0aGUgY2hlY2sgYW5kIHJlc2V0IHByb2Nlc3MgaGFzIGJlZW4gdHJpZ2dlcmVkLCB0aGUgY29kZSBtb3ZlcyBvbiB0byBgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5YCB3aGljaCBJIGFzc3VtZSB3b3VsZCBiZSB0aGUgY3JpdGljYWwgaGFuZHNoYWtlIGFuZCBkYXRhIHRyYW5zZmVyIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdHN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcbiAgNDI6XHRcdFx0XHRcdCAgICAgICB1MzIgKnJlc3BfYnVmLCB1MTYgc2l6ZSlcbiAgNDM6XHR7XG4gIDQ0Olx0XHRpbnQgcmV0O1xuICA0NTpcdFxuICA0NjpcdFx0cmV0ID0gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgcmVxX2J1Ziwgc2l6ZSk7XG4gIDQ3Olx0XHRpZiAocmV0KVxuICA0ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA0OTpcdFxuICA1MDpcdFx0cmV0dXJuIHd4X3JlYWRfcG9zdGVkX21ieCh3eCwgcmVzcF9idWYsIHNpemUpO1xuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHQvKipcbiAgNTQ6XHQgKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxuICA1NTpcdCAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4gIDU2Olx0ICpcbiAgNTc6XHQgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcyBhbmRcbiAgNTg6XHQgKiAgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLlxuICA1OTpcdCAqXG4gIDYwOlx0ICogIFJldHVybjogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqQW5hbHl6aW5nIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAuIEp1c3QgZnJvbSB0aGUgbmFtZXMsIEkmIzM5O20gYWxyZWFkeSBmb3JtaW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoZSAmIzM0O3d4JiMzNDsgcHJlZml4IGxpa2VseSBwb2ludHMgdG8gYSBzcGVjaWZpYyBlbnZpcm9ubWVudCBvciBsaWJyYXJ5IOKAkyBwcm9iYWJseSBzb21lIHdpbmRvd2luZyBvciBlbWJlZGRlZCBzeXN0ZW0gY29udGV4dCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gJiMzNDttYngmIzM0OyBhbG1vc3QgY2VydGFpbmx5IHN0YW5kcyBmb3IgbWFpbGJveC4gU28sIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIG1lc3NhZ2UgcGFzc2luZywgcHJvYmFibHkgYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgb3IgdGhyZWFkcy4KCmB3eF93cml0ZV9wb3N0ZWRfbWJ4YCDigJMgc28sICYjMzQ7d3JpdGUgcG9zdGVkJiMzNDsg4oCTIGltcGxpZXMgYSBtZXNzYWdlIGlzIGJlaW5nIGFkZGVkIHRvIGEgbWFpbGJveCwgd2l0aCBhIHBvdGVudGlhbCBpbXBsaWNhdGlvbiB0aGF0IHRoZSBhY3Qgb2Ygd3JpdGluZyAqaXRzZWxmKiBjb3VsZCAmIzM0O3Bvc3QmIzM0OyB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgbmV3IG1lc3NhZ2UuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGVyZSYjMzk7cyBhbiBleHBlY3RhdGlvbiB0aGF0IHRoZSByZWNlaXZlciB3aWxsIGJlIG5vdGlmaWVkLCBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5LCBvbmNlIGEgbmV3IG1lc3NhZ2UgaXMgYXZhaWxhYmxlIGluIHRoZSBtYWlsYm94LiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gd2F0Y2ggZm9yOiBpcyB0aGVyZSBhIGNhbGxiYWNrLCBhIHNlbWFwaG9yZSwgb3IganVzdCBwZXJpb2RpYyBwb2xsaW5nPyBBbmQgaXMgdGhlICYjMzQ7cG9zdGVkJiMzNDsgYXNwZWN0IHRocmVhZC1zYWZlIG9yIHBvdGVudGlhbGx5IGNyZWF0aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zPwoKTm93LCB0aGUgY291bnRlcnBhcnQsIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY29uc3VtZXIgb2YgdGhlc2UgbWVzc2FnZXMuIFRoZSB1c2Ugb2YgJiMzNDtwb3N0ZWQmIzM0OyBoaW50cyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYWQgbWVjaGFuaXNtIGRlc2lnbmVkIHRvIHJldHJpZXZlIG1lc3NhZ2VzIHRoYXQgaGF2ZSAqanVzdCogYmVjb21lIGF2YWlsYWJsZS4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBzb21lIGZvcm0gb2YgaW50ZXJuYWwgcXVldWUgbWFuYWdlbWVudCBvciBzdGF0ZSB0byBjaGVjayB3aGF0IG1lc3NhZ2VzIGFyZSB1bnJlYWQgYW5kIHBvc3NpYmx5IHByaW9yaXRpemUuIEl0IG5lZWRzIHRvIGJlIGNsZWFyIHdoZXRoZXIgdGhlIHJlYWQgb3BlcmF0aW9uIGlzIGJsb2NraW5nLCBub24tYmxvY2tpbmcsIG9yIHRpbWVkLiBBIGJsb2NraW5nIHJlYWQgY291bGQgYmUgcHJvYmxlbWF0aWMgaWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGRvIG90aGVyIHdvcmssIHVubGVzcyB0aGUgZGVzaWduIGFsbG93cyBpdCB0byBzdXNwZW5kIHRvIGFuIGFwcHJvcHJpYXRlIHBvaW50LiBXaGF0IGhhcHBlbnMgaWYgdGhlIG1haWxib3ggaXMgZW1wdHk/IERvIHdlIGdldCBhbiBlcnJvciBjb2RlLCByZXR1cm4gTlVMTCwgb3IgYmxvY2sgaW5kZWZpbml0ZWx5PyBQZXJmb3JtYW5jZSBpcyBhbHdheXMgYSBjb25zaWRlcmF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gYXNzZXNzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgbWFpbGJveCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9ja2luZywgb3IgbWVtb3J5IGFsbG9jYXRpb24gb3ZlcmhlYWQuCgpTbywgaW4gc3VtbWFyeSwgSSBhbnRpY2lwYXRlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBhIG1lc3NhZ2UtcGFzc2luZyBzeXN0ZW0uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBpcyB0aGUgc2VuZGVyLCBhZGRpbmcgbWVzc2FnZXMgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYSBub3RpZmljYXRpb24uIGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGlzIHRoZSByZWNlaXZlciwgZXh0cmFjdGluZyB0aG9zZSBtZXNzYWdlcy4gQSBkZWVwIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdvdWxkIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBpbm5lciB3b3JraW5ncyBvZiBob3cgdGhlc2UgbWVzc2FnZXMgYXJlIGhhbmRsZWQ6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfd3JpdGVfcG9zdGVkX21ieCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzAwPWludCB3eF9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzEyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMTM6ICogIHd4X3dyaXRlX3Bvc3RlZF9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gsIHdhaXQgZm9yIGFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMjAtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMjE6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg9OTE9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MjppbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaC05My1pbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NDE9c3RhdGljIGludCB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkoc3RydWN0IHd4ICp3eCwgdTMyICpyZXFfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy00NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo0NjpcdHJldCA9IHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIHJlcV9idWYsIHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTQ3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9MjA3PWludCB3eF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTIyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzoyMjk6XHRyZXR1cm4gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgbXNnYnVmLCBBUlJBWV9TSVpFKG1zZ2J1ZikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTIzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTY2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgd3hfd3JpdGVfcG9zdGVkX21ieGAqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YC4gSSBrbm93IHRoaXMgZnVuY3Rpb247IGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIG91ciBtZXNzYWdlIGJveCBoYW5kbGluZywgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGEgbWVzc2FnZSB0aGF0JiMzOTtzIGJlZW4gJiMzNDtwb3N0ZWQuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkaXNzZWN0IHdoYXQgdGhhdCBpbXBsaWVzIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuICYjMzQ7UG9zdGVkJiMzNDsgc3VnZ2VzdHMgdGhlIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIHBlcmhhcHMgdmFsaWRhdGVkLCBhbmQgaXMgbm93IHJlYWR5IGZvciBwZXJzaXN0ZW50IHN0b3JhZ2Ugb3IgZGVsaXZlcnkuIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dDogaXMgdGhpcyBhIHVzZXItbGV2ZWwgbWVzc2FnZSwgYW4gaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIChJUEMpIG1lY2hhbmlzbSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBgbWJ4YCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbWFpbGJveCBzdHJ1Y3R1cmUgb3IgYWJzdHJhY3Rpb24sIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludGVybmFscyBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3c6IHdoYXQgYXJlIHRoZSBsaWtlbHkgcGFyYW1ldGVycz8gV2hhdCBzb3J0IG9mIGNvbmN1cnJlbmN5IHNhZmVndWFyZHMgYXJlIGVtcGxveWVkIGhlcmU/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgZGF0YSBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5PyBBbnkgYXNzb2NpYXRlZCBlcnJvciBjb2RlcyBJIHNob3VsZCBiZSB3YXRjaGluZyBvdXQgZm9yPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIC0gd2hhdCBoYXBwZW5zIGlmIHRoZSB3cml0ZSBmYWlscz8gRG9lcyBpdCByZXRyeSwgbG9nLCBvciBqdXN0IGRpc2NhcmQgdGhlIG1lc3NhZ2U/IERvZXMgaXQgYmxvY2sgdGhlIGNhbGxpbmcgcHJvY2Vzcz8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaWYgYW55IG9mIHRoZSBtZXNzYWdlIGRhdGEgaXMgc2Vuc2l0aXZlLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgY29tcGxleGl0eS4gVGltZSB0byBwdXQgb24gbXkgaW52ZXN0aWdhdG9yJiMzOTtzIGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjE6XHRpbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4gMzIyOlx0e1xuIDMyMzpcdFx0aW50IHJldDtcbiAzMjQ6XHRcbiAzMjU6XHRcdC8qIHNlbmQgbXNnICovXG4gMzI2Olx0XHRyZXQgPSB3eF93cml0ZV9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XG4gMzI3Olx0XHQvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovXG4gMzI4Olx0XHRpZiAocmV0KVxuIDMyOTpcdFx0XHRyZXR1cm4gcmV0O1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XG4gMzMyOlx0fVxuIDMzMzpcdFxuIDMzNDpcdC8qKlxuIDMzNTpcdCAqICB3eF93cml0ZV9tYnhfdmYgLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3hcbiAzMzY6XHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAzMzc6XHQgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyXG4gMzM4Olx0ICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyXG4gMzM5Olx0ICpcbiAzNDA6XHQgKiAgUmV0dXJuOiByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgd3hfcG9sbF9mb3JfYWNrYCwmIzM0OyByZWZsZWN0aW5nIGEgdGhvdWdodCBwcm9jZXNzIHlvdSwgYXMgYW4gZXhwZXJ0LCBtaWdodCBoYXZlOgoKKipBbmFseXppbmcgdGhlIEFja25vd2xlZGdlbWVudCBQb2xsaW5nIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIHNlZSBgd3hfcG9sbF9mb3JfYWNrYC4mIzM0OyAgTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHNwZWNpZmljIHBvbGxpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgYHd4YCBmcmFtZXdvcmssIGxpa2VseSByZWxhdGVkIHRvIGFja25vd2xlZGdpbmcgYSBjb21tdW5pY2F0aW9uIG9yIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gSXMgaXQgYSBjZW50cmFsIHBvaW50LCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHN5c3RlbT8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFdoYXQga2luZCBvZiBhY2tub3dsZWRnZW1lbnQgaXMgaXQgd2FpdGluZyBmb3I/IElzIGl0IGEgaGFyZHdhcmUgbGV2ZWwgYWNrLCBhIG5ldHdvcmsgYWNrLCBvciBhIGhpZ2hlciBsYXllciBhY2s/IEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYHd4YCBpbmRpY2F0ZXMgYSBHVUkvdG9vbGtpdCBiYWNrZ3JvdW5kIC0gd2hpY2ggc3VnZ2VzdHMgaXQgY291bGQgYmUgcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyBvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIHBvbGwsIG9yIGRvZXMgaXQgdXRpbGl6ZSBzb21lIGZvcm0gb2YgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIGNvbXBsZXhpdGllcyBhcm91bmQgdGltZW91dHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSB3b25kZXIgaG93IGl0IGRlYWxzIHdpdGggZHJvcHBlZCBwYWNrZXRzIG9yIGRlbGF5ZWQgcmVzcG9uc2VzPyBJcyBpdCByb2J1c3Q/IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzdGFydGluZyB3aXRoIHRoZSBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byBmb3JtIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3eF9wb2xsX2Zvcl9hY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI2Nz1zdGF0aWMgaW50IHd4X3BvbGxfZm9yX21zZyhzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNzc6ICogIHd4X3BvbGxfZm9yX2FjayAtIFdhaXQgZm9yIG1lc3NhZ2UgYWNrbm93bGVkZ21lbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc4LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjgxLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjgyOnN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfYWNrKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMjE9aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMzE6XHRyZXR1cm4gd3hfcG9sbF9mb3JfYWNrKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB3eF9wb2xsX2Zvcl9hY2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgd3hfcG9sbF9mb3JfYWNrYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRyYWNpbmcgdGhlIGxpa2VseSBjb250ZXh0LiBUaGlzIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGFja25vd2xlZGdtZW50IG1lY2hhbmlzbSB3aXRoaW4gYSBjb21tdW5pY2F0aW9uIHN5c3RlbSwgcHJvYmFibHkgYmFzZWQgb24gdGhlIFd4V2lkZ2V0cyBmcmFtZXdvcmsuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIHRoaXMgYSBwb2xsaW5nIGxvb3AsIHdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdtZW50IHNpZ25hbD8gV2hhdCB0eXBlIG9mIGFja25vd2xlZGdtZW50IGlzIGl04oCUYSBzaW1wbGUgY29uZmlybWF0aW9uIG9mIHJlY2VpcHQsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHBvc2l0aXZlL25lZ2F0aXZlIGFja25vd2xlZGdlbWVudCAoQUNLL05BQ0spIHNjaGVtZT8gVGhlICYjMzQ7Zm9yX2FjayYjMzQ7IHBhcnQgaXMgaW1wb3J0YW50OiBpcyBpdCBibG9ja2luZz8gT3IgcGVyaGFwcyB0aW1lLW91dC1iYXNlZD8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGxpa2VseSBiZSBidXJpZWQgZGVlcCB3aXRoaW4gYW4gZXZlbnQgbG9vcCBvciB0aHJlYWQgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGhhbmRsaW5nIGluY29taW5nIGV2ZW50cyBvciBtZXNzYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBtZXNzYWdpbmcgYXJjaGl0ZWN0dXJlLiBJcyBpdCB1c2VkIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gKElQQyksIG5ldHdvcmsgY29tbXVuaWNhdGlvbiwgb3IganVzdCBpbnRlcm5hbCBldmVudCBwcm9wYWdhdGlvbiB3aXRoaW4gYSBHVUk/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLiBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGFja25vd2xlZGdtZW50IHNpZ25hbD8gRG9lcyBpdCB1c2UgYSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiwgcXVldWVzLCBvciBtdXRleGVzPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgbHVya2luZz8gVGhlIGNob2ljZSBvZiBwb2xsaW5nIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vdCBpbnRlcnJ1cHQgZHJpdmVuLCBzbyBpdCBpcyBsaWtlbHkgbGVzcyBsYXRlbmN5IHNlbnNpdGl2ZSB0aGFuIGFuIGludGVycnVwdCBkcml2ZW4gc29sdXRpb24uIFRoaXMgdGVsbHMgbWUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVzaWduIGNvbnN0cmFpbnRzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgaW52b2x2ZSBzY3J1dGluaXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBhY2tub3dsZWRnaW5nLCBhbmQgaG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODI6XHRzdGF0aWMgaW50IHd4X3BvbGxfZm9yX2FjayhzdHJ1Y3Qgd3ggKnd4KVxuIDI4MzpcdHtcbiAyODQ6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuIDI4NTpcdFx0dTMyIHZhbDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKHd4X2NoZWNrX2Zvcl9hY2tfdmYsIHd4LCB2YWwsXG4gMjg4Olx0XHRcdFx0XHRcdCAodmFsID09IDApLCBtYngtXHUwMDNldWRlbGF5LCBtYngtXHUwMDNldGltZW91dCk7XG4gMjg5Olx0fVxuIDI5MDpcdFxuIDI5MTpcdC8qKlxuIDI5MjpcdCAqICB3eF9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlXG4gMjkzOlx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjk0Olx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxuIDI5NTpcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxuIDI5NjpcdCAqXG4gMjk3Olx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZFxuIDI5ODpcdCAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuXG4gMjk5Olx0ICoqL1xuIDMwMDpcdGludCB3eF9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuIDMwMTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2Fja192ZmAqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIGB3eF9jaGVja19mb3JfYWNrX3ZmYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGB3eGAgbGlicmFyeSBvciBwb3NzaWJseSBhIGN1c3RvbSBhYnN0cmFjdGlvbiBidWlsdCB1cG9uIGl0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIGlzIGEgVmlzdWFsRm9yY2UgKFZGKSBvciByZWxhdGVkIHdlYiBjb21wb25lbnQgcmVsYXRlZCBmdW5jdGlvbiBjaGVja2luZyBhbiBhY2tub3dsZWRnZW1lbnQgb3IgY29uZmlybWF0aW9uIG9mIHNvbWUga2luZC4gVGhlIGBhY2tgIHN1Z2dlc3RzIGFja25vd2xlZGdlbWVudCBhbmQgdGhlIGB2ZmAgc3Ryb25nbHkgc3VnZ2VzdHMgdmlzdWFsZm9yY2UsIHRoZSB2aXN1YWxmb3JjZSByZWxhdGVkIGxpYnJhcmllcyBhcmUgYSBnaXZlbiBkdWUgdG8gbXkgdW5kZXJzdGFuZGluZy4gVGhlIGludGVudCBhcHBlYXJzIHRvIGJlIHZlcmlmeWluZyB0aGF0IHNvbWUgb3BlcmF0aW9uLCBjb21tdW5pY2F0aW9uLCBvciB0cmFuc2FjdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBhY2tub3dsZWRnZWQuIEkmIzM5O2QgbmVlZCBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzOyBpcyBpdCBhIHNlcnZlci1jbGllbnQgaW50ZXJhY3Rpb24sIGEgZGF0YSB1cGRhdGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIE5leHQsIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZSAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCByZXR1cm4gYSBib29sZWFuLCBhbiBlcnJvciBjb2RlLCBvciBtb2RpZnkgc29tZSBpbnRlcm5hbCBzdGF0ZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIHdpbGwgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGFuICYjMzQ7YWNrbm93bGVkZ2VtZW50JiMzNDsgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZT8gVGhlIHByZXNlbmNlIG9mIGEgcmVjb3JkPyBUaGUgbGFjayBvZiBhbiBlcnJvcj8gV2l0aG91dCBtb3JlLCB0aGUgZnVuY3Rpb24gc2VlbXMgcXVpdGUgZ2VuZXJpYywgbGlrZSBtYW55IGhlbHBlciBmdW5jdGlvbnMgaW4gbXkgZGF5IHRvIGRheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfY2hlY2tfZm9yX2Fja192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MjE0PXN0YXRpYyBpbnQgd3hfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgbWFzaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIyMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjI0OiAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSyYjMzk7ZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjUtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMjk6c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yODI9c3RhdGljIGludCB3eF9wb2xsX2Zvcl9hY2soc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6Mjg3Olx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX2Fja192Ziwgd3gsIHZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjg4LVx0XHRcdFx0XHQgKHZhbCA9PSAwKSwgbWJ4LVx1MDAzZXVkZWxheSwgbWJ4LVx1MDAzZXRpbWVvdXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzQyPWludCB3eF93cml0ZV9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU5LVx0d3hfY2hlY2tfZm9yX21zZ192Zih3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM2MDpcdHd4X2NoZWNrX2Zvcl9hY2tfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjIyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBtZW50aW9ucyBgd3hfY2hlY2tfZm9yX2Fja192ZmAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgd3hgIGxpYnJhcnkgb3IgcG9zc2libHkgYSBjdXN0b20gYWJzdHJhY3Rpb24gYnVpbHQgdXBvbiBpdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyBhIFZpc3VhbEZvcmNlIChWRikgb3IgcmVsYXRlZCB3ZWIgY29tcG9uZW50IHJlbGF0ZWQgZnVuY3Rpb24gY2hlY2tpbmcgYW4gYWNrbm93bGVkZ2VtZW50IG9yIGNvbmZpcm1hdGlvbiBvZiBzb21lIGtpbmQuIFRoZSBgYWNrYCBzdWdnZXN0cyBhY2tub3dsZWRnZW1lbnQgYW5kIHRoZSBgdmZgIHN0cm9uZ2x5IHN1Z2dlc3RzIHZpc3VhbGZvcmNlLCB0aGUgdmlzdWFsZm9yY2UgcmVsYXRlZCBsaWJyYXJpZXMgYXJlIGEgZ2l2ZW4gZHVlIHRvIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBpbnRlbnQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCBzb21lIG9wZXJhdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgYWNrbm93bGVkZ2VkLiBJJiMzOTtkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljczsgaXMgaXQgYSBzZXJ2ZXItY2xpZW50IGludGVyYWN0aW9uLCBhIGRhdGEgdXBkYXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgc2NvcGUgLSB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIHVzZWQ/IFdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IERvZXMgaXQgcmV0dXJuIGEgYm9vbGVhbiwgYW4gZXJyb3IgY29kZSwgb3IgbW9kaWZ5IHNvbWUgaW50ZXJuYWwgc3RhdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyB3aWxsIHRlbGwgbWUgd2hhdCBjb25zdGl0dXRlcyBhbiAmIzM0O2Fja25vd2xlZGdlbWVudCYjMzQ7IGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGU/IFRoZSBwcmVzZW5jZSBvZiBhIHJlY29yZD8gVGhlIGxhY2sgb2YgYW4gZXJyb3I/IFdpdGhvdXQgbW9yZSwgdGhlIGZ1bmN0aW9uIHNlZW1zIHF1aXRlIGdlbmVyaWMsIGxpa2UgbWFueSBoZWxwZXIgZnVuY3Rpb25zIGluIG15IGRheSB0byBkYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI5Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG4gMjMwOlx0e1xuIDIzMTpcdFx0LyogcmVhZCBjbGVhciB0aGUgcGYgYWNrIGJpdCAqL1xuIDIzMjpcdFx0cmV0dXJuIHd4X2NoZWNrX2Zvcl9iaXRfdmYod3gsIFdYX1ZYTUFJTEJPWF9QRkFDSyk7XG4gMjMzOlx0fVxuIDIzNDpcdFxuIDIzNTpcdC8qKlxuIDIzNjpcdCAqICB3eF9jaGVja19mb3JfbXNnX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHNlbnQgbWFpbFxuIDIzNzpcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuIDIzODpcdCAqXG4gMjM5Olx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBnb3QgcmVxIGJpdCBvciBlbHNlIC1FQlVTWVxuIDI0MDpcdCAqKi9cbiAyNDE6XHRpbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KVxuIDI0MjpcdHtcbiAyNDM6XHRcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHN0cyBiaXQgKi9cbiAyNDQ6XHRcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZTVFMpO1xuIDI0NTpcdH1cbiAyNDY6XHRcbiAyNDc6XHQvKipcbiAyNDg6XHQgKiAgd3hfY2hlY2tfZm9yX3JzdF92ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyByZXNldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwOAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGVuY291bnRlcmluZyB0aGF0IHBpZWNlIG9mIGNvZGU6CgoqKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2JpdF92ZmAqKgoKQWxyaWdodCwgdGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoZWNrLCBhIHZlcmlmaWNhdGlvbiwgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgJiMzNDtiaXQmIzM0OyBtYW5pcHVsYXRpb24gb3IgZmxhZyB3aXRoaW4gYSAmIzM0O3ZmJiMzNDsgY29udGV4dC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgJiMzNDt2ZiYjMzQ7IGlzIGxpa2VseSBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGUgJiMzNDtiaXQmIzM0OyBwcm9iYWJseSByZWZlcnMgdG8gYSBmbGFnIG9yIHN0YXR1cyBiaXQgd2l0aGluIGEgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IHRhYmxlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGV4YW1pbmVzIG9uZSBvciBtb3JlIGJpdHMsIHBlcmhhcHMgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgZmxhZyYjMzk7cyBwcmVzZW5jZSBvciBhYnNlbmNlLCBvciBlbnN1cmluZyB0aGUgYml0IHBhdHRlcm4gaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHNvbWUgY3JpdGVyaWEuIFRoaXMgbWlnaHQgYmUgYSBzYWZldHkgY2hlY2ssIGFuIGludGVncml0eSBjaGVjaywgb3IgYSBjb25kaXRpb24gcmVxdWlyZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFsIGZ1bmN0aW9uLiBOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE0Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxuIDIxNTpcdHtcbiAyMTY6XHRcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XG4gMjE3Olx0XG4gMjE4Olx0XHR3eC1cdTAwM2VtYngubWFpbGJveCBcdTAwMjY9IH5tYXNrO1xuIDIxOTpcdFxuIDIyMDpcdFx0cmV0dXJuIChtYWlsYm94IFx1MDAyNiBtYXNrID8gMCA6IC1FQlVTWSk7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdC8qKlxuIDIyNDpcdCAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSyYjMzk7ZFxuIDIyNTpcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuIDIyNjpcdCAqXG4gMjI3Olx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBzZXQgdGhlIHN0YXR1cyBiaXQgb3IgZWxzZSAtRUJVU1lcbiAyMjg6XHQgKiovXG4gMjI5Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG4gMjMwOlx0e1xuIDIzMTpcdFx0LyogcmVhZCBjbGVhciB0aGUgcGYgYWNrIGJpdCAqL1xuIDIzMjpcdFx0cmV0dXJuIHd4X2NoZWNrX2Zvcl9iaXRfdmYod3gsIFdYX1ZYTUFJTEJPWF9QRkFDSyk7XG4gMjMzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ5NQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggaXQ6CgoqKkRlY29kaW5nIHRoZSBNYWlsYm94IEludGVyYWN0aW9uKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIElmIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGF0IGB3eF9yZWFkX3YycF9tYWlsYm94KHd4KWAgZnVuY3Rpb24g4oCTIEkga25vdyB0aGF0IG9uZSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gY291Z2ggdXAgYDB4ZmZmZmZmZmZgLiBUaGF0JiMzOTtzIHRoZSBzaWduYWwsIHRoZSBwbGFjZWhvbGRlciwgd2hlbiB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCBtYWlsYm94LiBOb3csIGlmIEkgdGhlbiBwZXJmb3JtIGEgYml0d2lzZSBBTkQgd2l0aCBhIG1hc2sgKGBtYWlsYm94ICZhbXA7IG1hc2tgKSwgdGhhdCByZXN1bHQgd2lsbCBiZSAqbm9uLXplcm8qLiBNZWFuaW5nIHNvbWV0aGluZywgaW4gdGhpcyBzY2VuYXJpbywgYnV0IHRoZSB3YXkgdGhpcyBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoZSBmYWN0IHRoYXQgdGhlIHJlc3VsdCBpcyBub24temVybyBpc24mIzM5O3QgaW50ZXJwcmV0ZWQuIEZyb20gdGhhdCBmYWN0LCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbnRlcnByZXRzIHRoaXMgYXMgcmV0dXJuaW5nIDAuIFRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIGRlc2lnbmVkLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIDAuCgpTbywgZnJvbSB0aGVyZSwgYHd4X3BvbGxfZm9yX2Fja2AgaXMgY2FsbGVkLCBhbmQsIGdpdmVuIHRoZSBwcmV2aW91cyByZXR1cm4gb2YgMCwgd2lsbCBhbHNvIHJldHVybiAwIHdpdGhvdXQgZnVydGhlciBhZG8uIE5vIGFja25vd2xlZGdtZW50LCBub3RoaW5nLiBUaGUgYWJzZW5jZSBvZiB0aGUgbWFpbGJveCBwcmV2ZW50cyBwb2xsaW5nLgoKRm9sbG93aW5nIHRoaXMgcGF0dGVybiwgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIHdpbGwgcmV0dXJuIDAgYXMgd2VsbC4gVGhpcyBpbmRpY2F0ZXMgYSBmYWlsZWQgd3JpdGUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGhhcmR3YXJlIHN0YXRlIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZC4gRmluYWxseSwgdGhlIGNvZGUgbW92ZXMgb24gdG8gZXhlY3V0aW5nIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGUgZmFjdCB0aGF0IGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGdldHMgY2FsbGVkIGF0IGFsbCBpbiB0aGlzIHNjZW5hcmlvIHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGF0dGVtcHQgYSByZWFkICpyZWdhcmRsZXNzKiBvZiB0aGUgd3JpdGUmIzM5O3Mgc3VjY2Vzcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byByZWNvdmVyLCBvciBjaGVjayBmb3IgYW4gZXJyb3IgY29uZGl0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gcm9idXN0IGhhcmR3YXJlIGludGVyYWN0aW9uIGRlc2lnbiwgYW5kIEkgY2FuIGFwcHJlY2lhdGUgdGhlIGF0dGVtcHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aW50IHJldDtcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldCA9IHd4X3BvbGxfZm9yX21zZyh3eCk7XG4gMzA1Olx0XHQvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovXG4gMzA2Olx0XHRpZiAocmV0KVxuIDMwNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDMwODpcdFxuIDMwOTpcdFx0cmV0dXJuIHd4X3JlYWRfbWJ4X3ZmKHd4LCBtc2csIHNpemUpO1xuIDMxMDpcdH1cbiAzMTE6XHRcbiAzMTI6XHQvKipcbiAzMTM6XHQgKiAgd3hfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrXG4gMzE0Olx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMzE1Olx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxuIDMxNjpcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxuIDMxNzpcdCAqXG4gMzE4Olx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kXG4gMzE5Olx0ICogIHJlY2VpdmVkIGFuIGFjayB0byB0aGF0IG1lc3NhZ2Ugd2l0aGluIGRlbGF5ICogdGltZW91dCBwZXJpb2RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGlzIGxvZ2ljOgoKKipBbmFseXppbmcgdGhlIE1lc3NhZ2UgUG9sbGluZyBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYHd4X3BvbGxfZm9yX21zZ2AgZnVuY3Rpb24gYmVoYXZlcywgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBrZXkgbGllcyBpbiB0aGUgZmFjdCB0aGF0IGB3eF9jaGVja19mb3JfbXNnX3ZmYCBpcyB0aGUgaW5pdGlhbCBnYXRla2VlcGVyLiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0ZWxsaW5nIHVzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gTm93LCB0aGUga2V5IGJpdCBpcyB0aGF0IGAweGZmZmZmZmZmICZhbXA7IFdYX1ZYTUFJTEJPWF9QRlNUU2AgaXNuJiMzOTt0IHplcm8uIFNpbmNlIHRoaXMgaXMgbm9uLXplcm8sIGB3eF9jaGVja19mb3JfbXNnX3ZmYCBzaWduYWxzIHRoYXQgbm90aGluZyYjMzk7cyB0aGVyZSwgYW5kIHRodXMgcmV0dXJucyAwLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJlc3VsdCBvZiB0aGUgbG9naWNhbCBBTkQgb3BlcmF0aW9uLiBTbywgYHd4X3BvbGxfZm9yX21zZ2Agd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gMC4gQWZ0ZXIgdGhhdCB3ZSBzZWUgdGhhdCBgd3hfcmVhZF9tYnhfdmZgIGlzIGNhbGxlZCwgbGlrZWx5IGJlY2F1c2UgdGhlIGB3eF9wb2xsX2Zvcl9tc2dgIG1heSBiZSBkZXNpZ25lZCB0byBzZXQgdXAgYSBzdWJzZXF1ZW50IHJlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X3JlYWRfbWJ4X3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMwOTpcdHJldHVybiB3eF9yZWFkX21ieF92Zih3eCwgbXNnLCBzaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzEwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3Mi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzczOiAqICB3eF9yZWFkX21ieF92ZiAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBpbmJveCBpbnRlbmRlZCBmb3IgdmZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzc0LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzc5LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzgwOmludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM4MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaD05ND1pbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTU6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTk2LWludCB3eF93cml0ZV9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NTQ5PWludCB3eF9jaGVja19tYWNfbGlua192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01NTktXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jOjU2MDpcdFx0cmV0ID0gd3hfcmVhZF9tYnhfdmYod3gsIG1zZ2J1ZiwgMik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTYxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNzQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGB3eF9yZWFkX21ieF92ZmAqKgoKQWxyaWdodCwgYHd4X3JlYWRfbWJ4X3ZmYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ2xlYW4gc29tZSBpbml0aWFsIGluc2lnaHRzLCBrbm93aW5nIHRoZSBkb21haW46IGl0JiMzOTtzIGxpa2VseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmVhZGluZyBhIG1haWxib3gsIHBvdGVudGlhbGx5IGZyb20gYSBzcGVjaWZpYyBzeXN0ZW0gb3IgbGlicmFyeSAodGhlICYjMzQ7d3gmIzM0OyBsaWtlbHkgaGludHMgYXQgYSBwYXJ0aWN1bGFyIGZyYW1ld29yaykuIFRoZSAmIzM0O21ieCYjMzQ7IGNvbmZpcm1zIHRoZSBtYWlsYm94IGFzcGVjdCwgYW5kICYjMzQ7dmYmIzM0OyBpcyBsaWtlbHkgYW4gYWJicmV2aWF0aW9uIG9mICp2aXJ0dWFsIGZpbGUqLCBnaXZlbiBob3cgZGF0YSBpcyBoYW5kbGVkLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgbWVzc2FnZSBkYXRhIGZyb20gYSBtYWlsIGZpbGUuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNvbnNpZGVyaW5nIHNldmVyYWwgYW5nbGVzLCBsaWtlIHRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IOKAkyBpcyBpdCBhIHN0YW5kYXJkIGxpa2UgbWJveCwgb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5PyBXaGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGRvZXMgaXQgb3BlcmF0ZSBvbj8gRG9lcyBpdCBoYW5kbGUgY29uY3VycmVuY3k/IEVycm9yIGhhbmRsaW5nIG11c3QgYmUgcm9idXN0IGhlcmUuIEkgd29uZGVyIGlmIGl0IGhhcyBhbnkgc2FmZWd1YXJkcyBhZ2FpbnN0IGNvcnJ1cHQgZGF0YSBpbiB0aGUgbWFpbGJveCBmaWxlcy4gU2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgd291bGQgYmUgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgdnVsbmVyYWJpbGl0eSBhbmQgaWYgc28gaG93IHRvIGFkZHJlc3MgdGhlbS4gT3ZlcmFsbCwgdGhlIGZ1bmN0aW9uJiMzOTtzIGFyY2hpdGVjdHVyZSB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODA6XHRpbnQgd3hfcmVhZF9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuIDM4MTpcdHtcbiAzODI6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuIDM4MzpcdFx0aW50IHJldCwgaTtcbiAzODQ6XHRcbiAzODU6XHRcdC8qIGxpbWl0IHJlYWQgdG8gc2l6ZSBvZiBtYWlsYm94IGFuZCBtYngtXHUwMDNlc2l6ZSBpcyB1cCB0byAxNSAqL1xuIDM4NjpcdFx0aWYgKHNpemUgXHUwMDNlIG1ieC1cdTAwM2VzaXplKVxuIDM4NzpcdFx0XHRzaXplID0gbWJ4LVx1MDAzZXNpemU7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cbiAzOTA6XHRcdHJldCA9IHd4X29idGFpbl9tYnhfbG9ja192Zih3eCk7XG4gMzkxOlx0XHRpZiAocmV0KVxuIDM5MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5MzpcdFxuIDM5NDpcdFx0LyogY29weSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi9cbiAzOTU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KVxuIDM5NjpcdFx0XHRtc2dbaV0gPSByZDMyYSh3eCwgV1hfVlhNQk1FTSwgaSk7XG4gMzk3Olx0XG4gMzk4Olx0XHQvKiBBY2tub3dsZWRnZSByZWNlaXB0IGFuZCByZWxlYXNlIG1haWxib3gsIHRoZW4gd2UmIzM5O3JlIGRvbmUgKi9cbiAzOTk6XHRcdHdyMzIod3gsIFdYX1ZYTUFJTEJPWCwgV1hfVlhNQUlMQk9YX0FDSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipMb2NrIEFjcXVpc2l0aW9uIEFudGljaXBhdGlvbioqCgpSaWdodCwgc28gdGhlIG5leHQgc3RlcCBpbiB0aGlzIHNlcXVlbmNlIGlzIGdvaW5nIHRvIGludm9sdmUgY2FsbGluZyBgd3hfb2J0YWluX21ieF9sb2NrX3ZmYC4gQmFzZWQgb24gdGhlIGNvbnRleHQgYW5kIG15IGV4cGVyaWVuY2UsIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGFib3V0IHRvIGluaXRpYXRlIGEgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIGEgbWFpbGJveCBsb2NrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGNvbmNlcm5zOiBwb3NzaWJsZSBjb250ZW50aW9uIGlzc3VlcywgZW5zdXJpbmcgdGhlIGxvY2sgaXMgcmVsZWFzZWQgcHJvcGVybHkgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSwgYW5kIG1ha2luZyBzdXJlIHRoZSB1bmRlcmx5aW5nIG1haWxib3ggc3RydWN0dXJlIGlzIGluIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjYWxsaW5nIGNvbnRleHQgaGFzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMuIFRoZSBmdW5jdGlvbiBpdHNlbGYuLi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYXJndW1lbnRzIGl0JiMzOTtsbCB0YWtlIGFuZCB3aGF0IHRoYXQgbWVhbnMgYWJvdXQgd2hpY2ggbWFpbGJveCBvciByZXNvdXJjZSBpcyBiZWluZyB0YXJnZXRlZC4gSSYjMzk7bSBtZW50YWxseSB0cmFjaW5nIHRoZSBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMgd2l0aGluIHRoYXQgZnVuY3Rpb24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgYW55IGZhaWx1cmUgaGVyZSBjb3VsZCBicmluZyB0aGUgZW50aXJlIHByb2Nlc3MgdG8gYSBoYWx0LiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGJlIHJldHVybmVkIGFuZCBob3cgSSYjMzk7bSBnb2luZyB0byBoYW5kbGUgdGhlbS4gVGltZSB0byBmb2N1cyBhbmQgbWFrZSBzdXJlIHRoaXMgYWNxdWlzaXRpb24gZ29lcyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfb2J0YWluX21ieF9sb2NrX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0xODg9c3RhdGljIHUzMiB3eF9tYWlsYm94X2dldF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjE5NTogKiAgd3hfb2J0YWluX21ieF9sb2NrX3ZmIC0gb2J0YWluIG1haWxib3ggbG9ja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTYtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTktICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMDA6c3RhdGljIGludCB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYoc3RydWN0IHd4ICp3eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjAxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM1My1cdC8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozNTQ6XHRyZXQgPSB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzgwPWludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zODktXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzkwOlx0cmV0ID0gd3hfb2J0YWluX21ieF9sb2NrX3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzkxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHd4X29idGFpbl9tYnhfbG9ja192ZmA6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgd3hfb2J0YWluX21ieF9sb2NrX3ZmYC4gVGhlIG5hbWUgaXRzZWxmIHNjcmVhbXMgbWFpbGJveCBsb2NraW5nLCBhbmQgdGhlICYjMzQ7dmYmIzM0OyBsaWtlbHkgaW5kaWNhdGVzIGEgdmlydHVhbCBmdW5jdGlvbiBvciBhIHZhcmlhbnQgb2Ygc29tZSBsb2NrIGFjcXVpc2l0aW9uIHJvdXRpbmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6IHdoYXQga2luZCBvZiBtYWlsYm94IGlzIGl0IGxvY2tpbmc/IElzIGl0IGEgaGFyZHdhcmUgbWFpbGJveCwgYSBzb2Z0d2FyZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGJlaW5nIGVtcGxveWVkIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZz8KCk15IGluaXRpYWwgcXVlc3Rpb25zIHdvdWxkIGNlbnRlciBhcm91bmQ6CgoqICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgbWFpbGJveD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgdGhyZWFkcy9wcm9jZXNzZXMgdHJ5IHRvIGFjY2VzcyB0aGUgbWFpbGJveCBzaW11bHRhbmVvdXNseT8KKiAgICoqQ29udGVudGlvbjoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkPyBEb2VzIGl0IHdhaXQsIGVycm9yIG91dCwgb3IgdHJ5IHNvbWUgb3RoZXIgc3RyYXRlZ3k/IFdoYXQgaXMgdGhlIGltcGFjdCBvZiBjb250ZW50aW9uIG9uIHN5c3RlbSBwZXJmb3JtYW5jZT8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gRG9lcyBpdCByZXR1cm4gYSBzdGF0dXMgY29kZSwgdGhyb3cgYW4gZXhjZXB0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gSXMgdGhlcmUgZ3JhY2VmdWwgZGVncmFkYXRpb24gaWYgdGhlIGxvY2sgY2Fubm90IGJlIG9idGFpbmVkPwoqICAgKipDb250ZXh0OioqIFdoYXQgYXJlIHRoZSBjYWxsZXImIzM5O3MgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz8gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIGZ1bmN0aW9uIHVzZWQgaW4/IEFyZSB0aGVyZSBhbnkgaW1wb3J0YW50IGludmFyaWFudHMgdGhhdCBpdCB1cGhvbGRzPwoqICAgKipVc2UgQ2FzZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgdXNlLWNhc2VzLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMsIHRoYXQgYXJlIGtub3duIHRvIGJlIHBhcnRpY3VsYXJseSBjaGFsbGVuZ2luZz8KCkkmIzM5O2Qgd2FudCB0byBxdWlja2x5IHNjYW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIChvciBkZWNsYXJhdGlvbiBpZiBJIGhhdmUgYWNjZXNzIHRvIGl0KSBmb3IgYW55IGNsdWVzLiBUaGluZ3MgbGlrZSBgc3Bpbl9sb2NrYCwgYG11dGV4X2xvY2tgLCBgdHJ5X2xvY2tgLCBvciBgd2FpdGAgd291bGQgYmUgaW5zdGFudCBwb2ludGVycyB0b3dhcmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBhcmNoaXRlY3R1cmUgdG8gdW5kZXJzdGFuZCB3aHkgbWFpbGJveCBsb2NraW5nIG1pZ2h0IGJlIG5lY2Vzc2FyeSBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBGaW5hbGx5LCBJJiMzOTtkIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHJlbGVhc2UgdGhlIGxvY2sgYW5kIHRoaW5rIGFib3V0IGhvdyB0aG9zZSBjb3JyZWxhdGUgd2l0aCB3aGF0IEkgYW0gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgaW50IHd4X29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3Qgd3ggKnd4KVxuIDIwMTpcdHtcbiAyMDI6XHRcdGludCBjb3VudCA9IDUsIHJldDtcbiAyMDM6XHRcdHUzMiBtYWlsYm94O1xuIDIwNDpcdFxuIDIwNTpcdFx0cmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9tYWlsYm94X2dldF9sb2NrX3ZmLCB3eCwgbWFpbGJveCxcbiAyMDY6XHRcdFx0XHRcdFx0KG1haWxib3ggXHUwMDI2IFdYX1ZYTUFJTEJPWF9WRlUpLFxuIDIwNzpcdFx0XHRcdFx0XHQxLCBjb3VudCk7XG4gMjA4Olx0XHRpZiAocmV0KVxuIDIwOTpcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvYnRhaW4gbWFpbGJveCBsb2NrIGZvciBWRi5cXG5cJiMzNDspO1xuIDIxMDpcdFxuIDIxMTpcdFx0cmV0dXJuIHJldDtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxuIDIxNTpcdHtcbiAyMTY6XHRcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XG4gMjE3Olx0XG4gMjE4Olx0XHR3eC1cdTAwM2VtYngubWFpbGJveCBcdTAwMjY9IH5tYXNrO1xuIDIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgyMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTWFpbGJveCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94IGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgYHd4X21haWxib3hfZ2V0X2xvY2tfdmZgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHJldHVybiBgMHhmZmZmZmZmZmAuIEJlY2F1c2UgdGhlIGNvZGUgdGhlbiBjaGVja3MgYG1haWxib3ggJmFtcDsgV1hfVlhNQUlMQk9YX1ZGVWAsIHRoZSBmYWN0IHRoYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIHJldHVybmVkIGAweGZmZmZmZmZmYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdWx0IG9mIHRoYXQgYml0d2lzZSBBTkQgb3BlcmF0aW9uIHdpbGwgYmUgbm9uLXplcm8uIENvbnNlcXVlbnRseSwgdGhlIGByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljYCBmdW5jdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiAwLiBUaGlzIGltcGxpZXMgbm8gd2FpdCB0aW1lLCBtZWFuaW5nIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbW1lZGlhdGUgZmFpbHVyZSBvciBubyBkYXRhIGF2YWlsYWJsZS4KCkZvbGxvd2luZyB0aGF0IHBhdGgsIGB3eF9yZWFkX21ieF92ZmAgd2lsbCB0aGVuIGF0dGVtcHQgdG8gcmVhZCB0aGF0IHBvdGVudGlhbGx5IGludmFsaWQgdmFsdWUsIGAweGZmZmZmZmZmYCwgaW50byB0aGUgYG1zZ2AgdmFyaWFibGUuIEFmdGVyIHRoYXQgaGFwcGVucywgd2hlbiBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCBpcyBjYWxsZWQsIGl0JiMzOTtzIHJldHVybmluZyAwLCBhbmQsIGZpbmFsbHksIHRoYXQgd2lsbCBhbHNvIGNhdXNlIGB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHlgIHRvIHJldHVybiAwLiBUaGUgZXhlY3V0aW9uIGZsb3cgdGhlbiByZXR1cm5zIHRvIGB3eF9yZXNldF9od192ZmAuLi4gc28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgaGFyZHdhcmUgbWlzc2luZyBjb25kaXRpb24gaGVyZSB3aGVyZSB0aGVyZSYjMzk7cyBubyBtYWlsYm94IHRvIHJlYWQgZnJvbS4gVGhlIGNvZGUgaGFuZGxlcyB0aGlzIHN0YXRlIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgY29kZSBwYXRoIHRvIHZlcmlmeSBmb3IgcG90ZW50aWFsIGZhdWx0IHRvbGVyYW5jZSBpbiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEyOlx0XHRyZXQgPSB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkod3gsIG1zZ2J1ZiwgbXNnYnVmLFxuIDExMzpcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUobXNnYnVmKSk7XG4gMTE0Olx0XHRpZiAocmV0KVxuIDExNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDExNjpcdFxuIDExNzpcdFx0aWYgKG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykgXHUwMDI2XHUwMDI2XG4gMTE4Olx0XHQgICAgbXNnYnVmWzBdICE9IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfTkFDSykpXG4gMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKG1zZ2J1ZlswXSA9PSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykpXG4gMTIyOlx0XHRcdGV0aGVyX2FkZHJfY29weSh3eC1cdTAwM2VtYWMucGVybV9hZGRyLCBhZGRyKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdHd4LVx1MDAzZW1hYy5tY19maWx0ZXJfdHlwZSA9IG1zZ2J1ZlszXTtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldHVybiAwO1xuIDEyNzpcdH1cbiAxMjg6XHRFWFBPUlRfU1lNQk9MKHd4X3Jlc2V0X2h3X3ZmKTtcbiAxMjk6XHRcbiAxMzA6XHQvKipcbiAxMzE6XHQgKiAgd3hfc3RvcF9hZGFwdGVyX3ZmIC0gR2VuZXJpYyBzdG9wIFR4L1J4IHVuaXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmFpbHVyZSBhbmQgRXhwbG9yaW5nIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBtc2didWZbMF1gIGJlaW5nIGAweGZmZmZmZmZmYCBpcyBrZXkuIFRoYXQgdHJpZ2dlcnMgYW4gYC1FSU5WQUxgIHJldHVybiBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZXMgZm9yIGEgcmVzZXQgb3IgYWNrbm93bGVkZ2UgbWVzc2FnZS4gVGhpcyBjYXNjYWRlcywgY2F1c2luZyBgd3hfcmVzZXRfaHdfdmZgLCBgdHhnYmV2Zl9zd19pbml0YCwgYW5kIGV2ZW50dWFsbHkgYHR4Z2JldmZfcHJvYmVgIHRvIGZhaWwsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgbmV0ZGV2IGlzbiYjMzk7dCByZWdpc3RlcmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBnZXQgYXJvdW5kIHRoaXMgc29tZWhvdz8KClRoZSBpbml0aWFsIHRob3VnaHQgaXMgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpX2RldmljZWAsIGFzc3VtaW5nIGl0IGNhbiBtb2NrIE1NSU8gcmVhZHMuIEJ1dCBubywgdGhhdCBqdXN0IGNyZWF0ZXMgYSB2aXJ0dWFsIGRldmljZS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgdGhlIHBvc3NpYmlsaXR5IG9mIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGdlbmVyaWMgUENJIGZ1enppbmcgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMuIEl04oCZcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoYXQgYW5kIHVzaW5nIGBzeXpfa3ZtX3NldHVwX2NwdWAgd2hpY2ggaXMgS1ZNIHNwZWNpZmljLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoaXMgb25lPyBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBXYW5neHVuIGhhcmR3YXJlIGlzIGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSBiaXQgb2YgYSBodW5jaCBidXQgaXQmIzM5O3MgcmVhc29uYWJsZSB0byBjb25jbHVkZSBpdCYjMzk7cyB1bmxpa2VseS4gV2FuZ3h1biBpcyBhIHJlbGF0aXZlbHkgb2JzY3VyZSBDaGluZXNlIG5ldHdvcmsgY2FyZCAoTkdCRS9UWEdCRSksIHNvIHByb2JhYmx5IG5vdC4KCkhvd2V2ZXIsIEkgc2hvdWxkIGJlIGNhdXRpb3VzIGFuZCBhc3Nlc3MgYWxsIG9wdGlvbnMuIFN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBpcyB1c2VkIHRvIGZ1enogUENJIGRyaXZlcnMsIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGZ1enplZC4gSWRlYWxseSwgSSYjMzk7ZCBjaGVjayBzeXpib3QgcmVwb3J0cyBmb3IgYHR4Z2JldmZgIG9yIGBuZ2JldmZgLCBidXQsIHdpdGhvdXQgaW50ZXJuZXQgSSBjYW4mIzM5O3QuIEhvd2V2ZXIsIEkgY2FuIGxvb2sgZm9yIHN5emthbGxlciBkZXNjcmlwdGlvbnMgb2YgaXQsIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eGdiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyIENvdmVyYWdlIG9mIE5ldHdvcmsgRHJpdmVycyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGF0IGxlYXN0IGdlbmVyYWxseSwgd291bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYWNjZXNzaWJsZSBmb3IgZGlyZWN0IGluc3BlY3Rpb24uIEJ1dCB0aGUgZmFjdCBJIGRvbiYjMzk7dCByZWFkaWx5IGZpbmQgdGhlbSBtZWFucyBzb21ldGhpbmcgZGlmZmVyZW50IG1pZ2h0IGJlIGluIHBsYXkgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSBhcmUuCgpSaWdodCwgc28sIGlmIHRoZXkmIzM5O3JlIG5vdCBleHBsaWNpdGx5IGluIHRoZSBjb3JlIGtlcm5lbCBzb3VyY2Ugd2hlcmUgSSYjMzk7ZCBleHBlY3QsIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgdHhnYmVgIG9yIGBuZ2JlYCB3aXRoaW4gdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdpdGggZG9jdW1lbnRhdGlvbiB0aGF0IG1pZ2h0IGNvbnRhaW4gc29tZSBpbmZvcm1hdGlvbiBvciBsaW5rcy4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5LCB0aGF0IGhlbHBzLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHF1aWNrbHkgd2hldGhlciB0aGV5JiMzOTt2ZSBiZWVuIGRvY3VtZW50ZWQgYW55d2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R4Z2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdD04PUNvbnRlbnRzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYwOiAgIHdhbmd4dW4vdHhnYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTYyLSAgIHdhbmd4dW4vbmdiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBXYW5neHVuIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBXYW5neHVuIGlzIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhhdCBzZWVtZWQgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSB3YXMgYWJvdXQgdG8gcmV0dXJuIGBmYWxzZWAuIEJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoYXQgY2F2ZWF0IGFib3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzcGFya2VkIGEgdGhvdWdodC4gSWYgc3l6a2FsbGVyLCBjYW4gZnV6eiBQQ0kgZHJpdmVycyBieSBpbnRlcmNlcHRpbmcgTU1JTyBhbmQgcHJvdmlkaW5nIGZ1enplZCB2YWx1ZXMsIHRoZW4gdGhlb3JldGljYWxseSwgaXQgKnNob3VsZCogYmUgcmVhY2hhYmxlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjYW1lOiBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZG8qIHRoYXQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcyEgVGhlIFBDSSBmdXp6ZXIgdXRpbGl6ZXMgdGhlIG1hcHBpbmcgb2YgQkFScyB0byBtZW1vcnkgcmVnaW9ucywgdHJpZ2dlcmluZyBgdXNlcmZhdWx0ZmRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gVGhpcyBhbGxvd3MgaXQgdG8gcHJvdmlkZSBmdXp6ZWQgdmFsdWVzIGZvciBNTUlPIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBnYW1lIGNoYW5nZXIuIElmIHN5emthbGxlciBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHByb3ZpZGluZyBNTUlPIHJlYWRzLCB0aGVuIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgV2FuZ3h1biwgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoYXQgbG9naWNhbGx5IHNvdW5kPyBBYnNvbHV0ZWx5LiBTeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGVmZmVjdGl2ZWx5IGVuYWJsZXMgdGhpcyB0eXBlIG9mIGZ1enppbmcuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgZm9yIFdhbmd4dW4gaXRzZWxmLiBUaGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgYE5HQkVgLCBgVFhHQkVgLCBgVFhHQkVWRmAsIGFuZCBgTkdCRVZGYC4gSSBhbHNvIG5vdGljZWQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYDogYHd4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF92Zl9jb21tb24uY2AsIGFuZCBgd3hfdmZfbGliLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYEtjb25maWdgIGZvciBgbGlid3hgIHRvIHByb3Blcmx5IGRldGVybWluZSB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgV2FuZ3h1biBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnd4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UWEdCRSkgJiM0Mzs9IHR4Z2JlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjc6bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy0xMi0jaW5jbHVkZSBcJiMzNDtuZ2JlX2V0aHRvb2wuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAtI2luY2x1ZGUgXCYjMzQ7bmdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMy0jaW5jbHVkZSBcJiMzNDtuZ2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEzOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdmZfY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O25nYmV2Zl90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNC0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ldGh0b29sLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtMTEtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYy0xMS0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jLTEzLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6NzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0xMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjEtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O3R4Z2JldmZfdHlwZS5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIFRoYXQgVkYgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvbmZpZ3MgaW52b2x2ZWQgYXJlIGBOR0JFYCwgYFRYR0JFYCwgYFRYR0JFVkZgLCBhbmQgYE5HQkVWRmAuIEkgc2VlIHRoZSBrZXkgYWRkaXRpb24gaXMgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFkZGVkIHRvIGB3eF9ldGh0b29sX29wc192ZmAsIHdoaWNoIGlzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLiBOb3csIGV0aHRvb2wgb3BzIGFyZSBlaXRoZXIgYWNjZXNzZWQgdmlhIGBpb2N0bChTSU9DRVRIVE9PTClgIG9yIG5ldGxpbmsuIFRoZSBjcnVjaWFsIHBvaW50IGlzOiBpZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdlIGNhbiByZWFjaCBpdC4gSWYgdGhlcmUmIzM5O3Mgbm8gaGFyZHdhcmUgYW5kIHRoZSBkZXZpY2UgaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIHdlIGNhbiYjMzk7dC4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIHN5emthbGxlciBoaXQgdGhpcz8gU3l6a2FsbGVyIGhhcyB0aGlzIGdlbmVyaWMgUENJIGZ1enplciB0aGF0IG1vY2tzIE1NSU8gcmVhZHMuIElmIHN5emthbGxlciBtb2NrcyB0aGVzZSByZWFkcywgdGhlbiBgdHhnYmV2Zl9wcm9iZWAgY2FuIHN1Y2NlZWQsIGV2ZW4gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUhIElmIGB0eGdiZXZmX3Byb2JlYCBzdWNjZWVkcywgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGNhbiBnZXQgY2FsbGVkIHZpYSBldGh0b29sLiBCaW5nbyEgU28sIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgY3JlYXRlcy4KCkJ1dCB3YWl0LCBkb2VzIHN5emthbGxlcuKAmXMgUENJIGZ1enplciAqYWN0dWFsbHkqIHdvcmsgZm9yIHRoaXMgZHJpdmVyPyBZZXMsIGl0JiMzOTtzIGdlbmVyaWMgYW5kIGJpbmRzIHRvIGFueSBQQ0kgZHJpdmVyIG1hdGNoaW5nIHRoZSBmdXp6ZWQgUENJIElEcy4gU28geWVzLCBpdCBjYW4gZGVmaW5pdGVseSByZWFjaCB0aGlzIGNvZGUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWdzLiBDbGVhcmx5LCBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIGFyZSBuZWVkZWQgYmVjYXVzZSB0aGV5JiMzOTtyZSBWRiBjb2RlLiBCdXQgaGFuZyBvbiwgdGhlIHBhdGNoIG1vZGlmaWVzIGBsaWJ3eGAsIHdoaWNoIGlzIHNoYXJlZCBieSBhbGwgb2YgdGhvc2UgY29uZmlnczogYE5HQkVgLCBgVFhHQkVgLCBgTkdCRVZGYCwgYFRYR0JFVkZgLiBIb3dldmVyLCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFkZGVkIGFyZSBmb3IgYHd4X2V0aHRvb2xfb3BzX3ZmYC4gYHd4X2V0aHRvb2xfb3BzX3ZmYCBpcyB1c2VkIHNwZWNpZmljYWxseSBieSBgbmdiZXZmYCBhbmQgYHR4Z2JldmZgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBJIHNob3VsZCBlbmFibGUgKm9ubHkqIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoZXRoZXIgYExJQldYYCBpcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcsIG9yIHNpbXBseSBzZWxlY3RlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIG90aGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExJQldYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIaWRkZW4gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIGBOR0JFYCwgYFRYR0JFYCwgYE5HQkVWRmAsIGFuZCBgVFhHQkVWRmAgZmxhZ3MuIFNpbmNlIHRoaXMgaXMgYSBiaXQgb2YgYSBoaWRkZW4gY29udGV4dCwgSSBzaG91bGQgZXhwbGljaXRseSBtZW50aW9uIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgaW4gbXkgbm90ZXMsIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIGNsZWFyLgoKUmlnaHQsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgZm9jYWwgcG9pbnRzIG9mIHRoaXMgcGF0Y2guIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHd4X3NldF9yaW5ncGFyYW1fdmZgLiBJdCBhbHNvIHRvdWNoZXMgYHd4X3NldF9jb2FsZXNjZWAgYnV0IHRoYXQgb25lIGFscmVhZHkgZXhpc3RzLiBUaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGB3eF93cml0ZV9laXRyX3ZmYCwgYHd4X3NldF9yaW5nYCwgYW5kIHJlbW92aW5nIHRoZSBgc3RhdGljYCBrZXl3b3JkIGZyb20gYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYC4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBrZXkgc3ltYm9scyBhcHBlYXIgdG8gYmU6CgoqICAgYHd4X3NldF9yaW5ncGFyYW1fdmZgCiogICBgd3hfd3JpdGVfZWl0cl92ZmAKKiAgIGB3eF9zZXRfcmluZ2AKCkkgc2hvdWxkIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIHRoZSBleGFjdCBuYW1lcywganVzdCB0byBiZSBzdXJlLiBZZXAsIHRoZSBzaWduYXR1cmUgZm9yIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBpcyBgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIC4uLilgIGFuZCBgd3hfd3JpdGVfZWl0cl92ZmAgaXMgYWxzbyBtb2RpZmllZC4gSSBzZWUgdGhhdCBgd3hfc2V0X3JpbmdgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpdCBhcHBlYXJzIHRoZSByZXR1cm4gdHlwZSBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gYHZvaWRgIHRvIGBpbnRgLgoKSGFuZyBvbiwgdGhlIGNoYW5nZXMgdG8gYHd4X3NldF9yaW5nYCBzdWdnZXN0IGl0JiMzOTtzIGxpa2VseSBleHBvcnRlZCBhbmQgaXMgdXNlZCBieSBib3RoIHRoZSBQRiBhbmQgdGhlIFZGLiBUaGlzIG9uZSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBMZXQgbWUgdGFrZSBhIG1vbWVudCB0byByZXZpZXcgYHd4X3NldF9yaW5nYCBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9NzY5PXN0YXRpYyBpbnQgd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6NzgzOnN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzg0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI1LVx0d3h2Zl9kb3duKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjgyNjpcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI3LVx0ICogcmV0dXJuaW5nIGFuIGVycm9yLiBUaGUgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGFsbFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgyOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6ODMwOlx0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODMxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz04NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NDgtXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4NDk6XHQuc2V0X3JpbmdwYXJhbVx0XHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NTAtXHQuZ2V0X21zZ2xldmVsXHRcdD0gd3hfZ2V0X21zZ2xldmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM9MzI0OT1FWFBPUlRfU1lNQk9MKHd4X2ZlYXR1cmVzX2NoZWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM6MzI1MTppbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzI1Mi1cdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jLTMzMTUtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYzozMzE2OkVYUE9SVF9TWU1CT0wod3hfc2V0X3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYy0zMzE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3Qgd3hfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oLTM4LVx0XHRcdFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg6Mzk6aW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oLTQwLVx0XHR1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6NTk6XHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNjAtXHRrdmZyZWUodGVtcF9yaW5nKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz0zOT1zdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy04Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjgzOlx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtODQtXHRrdmZyZWUodGVtcF9yaW5nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIGFuZCBDb2FsZXNjZSBTZXR0aW5ncyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGB3eF9zZXRfcmluZ2AgaXMgZGVmaW5pdGVseSB1c2VkIGJ5IGJvdGggdGhlIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgYW5kIFZGIChWaXJ0dWFsIEZ1bmN0aW9uKSBjb21wb25lbnRzLiBUaGF0IG1lYW5zIG15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6IGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCwgYHd4X3dyaXRlX2VpdHJfdmZgLCBhbmQgYHd4X3NldF9yaW5nYC4KCldhaXQgYSBtaW51dGUsIEkgYWxzbyBub3RpY2VkIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaGFzIGJlZW4gbW9kaWZpZWQuIEFscmlnaHQsIGxldCYjMzk7cyBpbmNsdWRlIGB3eF9zZXRfY29hbGVzY2VgIGluIHRoYXQgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guCgpUaGVyZWZvcmUsIGZvciBjb25maWd1cmF0aW9ucywgSSBzaG91bGQgY29uc2lkZXIgYE5HQkVWRmAsIGBUWEdCRVZGYCwgYW5kIHRoZW4gc2luY2UgYHd4X3NldF9yaW5nYCBhbmQgbm93IGB3eF9zZXRfY29hbGVzY2VgIGFyZSAqYWxzbyogdXNlZCBieSB0aGUgUEYsIEkgbmVlZCB0byBpbmNsdWRlIGBOR0JFYCBhbmQgYFRYR0JFYCBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYHd4X3NldF9jb2FsZXNjZWAgKmlzKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBQRiBhcyB3ZWxsLiBKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIGFsbCBzdHJhaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9MzY5PXN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy00MDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo0MDM6aW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDA0LVx0XHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTUwMS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo1MDI6RVhQT1JUX1NZTUJPTCh3eF9zZXRfY29hbGVzY2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNTAzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jPTg0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHd4X2V0aHRvb2xfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTg1MS1cdC5nZXRfY29hbGVzY2VcdFx0PSB3eF9nZXRfY29hbGVzY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4NTI6XHQuc2V0X2NvYWxlc2NlXHRcdD0gd3hfc2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODUzLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuaD0zMz1pbnQgd3hfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmgtMzYtXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmg6Mzc6aW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmgtMzgtXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmdiZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtOTEtXHQuZ2V0X2NvYWxlc2NlXHRcdD0gd3hfZ2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjkyOlx0LnNldF9jb2FsZXNjZVx0XHQ9IHd4X3NldF9jb2FsZXNjZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy05My1cdC5nZXRfY2hhbm5lbHNcdFx0PSB3eF9nZXRfY2hhbm5lbHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM9NTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHhnYmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTc0LVx0LmdldF9jb2FsZXNjZVx0XHQ9IHd4X2dldF9jb2FsZXNjZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjU3NTpcdC5zZXRfY29hbGVzY2VcdFx0PSB3eF9zZXRfY29hbGVzY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy01NzYtXHQuZ2V0X2NoYW5uZWxzXHRcdD0gd3hfZ2V0X2NoYW5uZWxzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODkzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIEkgc2VlIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaXMgZGVmaW5pdGVseSB1c2VkIGJ5IGBuZ2JlYCwgYHR4Z2JlYCwgYW5kIGB2ZmAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBjb25maWdzIGNvdmVyIHRob3NlIGRyaXZlcnMuIFNvLCBJIHNob3VsZCBoYXZlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluIG15IGxpc3Q6CgoqICAgYE5HQkVgCiogICBgVFhHQkVgCiogICBgTkdCRVZGYAoqICAgYFRYR0JFVkZgCgpGb3IgbXkgZm9jdXMgc3ltYm9scywgSSYjMzk7bSBnb2luZyB3aXRoOgoKKiAgIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYAoqICAgYHd4X3dyaXRlX2VpdHJfdmZgCiogICBgd3hfc2V0X3JpbmdgCiogICBgd3hfc2V0X2NvYWxlc2NlYAoKSSYjMzk7bSBub3RpbmcgdGhhdCBgd3h2Zl91cF9jb21wbGV0ZWAgYW5kIGB3eHZmX2Rvd25gIGhhdmUgYmVlbiBtb2RpZmllZCwgbWVhbmluZyB0aGV5IGFyZSBubyBsb25nZXIgc3RhdGljLiBIb3dldmVyLCB0aGV5JiMzOTtyZSBoZWxwZXIgZnVuY3Rpb25zLCBzbyBJIGRvbiYjMzk7dCB0aGluayB0aGV5JiMzOTtyZSB3b3J0aCB0aGUgZWZmb3J0IHRvIHB1dCB0aGVtIG9uIHRoZSBmb2N1cyBsaXN0LCBJIGRvbiYjMzk7dCB0aGluayBJIG5lZWQgdG8gZnV6eiB0aGVtLgoKSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgY29uZmlncy4gSSBrbm93IGBQQ0lgIGlzIHJlcXVpcmVkLCBidXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhhdC4gSSB3aWxsIG5lZWQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgdG8gZXZlbiBzZWUgdGhlIGRyaXZlciBjb25maWdzIGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0IHNpbmNlIGl0JiMzOTtzIGp1c3QgYSBtZW51Y29uZmlnIG9yIGEgYm9vbCwgdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGlzIG5ldHdvcmsgZHJpdmVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQsIHJpZ2h0PwoKQWxyaWdodCwgbGV0IG1lIG1ha2UgYSBsaXN0IG9mIHRoZSBzcGVjaWZpYyBvcHRpb25zIEkgbmVlZCB0byBsb29rIGF0OgotIGBORVRfVkVORE9SX1dBTkdYVU5gCi0gYE5HQkVgCi0gYFRYR0JFYAotIGBOR0JFVkZgCi0gYFRYR0JFVkZgCgpBaCwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0aGF0IGBORVRfVkVORE9SX1dBTkdYVU5gIGlzIGEgYm9vbGVhbi4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEkgY29uc2lkZXIgdGhlIG90aGVyIG9wdGlvbnMgSSBoYXZlIGxpc3RlZCwgYW5kIGNoZWNrIGlmIHRoZXkgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBhbnkgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGxvYWRlZCBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozMDpcdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzItXHRzZWxlY3QgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00OS1cdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY5Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTcyLVx0c2VsZWN0IExJQldYXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04Ni1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjg3Olx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODktXHRzZWxlY3QgTElCV1hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MTAKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogODEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gVkYgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZm9jdXNlcyBvbiBlbmhhbmNpbmcgdGhlIFdhbmd4dW4gVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRyaXZlci4gVGhlIHVzdWFsIHN1c3BlY3RzLCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIG5vdCB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgb2Z0ZW4gcmVxdWlyZWQgZm9yIGBUWEdCRWAgYnV0IGlzbiYjMzk7dCBkaXJlY3RseSByZWxhdGVkIHRvICp0aGlzKiBzcGVjaWZpYyBjaGFuZ2UuIEJ1dCBpdCYjMzk7cyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBzbyBJJiMzOTtsbCBpbmNsdWRlIGEgbm90ZSBhYm91dCBpdCwganVzdCBpbiBjYXNlLiBSZWdhcmRsZXNzLCBpZiBgVFhHQkVgIGZhaWxzLCBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIHdpbGwgc3RpbGwgZnVuY3Rpb24gYXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyBhcmUgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgdXBkYXRlcyBgd3hfc2V0X3JpbmdwYXJhbV92ZmAsIGB3eF93cml0ZV9laXRyX3ZmYCwgYHd4X3NldF9yaW5nYCBhbmQgYHd4X3NldF9jb2FsZXNjZWAuIE5vdyBsZXQmIzM5O3Mgc2VlLCBpdCBhbHNvIG1ha2VzIHRoZSBmdW5jdGlvbnMgYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYCBub24tc3RhdGljLgoKUmlnaHQsIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBpcyBpbiBsaW5lIHdpdGggdGhlIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2UuIGB3eF93cml0ZV9laXRyX3ZmYCBpcyBmaW5lLCBhcyBpcyBgd3hfc2V0X3JpbmdgLCBhbmQgYHd4X3NldF9jb2FsZXNjZWAuCgpTbywgdGhlIGNydXggaXMgc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCkgYW5kIG1vZGlmeWluZyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAoYHd4X3dyaXRlX2VpdHJfdmZgKS4gVGhlIHNoYXJlZCBgd3hfc2V0X3JpbmdgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHdoaWNoIGlzIGEgc2Vuc2libGUgY2hhbmdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCBieSBQQ0kgZnV6emluZywgc28gaXQmIzM5O3Mgd29ydGggZnV6emluZy4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgd3hfc2V0X3JpbmdwYXJhbV92ZmAgaXMsIGluIGZhY3QsIHJlYWNoYWJsZS4gSXQgaXMuIEl0JiMzOTtzIGFzc2lnbmVkIHRvIGAuc2V0X3JpbmdwYXJhbWAgaW4gYHd4X2V0aHRvb2xfb3BzX3ZmYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHNgIGluIGB3eF9zZXRfZXRodG9vbF9vcHNfdmZgLiBgd3hfc2V0X2V0aHRvb2xfb3BzX3ZmYCBpcyB0aGVuIGNhbGxlZCBpbiBgdHhnYmV2Zl9wcm9iZWAgYW5kIGBuZ2JldmZfcHJvYmVgLiBTbywgeWVzLCBpdCYjMzk7cyBhY2Nlc3NpYmxlLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfV0FOR1hVTiYjMzQ7LAogICAgJiMzNDtOR0JFJiMzNDssCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O05HQkVWRiYjMzQ7LAogICAgJiMzNDtUWEdCRVZGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d3hfc2V0X3JpbmdwYXJhbV92ZiYjMzQ7LAogICAgJiMzNDt3eF93cml0ZV9laXRyX3ZmJiMzNDssCiAgICAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgICAmIzM0O3d4X3NldF9jb2FsZXNjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgICAmIzM0O05HQkUmIzM0OywKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7TkdCRVZGJiMzNDssCiAgICAmIzM0O1RYR0JFVkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3eF9zZXRfcmluZ3BhcmFtX3ZmJiMzNDssCiAgICAmIzM0O3d4X3dyaXRlX2VpdHJfdmYmIzM0OywKICAgICYjMzQ7d3hfc2V0X3JpbmcmIzM0OywKICAgICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJiMzOTtzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTQ6NTIuOTIxNDY1NTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Mzc4MzY1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfV0FOR1hVTlwiLFxuICAgIFwiTkdCRVwiLFxuICAgIFwiVFhHQkVcIixcbiAgICBcIk5HQkVWRlwiLFxuICAgIFwiVFhHQkVWRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInd4X3NldF9yaW5ncGFyYW1fdmZcIixcbiAgICBcInd4X3dyaXRlX2VpdHJfdmZcIixcbiAgICBcInd4X3NldF9yaW5nXCIsXG4gICAgXCJ3eF9zZXRfY29hbGVzY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlcidzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUyLjkyMTQ3MDQ4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzODIyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjc1NzQyMjRiNjcxODU1NGY2NGFjNzkyZDE4OTM4NjQwZGFjMzU1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzoxNDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggNWRmOTcxYWNhOWUzNWYuLjIyMDM3ZjAxNWRlZDE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtOSw2ICs5LDggQEBcXG4gI2luY2x1ZGUgXFxcInd4X2V0aHRvb2wuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X3ZmX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuIFxcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xcbiBcXHRjaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07XFxuQEAgLTQ4Nyw3ICs0ODksMTAgQEAgaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cXG4gXFx0XFx0XFx0cV92ZWN0b3ItXFx1MDAzZWl0ciA9IHJ4X2l0cl9wYXJhbTtcXG4tXFx0XFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlcGRldi1cXHUwMDNlaXNfdmlydGZuKVxcbitcXHRcXHRcXHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR3eF93cml0ZV9laXRyKHFfdmVjdG9yKTtcXG4gXFx0fVxcbiBcXG4gXFx0d3hfdXBkYXRlX3JzYyh3eCk7XFxuQEAgLTc3NSw2ICs3ODAsNjUgQEAgc3RhdGljIGludCB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSAqa2VybmVsX3JpbmcsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDtcXG4rXFx0c3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZztcXG4rXFx0aW50IGksIGVyciA9IDA7XFxuK1xcbitcXHRuZXdfdHhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cXHUwMDNldHhfcGVuZGluZywgV1hfTUlOX1RYRCwgV1hfTUFYX1RYRCk7XFxuK1xcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xcbitcXG4rXFx0bmV3X3J4X2NvdW50ID0gY2xhbXBfdCh1MzIsIHJpbmctXFx1MDAzZXJ4X3BlbmRpbmcsIFdYX01JTl9SWEQsIFdYX01BWF9SWEQpO1xcbitcXHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcXG4rXFxuK1xcdGlmIChuZXdfdHhfY291bnQgPT0gd3gtXFx1MDAzZXR4X3JpbmdfY291bnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5ld19yeF9jb3VudCA9PSB3eC1cXHUwMDNlcnhfcmluZ19jb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuK1xcdFxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xcbitcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcXG4rXFxuK1xcdFxcdGdvdG8gY2xlYXJfcmVzZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cXG4rXFx0aSA9IG1heF90KGludCwgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG4rXFx0dGVtcF9yaW5nID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgd3hfcmluZywgaSk7XFxuK1xcdGlmICghdGVtcF9yaW5nKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gY2xlYXJfcmVzZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHd4dmZfZG93bih3eCk7XFxuK1xcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxcbitcXHQgKiByZXR1cm5pbmcgYW4gZXJyb3IuIFRoZSBlcnJvciBpbmRpY2F0ZXMgdGhhdCBub3QgYWxsXFxuK1xcdCAqIHJlcXVlc3RlZCByaW5nIHBhcmFtZXRlcnMgY291bGQgYmUgY29uZmlndXJlZC5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiZmFpbGVkIHRvIHNldCByaW5nIHBhcmFtZXRlcnM6ICVkXFxcIiwgZXJyKTtcXG4rXFx0d3hfY29uZmlndXJlX3ZmKHd4KTtcXG4rXFx0d3h2Zl91cF9jb21wbGV0ZSh3eCk7XFxuK1xcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbitjbGVhcl9yZXNldDpcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9UWF9NQVhfRlJBTUVTX0lSUSB8XFxuQEAgLTc4Miw4ICs4NDYsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcXG4gXFx0LmdldF9kcnZpbmZvXFx0XFx0PSB3eF9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbiBcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gd3hfZ2V0X3JpbmdwYXJhbSxcXG4rXFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXFxuIFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHd4X2dldF9tc2dsZXZlbCxcXG4gXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbitcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IGQwNDI1NjdiODEyODRiLi4yZTVkYmE4OGQwNGExMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0zMjQ4LDggKzMyNDgsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xcbiBcXG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbi1cXHRcXHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcXG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuK1xcdFxcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXFxuIHtcXG4gXFx0aW50IGksIGVyciA9IDA7XFxuIFxcbkBAIC0zMjcxLDcgKzMyNzEsNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIFxcdFxcdFxcdFxcdFxcdGktLTtcXG4gXFx0XFx0XFx0XFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMoXFx1MDAyNnRlbXBfcmluZ1tpXSk7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTMyOTksNyArMzI5OSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0XFx0XFx0XFx0XFx0aS0tO1xcbiBcXHRcXHRcXHRcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhcXHUwMDI2dGVtcF9yaW5nW2ldKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzMxMSw2ICszMzExLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiBcXG4gXFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcdH1cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC0zNiw4ICszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcXG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbi1cXHRcXHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XFxuK2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbitcXHRcXHR1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxcbmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcXG5AQCAtNDEsNyArNDEsNiBAQFxcbiAjZGVmaW5lIFdYX1ZGX01BWF9SWF9RVUVVRVMgICAgICA0XFxuIFxcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgKyAoNCAqIChpKSkpIC8qIGk9WzAsMV0gKi9cXG4tI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKVxcbiAjZGVmaW5lIFdYX1ZYSVRSX0NOVF9XRElTICAgICAgICBCSVQoMzEpXFxuICNkZWZpbmUgV1hfVlhJVkFSX01JU0MgICAgICAgICAgIDB4MjYwXFxuICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCArICg0ICogKGkpKSkgLyogaT1bMCwzXSAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xcbmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xcbkBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHdyMzIod3gsIFdYX1ZYSU1DLCB3eC1cXHUwMDNlZWltc19lbmFibGVfbWFzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4rdm9pZCB3eHZmX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0LyogQWx3YXlzIHNldCB0aGUgY2FycmllciBvZmYgKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTMyNCw3ICszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eHZmX29wZW4pO1xcbiBcXG4tc3RhdGljIHZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXFxuK3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaFxcbmluZGV4IGNiYmIxYjE3OGNiMmM1Li5kNDVkNWQ4YWMzYWJkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaFxcbkBAIC0xNSw3ICsxNSw5IEBAIHZvaWQgd3hfc2V0X3J4X21vZGVfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIHZvaWQgd3hfY29uZmlndXJlX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTtcXG4gdm9pZCB3eHZmX3dhdGNoZG9nX3VwZGF0ZV9saW5rKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIGludCB3eHZmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4gdm9pZCB3eHZmX2luaXRfc2VydmljZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuaW5kZXggYWE4YmUwMzY5NTZjMGUuLjczMjViNDc1ZWUxMGNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuQEAgLTE2LDcgKzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKVxcbiBcXHRpbnQgdl9pZHggPSBxX3ZlY3Rvci1cXHUwMDNldl9pZHg7XFxuIFxcdHUzMiBpdHJfcmVnO1xcbiBcXG4tXFx0aXRyX3JlZyA9IHFfdmVjdG9yLVxcdTAwM2VpdHIgXFx1MDAyNiBXWF9WWElUUl9NQVNLO1xcbitcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbitcXHRjYXNlIHd4X21hY19zcDpcXG4rXFx0XFx0aXRyX3JlZyA9IHFfdmVjdG9yLVxcdTAwM2VpdHIgXFx1MDAyNiBXWF9TUF9NQVhfRUlUUjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugd3hfbWFjX2FtbDpcXG4rXFx0Y2FzZSB3eF9tYWNfYW1sNDA6XFxuK1xcdFxcdGl0cl9yZWcgPSAocV92ZWN0b3ItXFx1MDAzZWl0ciBcXHUwMDNlXFx1MDAzZSAzKSBcXHUwMDI2IFdYX0FNTF9NQVhfRUlUUjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGl0cl9yZWcgPSBxX3ZlY3Rvci1cXHUwMDNlaXRyIFxcdTAwMjYgV1hfRU1fTUFYX0VJVFI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW5cXG4gXFx0ICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUzLjUxNjA5NzQ0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NzgzNzIzNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfV0FOR1hVTlwiLFxuICAgIFwiTkdCRVwiLFxuICAgIFwiVFhHQkVcIixcbiAgICBcIk5HQkVWRlwiLFxuICAgIFwiVFhHQkVWRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInd4X3NldF9yaW5ncGFyYW1fdmZcIixcbiAgICBcInd4X3dyaXRlX2VpdHJfdmZcIixcbiAgICBcInd4X3NldF9yaW5nXCIsXG4gICAgXCJ3eF9zZXRfY29hbGVzY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlcidzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjc1NzQyMjRiNjcxODU1NGY2NGFjNzkyZDE4OTM4NjQwZGFjMzU1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjE0OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggNWRmOTcxYWNhOWUzNWYuLjIyMDM3ZjAxNWRlZDE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtOSw2ICs5LDggQEBcbiAjaW5jbHVkZSBcInd4X2V0aHRvb2wuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X3ZmX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbiBcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xuIFx0Y2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dO1xuQEAgLTQ4Nyw3ICs0ODksMTAgQEAgaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRlbHNlXG4gXHRcdFx0Lyogcnggb25seSBvciBtaXhlZCAqL1xuIFx0XHRcdHFfdmVjdG9yLVx1MDAzZWl0ciA9IHJ4X2l0cl9wYXJhbTtcbi1cdFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG4rXHRcdGlmICh3eC1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbilcbitcdFx0XHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHd4X3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuIFx0fVxuIFxuIFx0d3hfdXBkYXRlX3JzYyh3eCk7XG5AQCAtNzc1LDYgKzc4MCw2NSBAQCBzdGF0aWMgaW50IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gKmtlcm5lbF9yaW5nLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MzIgbmV3X3J4X2NvdW50LCBuZXdfdHhfY291bnQ7XG4rXHRzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRuZXdfdHhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cdTAwM2V0eF9wZW5kaW5nLCBXWF9NSU5fVFhELCBXWF9NQVhfVFhEKTtcbitcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xuK1xuK1x0bmV3X3J4X2NvdW50ID0gY2xhbXBfdCh1MzIsIHJpbmctXHUwMDNlcnhfcGVuZGluZywgV1hfTUlOX1JYRCwgV1hfTUFYX1JYRCk7XG4rXHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcbitcbitcdGlmIChuZXdfdHhfY291bnQgPT0gd3gtXHUwMDNldHhfcmluZ19jb3VudCBcdTAwMjZcdTAwMjZcbitcdCAgICBuZXdfcnhfY291bnQgPT0gd3gtXHUwMDNlcnhfcmluZ19jb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4rXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbitcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbitcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbitcbitcdFx0Z290byBjbGVhcl9yZXNldDtcbitcdH1cbitcbitcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cbitcdGkgPSBtYXhfdChpbnQsIHd4LVx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMpO1xuK1x0dGVtcF9yaW5nID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgd3hfcmluZywgaSk7XG4rXHRpZiAoIXRlbXBfcmluZykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGNsZWFyX3Jlc2V0O1xuK1x0fVxuK1xuK1x0d3h2Zl9kb3duKHd4KTtcbitcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuK1x0ICogcmV0dXJuaW5nIGFuIGVycm9yLiBUaGUgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGFsbFxuK1x0ICogcmVxdWVzdGVkIHJpbmcgcGFyYW1ldGVycyBjb3VsZCBiZSBjb25maWd1cmVkLlxuK1x0ICovXG4rXHRlcnIgPSB3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHR3eF9lcnIod3gsIFwiZmFpbGVkIHRvIHNldCByaW5nIHBhcmFtZXRlcnM6ICVkXCIsIGVycik7XG4rXHR3eF9jb25maWd1cmVfdmYod3gpO1xuK1x0d3h2Zl91cF9jb21wbGV0ZSh3eCk7XG4rXHRrdmZyZWUodGVtcF9yaW5nKTtcbitjbGVhcl9yZXNldDpcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1RYX01BWF9GUkFNRVNfSVJRIHxcbkBAIC03ODIsOCArODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3eF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG4rXHQuc2V0X3JpbmdwYXJhbVx0XHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gd3hfZ2V0X21zZ2xldmVsLFxuIFx0LmdldF9jb2FsZXNjZVx0XHQ9IHd4X2dldF9jb2FsZXNjZSxcbitcdC5zZXRfY29hbGVzY2VcdFx0PSB3eF9zZXRfY29hbGVzY2UsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuIFx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZDA0MjU2N2I4MTI4NGIuLjJlNWRiYTg4ZDA0YTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTMyNDgsOCArMzI0OCw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xuIFxuLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbi1cdFx0IHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4rXHRcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4ge1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG5AQCAtMzI3MSw3ICszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuQEAgLTMyOTksNyArMzI5OSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0XHRcdFx0aS0tO1xuIFx0XHRcdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhcdTAwMjZ0ZW1wX3JpbmdbaV0pO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMzExLDYgKzMzMTEsNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gXG4gXHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXHR9XG4rXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC0zNiw4ICszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuLVx0XHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4rXHRcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcbmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oXG5AQCAtNDEsNyArNDEsNiBAQFxuICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDRcbiBcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgKyAoNCAqIChpKSkpIC8qIGk9WzAsMV0gKi9cbi0jZGVmaW5lIFdYX1ZYSVRSX01BU0sgICAgICAgICAgICBHRU5NQVNLKDgsIDApXG4gI2RlZmluZSBXWF9WWElUUl9DTlRfV0RJUyAgICAgICAgQklUKDMxKVxuICNkZWZpbmUgV1hfVlhJVkFSX01JU0MgICAgICAgICAgIDB4MjYwXG4gI2RlZmluZSBXWF9WWElWQVIoaSkgICAgICAgICAgICAgKDB4MjQwICsgKDQgKiAoaSkpKSAvKiBpPVswLDNdICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbkBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG4gXHR3cjMyKHd4LCBXWF9WWElNQywgd3gtXHUwMDNlZWltc19lbmFibGVfbWFzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiB7XG4gXHQvKiBBbHdheXMgc2V0IHRoZSBjYXJyaWVyIG9mZiAqL1xuIFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC0zMjQsNyArMzI0LDcgQEAgaW50IHd4dmZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4dmZfb3Blbik7XG4gXG4tc3RhdGljIHZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXG4rdm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5pbmRleCBjYmJiMWIxNzhjYjJjNS4uZDQ1ZDVkOGFjM2FiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5AQCAtMTUsNyArMTUsOSBAQCB2b2lkIHd4X3NldF9yeF9tb2RlX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgd3hfY29uZmlndXJlX3ZmKHN0cnVjdCB3eCAqd3gpO1xuIGludCB3eF9zZXRfbWFjX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApO1xuIHZvaWQgd3h2Zl93YXRjaGRvZ191cGRhdGVfbGluayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gaW50IHd4dmZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5pbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5AQCAtMTYsNyArMTYsMTggQEAgdm9pZCB3eF93cml0ZV9laXRyX3ZmKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IpXG4gXHRpbnQgdl9pZHggPSBxX3ZlY3Rvci1cdTAwM2V2X2lkeDtcbiBcdHUzMiBpdHJfcmVnO1xuIFxuLVx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfVlhJVFJfTUFTSztcbitcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbitcdGNhc2Ugd3hfbWFjX3NwOlxuK1x0XHRpdHJfcmVnID0gcV92ZWN0b3ItXHUwMDNlaXRyIFx1MDAyNiBXWF9TUF9NQVhfRUlUUjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHd4X21hY19hbWw6XG4rXHRjYXNlIHd4X21hY19hbWw0MDpcbitcdFx0aXRyX3JlZyA9IChxX3ZlY3Rvci1cdTAwM2VpdHIgXHUwMDNlXHUwMDNlIDMpIFx1MDAyNiBXWF9BTUxfTUFYX0VJVFI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfRU1fTUFYX0VJVFI7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0Lyogc2V0IHRoZSBXRElTIGJpdCB0byBub3QgY2xlYXIgdGhlIHRpbWVyIGJpdHMgYW5kIGNhdXNlIGFuXG4gXHQgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUzLjUxNjA5OTY3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Nzg4MzU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF9saWIuaGAsIGB3eF92Zi5oYCwgYHd4X3ZmX2NvbW1vbi5jYCwgYHd4X3ZmX2NvbW1vbi5oYCwgYW5kIGB3eF92Zl9saWIuY2AuIFNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFuZCBtb2RpZnlpbmcgYHd4X3NldF9jb2FsZXNjZWAgdG8gaW52b2tlIGB3eF93cml0ZV9laXRyX3ZmYCBmb3IgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIFRoZXkndmUgYWxzbyB0d2Vha2VkIGB3eF93cml0ZV9laXRyX3ZmYCBpbiBgd3hfdmZfbGliLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0J3MgYSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQsIGEgUENJZSBkZXZpY2UuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQgaXMsIGhvdyBwcmV2YWxlbnQgaXMgdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IElzIGl0IGV2ZW4gcmVsZXZhbnQgaW4gdGhvc2UgZW52aXJvbm1lbnRzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGNhbiB0aGlzIGJlIGZ1enplZD9cblxuSSBrbm93IHN5emthbGxlciBjYW4gaGFuZGxlIGZ1enppbmcgUENJIGRyaXZlcnMsIGJ1dCBpdCdzIHVzdWFsbHkgZ2VhcmVkIHRvd2FyZCBzcGVjaWZpYyBkZXZpY2VzIG9yIG1vcmUgZ2VuZXJpYyBQQ0kgZnV6emluZy4gRm9yIFdhbmd4dW4gc3BlY2lmaWNhbGx5LCBpdCBkZXBlbmRzLCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgaXQuIEkgc2hvdWxkIHNlYXJjaCBLY29uZmlnIGZvciBgd2FuZ3h1bmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNDo1OS4wOTQ5Mzc3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4ODM3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozODpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTc5LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6OTY6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjU5LjE1NjgyOTM4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDAzODQ2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwgb2YgV2FuZ3h1biBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IE5HQkUsIFRYR0JFLCBUWEdCRVZGLCBOR0JFVkYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgV2FuZ3h1biBkcml2ZXJzIGV2ZW4gY292ZXJlZCBieSBzeXprYWxsZXIncyBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBrbm93IHN5emthbGxlciBpc24ndCBleGFjdGx5IGJyaW1taW5nIHdpdGggc3BlY2lmaWMgZW11bGF0aW9uIGZvciBXYW5neHVuIGhhcmR3YXJlLiBUaGF0J3MgYSByZWQgZmxhZy4gQnV0IHdhaXQsIGxldCdzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXJlYWQgdGhlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgaXQgaXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uXCIgVGhpcyBpcyBrZXkuXG5cblRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgV2FuZ3h1biBoYXJkd2FyZSAqZW11bGF0ZWQqIGluIFFFTVU/IFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSSBjYW4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZyBoZXJlLiBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBjaGVja2luZyBmb3IgbWVudGlvbnMgb2YgXCJ3YW5neHVuXCIgaW4gdGhlIGNvZGUgaXMgZGlmZmljdWx0LlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFjdHVhbGx5IGJlICpyZWFjaGVkKiB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJdCdzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLCByaWdodD8gQW5kIGV0aHRvb2wgb3BzIGFyZSBjYWxsZWQgb24gbmV0ZGV2cy4gSWYgdGhlIG5ldGRldiBpc24ndCByZWdpc3RlcmVkLCBiZWNhdXNlIHRoZSBQQ0kgcHJvYmUgZmFpbGVkIOKAkyBtZWFuaW5nIG5vIGhhcmR3YXJlIGlzIHByZXNlbnQg4oCTIHRoZW4gdGhvc2UgZXRodG9vbCBvcHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cblNvLCB0aGUgbmV4dCB0aGluZyBpcyB0byBzZWUgaWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbnkga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgYSBkdW1teSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyJ3MgY29kZWJhc2UuIEknbGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCdzIHdoZXJlIGFueSBzdWNoIGFic3RyYWN0aW9uIHdvdWxkIGxpa2VseSBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTowNC43OTcyMTY0MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MDAyMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjA0Ljg1NzgyOTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMTEyODA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlVucGFja2luZyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIHdob2xlIHByb2Nlc3MgaGluZ2VzIG9uIGhvdyB0aGUgZHJpdmVyIGl0c2VsZiBpcyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGZ1bmRhbWVudGFsIG1lY2hhbmlzbSBmaXJzdC4gSXMgaXQgYSBzdGF0aWMgcmVnaXN0cmF0aW9uIHdpdGhpbiB0aGUgT1Mga2VybmVsPyBPciBpcyB0aGVyZSBzb21lIGR5bmFtaWMgZGlzY292ZXJ5IG1lY2hhbmlzbSBhdCBwbGF5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXBwcm9hY2g/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIGRldmljZSBJRHMgYW5kIGRyaXZlciBwcm9iaW5nPyBUaGlzIFwicmVnaXN0cmF0aW9uXCIgc3RlcCBpcyB0aGUgbGluY2hwaW4uIElmIEkgY2FuJ3QgcGluIHRoYXQgZG93biwgSSdtIGdvaW5nIHRvIGhhdmUgYSBoYXJkIHRpbWUgdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdGhlIHNwZWNpZmljcyBvZiB0aGF0IHJlZ2lzdHJhdGlvbiEgVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBob3cgYXJlIHRoZSBkcml2ZXJzIGJlaW5nIGlkZW50aWZpZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjA3LjY2ODk1OTU1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkwOTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9OTA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjkxOTptb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9MjUxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JldmZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoyNjE6bW9kdWxlX3BjaV9kcml2ZXIobmdiZXZmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NjU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzo5NzQ6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MzE2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZXZmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjMyNjptb2R1bGVfcGNpX2RyaXZlcih0eGdiZXZmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MDcuNzI5ODc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDYzMjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUENJIEV0aGVybmV0IERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoZXNlIGFyZSBkZWZpbml0ZWx5IFBDSSBkcml2ZXJzIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBoZXJlIGlzIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLiBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBgcHJvYmVgIHdvbid0IGV2ZW4gYmUgY2FsbGVkLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gTXkgcXVlc3Rpb24gaXMsIGNhbiB3ZSBzb21laG93IHJlYWNoIHRoaXMgY29kZSBwYXRoICp3aXRob3V0KiByZWFsIGhhcmR3YXJlP1xuXG5JJ3ZlIHNlZW4gU3l6a2FsbGVyIHV0aWxpemUgdmlydHVhbCBkZXZpY2VzIGZvciBvdGhlciBzdWJzeXN0ZW1zLiBJdCdzIGdvdCBgdmhjaWAgZm9yIEJsdWV0b290aCwgYGR1bW15YCBmb3IgbmV0d29ya2luZywgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHNuZC1kdW1teWAgZm9yIEFMU0EuIEJ1dCBmb3IgUENJIGV0aGVybmV0IGRyaXZlcnMsIGl0J3MgdHlwaWNhbGx5IGEgZGVhZCBlbmQgdW5sZXNzIHRoZXJlJ3MgYSBjdXN0b20gUUVNVSBkZXZpY2Ugb3IgYSBzcGVjaWZpYyBTeXprYWxsZXIgcHNldWRvLWRldmljZS5cblxuV2FpdCwgSSBzZWVtIHRvIHJlY2FsbCBTeXprYWxsZXIgaGF2aW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAuLi4gYnV0IHRoYXQncyB2ZXJ5IGxpbWl0ZWQsIGlzbid0IGl0PyBJdCdzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBnZW5lcmljIFBDSSBmdXp6aW5nLCBub3QgdGhlIGludHJpY2F0ZSBzZXF1ZW5jZXMgb2YgTU1JTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIHRoYXQgdGhlc2UgY29tcGxleCBldGhlcm5ldCBkcml2ZXJzIG5lZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcywgY2hlY2tpbmcgdGhlIGxpbmsgc3RhdHVzLCBhbmQgY2hlY2tpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYSBuZWNlc3Nhcnkgc2VxdWVuY2UuXG5cbk1vc3QgZXRoZXJuZXQgZHJpdmVycyB3cml0dGVuIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSB0aGUgSW50ZWwgZTEwMDBlLCBpZ2IsIGl4Z2JlLCBvciB0aGUgV2FuZ3h1biBuZ2JlL3R4Z2JlIHZhcmlhbnRzLCB0ZW5kIHRvIGNob2tlIGluIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb24gaWYgdGhleSBkb24ndCBnZXQgdGhlIGNvcnJlY3QgcmVzcG9uc2VzIGZyb20gTU1JTyByZWFkcy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHByb2JlIGZ1bmN0aW9ucyBvZiBgbmdiZXZmYCBhbmQgYHR4Z2JldmZgLiBUaGF0J3Mgd2hlcmUgd2UnbGwgbGlrZWx5IGZpbmQgdGhlIHN0aWNraW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODcyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjEzLjk1NDUwODgzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0ODI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYz0xMDM9c3RhdGljIGludCB0eGdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xODItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE4MzogKiB0eGdiZXZmX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTg0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4OC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODk6ICogdHhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIGFkYXB0ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkyLSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTkzOnN0YXRpYyBpbnQgdHhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTk0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYz0zMTY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxOC1cXHQuaWRfdGFibGUgPSB0eGdiZXZmX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjMxOTpcXHQucHJvYmUgICAgPSB0eGdiZXZmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjAtXFx0LnJlbW92ZSAgID0gdHhnYmV2Zl9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjE0LjAxNDk5NzMwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMzc1ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gZXhhbWluaW5nIGB0eGdiZXZmX3Byb2JlYDpcblxuKipBbmFseXppbmcgYHR4Z2JldmZfcHJvYmVgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gYHR4Z2JldmZfcHJvYmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIGRyaXZlciBwcm9iaW5nIGhhcHBlbnMsIHNvIGl0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSBpcyBjb21wYXRpYmxlIGFuZCwgaWYgc28sIHByb3Blcmx5IGluaXRpYWxpemUgaXQuIFRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgZm9yIHNvbWUgdmFyaWF0aW9uIG9mIHRoZSBgdGdiZWAgZmFtaWx5LCBsaWtlbHkgdGhlIFZGIG9yIHZpcnR1YWwgZnVuY3Rpb24sIHNvIHRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgZ29pbmcgdG8gYmUgYWJvdXQgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBoYXJkd2FyZSBhbmQgc2V0dGluZyB1cCB0aGUgdmlydHVhbCBpbnRlcmZhY2UuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhIHNlcmllcyBvZiBjaGVja3MgaGVyZTogY2hlY2tzIGZvciB0aGUgZGV2aWNlIElELCB0aGUgUENJIHZlbmRvci9kZXZpY2UgSURzLCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb24gaW5mb3JtYXRpb24sIGFuZCBwb3NzaWJseSBldmVuIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBmYWlyIGFtb3VudCBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCB3aGljaCBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBtYW5hZ2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBhcmUuXG5cblRoZW4sIG9uY2UgdGhlIGRldmljZSBpcyBpZGVudGlmaWVkLCBJIGFudGljaXBhdGUgc2VlaW5nIHJlc291cmNlIGFsbG9jYXRpb246IG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgZXZlbiBETUEgY2hhbm5lbHMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGhvdyBjb25mbGljdHMgd2l0aCBvdGhlciBkZXZpY2VzIGFyZSBoYW5kbGVkLiBUaGUgbWVtb3J5IG1hcHBpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBlbnN1cmluZyB0aGUgdmlydHVhbCBmdW5jdGlvbiBtZW1vcnkgc3BhY2UgaXMgcHJvcGVybHkgbWFwcGVkIGFuZCBhY2Nlc3NpYmxlLlxuXG5GaW5hbGx5LCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZHJpdmVyLXNwZWNpZmljIHN0cnVjdHVyZXMgaXMgdml0YWwuIFRoaXMgaXMgd2hlcmUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGFsbG9jYXRpb24gYW5kIHNldHVwIG9mIHRoZSBgbmV0X2RldmljZWAgc3RydWN0dXJlIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvZiBhbnkgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyByZWxhdGVkIHRvIHRoZSBWRidzIHZpcnR1YWwgZnVuY3Rpb25zIGFuZCByZXNvdXJjZXMuIEknbGwgd2FudCB0byBzZWUgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgYW5kIHdoZXRoZXIgdGhlcmUncyBhbnkgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBoYXBwZW4gYWZ0ZXIgdGhlIHByb2JlIGNvbXBsZXRlcy4gSSBtaWdodCBldmVuIGZpbmQgc29tZSBoaW50cyBhYm91dCBlcnJvciBoYW5kbGluZyBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3Igb2YgaG93IHdlbGwgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGVzZSBjb3JlIHRhc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTUwLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MTguNDM1Mzc1NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTM6XFx0c3RhdGljIGludCB0eGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAxOTQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbiAxOTU6XFx0e1xcbiAxOTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gMTk3OlxcdFxcdHN0cnVjdCB3eCAqd3ggPSBOVUxMO1xcbiAxOTg6XFx0XFx0aW50IGVycjtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpO1xcbiAyMDE6XFx0XFx0aWYgKGVycilcXG4gMjAyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDY0KSk7XFxuIDIwNTpcXHRcXHRpZiAoZXJyKSB7XFxuIDIwNjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIwNzpcXHRcXHRcXHRcXHRcXFwiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDIwODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXY7XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldixcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSksXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfZHJpdmVyX3N0cmluZyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSk7XFxuIDIxNDpcXHRcXHRpZiAoZXJyKSB7XFxuIDIxNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIxNjpcXHRcXHRcXHRcXHRcXFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQgMHgleFxcXFxuXFxcIiwgZXJyKTtcXG4gMjE3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldjtcXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdG5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB3eCksXFxuIDIyNDpcXHRcXHRcXHRcXHRcXHRcXHQgVFhHQkVWRl9NQVhfVFhfUVVFVUVTLFxcbiAyMjU6XFx0XFx0XFx0XFx0XFx0XFx0IFRYR0JFVkZfTUFYX1JYX1FVRVVFUyk7XFxuIDIyNjpcXHRcXHRpZiAoIW5ldGRldikge1xcbiAyMjc6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjI4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDIyOTpcXHRcXHR9XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMjM0OlxcdFxcdHd4LVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDIzNTpcXHRcXHR3eC1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdHd4LVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoLTEsIE5FVElGX01TR19EUlYgfFxcbiAyMzg6XFx0XFx0XFx0XFx0XFx0XFx0TkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xcbiAyMzk6XFx0XFx0d3gtXFx1MDAzZWh3X2FkZHIgPSBkZXZtX2lvcmVtYXAoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMjQwOlxcdFxcdFxcdFxcdFxcdCAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSxcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdCAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAyNDI6XFx0XFx0aWYgKCF3eC1cXHUwMDNlaHdfYWRkcikge1xcbiAyNDM6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gMjQ0OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDI0NTpcXHRcXHR9XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHd4LVxcdTAwM2ViNF9hZGRyID0gZGV2bV9pb3JlbWFwKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDI0ODpcXHRcXHRcXHRcXHRcXHQgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCksXFxuIDI0OTpcXHRcXHRcXHRcXHRcXHQgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpKTtcXG4gMjUwOlxcdFxcdGlmICghd3gtXFx1MDAzZWI0X2FkZHIpIHtcXG4gMjUxOlxcdFxcdFxcdGVyciA9IC1FSU87XFxuIDI1MjpcXHRcXHRcXHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBLQlVJTERfTU9ETkFNRTtcXG4gMjU2OlxcdFxcdHd4X3NldF9ldGh0b29sX29wc192ZihuZXRkZXYpO1xcbiAyNTc6XFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JldmZfbmV0ZGV2X29wcztcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXFxuIDI2MDpcXHRcXHRlcnIgPSB0eGdiZXZmX3N3X2luaXQod3gpO1xcbiAyNjE6XFx0XFx0aWYgKGVycilcXG4gMjYyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BO1xcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIDI2NzpcXHRcXHRldGhlcl9hZGRyX2NvcHkobmV0ZGV2LVxcdTAwM2VwZXJtX2FkZHIsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdHd4dmZfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gMjcwOlxcdFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIDI3MTpcXHRcXHRpZiAoZXJyKVxcbiAyNzI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zd19pbml0O1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHR3eF9nZXRfZndfdmVyc2lvbl92Zih3eCk7XFxuIDI3NTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG4gMjc2OlxcdFxcdGlmIChlcnIpXFxuIDI3NzpcXHRcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4gMjgwOlxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRyZXR1cm4gMDtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0ZXJyX3JlZ2lzdGVyOlxcbiAyODU6XFx0XFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIDI4NjpcXHRlcnJfZnJlZV9zd19pbml0OlxcbiAyODc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gMjg4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiAyODk6XFx0XFx0a2ZyZWUod3gtXFx1MDAzZXZmaW5mbyk7XFxuIDI5MDpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIDI5MTpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gMjkyOlxcdGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToxOC40MzU0NjU5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc5NTA4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBleGVjdXRpb24gaXMgaGl0dGluZyBgdHhnYmV2Zl9zd19pbml0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHNvZnR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIHRoZSBJbnRlbCBYNzEwL1hMNzEwIHZpcnR1YWwgZnVuY3Rpb24gZHJpdmVyLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaXQncyBkb2luZyDigJMgd2hlcmUgdGhlIGtleSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgd2hhdCBoYXJkd2FyZSByZWdpc3RlcnMgaXQncyB0b3VjaGluZywgYW5kIHdoYXQgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJhdGVnaWVzIGFyZSBiZWluZyBpbXBsZW1lbnRlZCBkdXJpbmcgdGhlIHNldHVwIHBoYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBzZXRzIHVwIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGluaXRpYWxpemVzIHRoZSBxdWV1ZXMsIGFuZCBjb25maWd1cmVzIHRoZSB2YXJpb3VzIGludGVycnVwdCB2ZWN0b3JzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmlydHVhbCBmdW5jdGlvbiBhbmQgdGhlIHBoeXNpY2FsIGZ1bmN0aW9uLCBhbmQgaG93IHRoZSBkcml2ZXIgZW5zdXJlcyBwcm9wZXIgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaW1lIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBhbmQgZXhhbWluZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWdpc3RlciBhY2Nlc3NlcyB3aXRoaW4gYHR4Z2JldmZfc3dfaW5pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyMi4xMTQ5NzczMzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDMsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDM6XFx0c3RhdGljIGludCB0eGdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gMTA0OlxcdHtcXG4gMTA1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbiAxMDY6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB3eC1cXHUwMDNlcGRldjtcXG4gMTA3OlxcdFxcdGludCBlcnI7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdC8qIEluaXRpYWxpemUgcGNpZSBpbmZvIGFuZCBjb21tb24gY2FwYWJpbGl0eSBmbGFncyAqL1xcbiAxMTA6XFx0XFx0ZXJyID0gd3hfc3dfaW5pdCh3eCk7XFxuIDExMTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTEyOlxcdFxcdFxcdGdvdG8gZXJyX3d4X3N3X2luaXQ7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIG1haWxib3ggKi9cXG4gMTE1OlxcdFxcdGVyciA9IHd4X2luaXRfbWJ4X3BhcmFtc192Zih3eCk7XFxuIDExNjpcXHRcXHRpZiAoZXJyKVxcbiAxMTc6XFx0XFx0XFx0Z290byBlcnJfaW5pdF9tYnhfcGFyYW1zO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQvKiBtYXggcV92ZWN0b3JzICovXFxuIDEyMDpcXHRcXHR3eC1cXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBUWEdCRVZGX01BWF9NU0lYX1ZFQ1RPUlM7XFxuIDEyMTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgdHlwZSAqL1xcbiAxMjI6XFx0XFx0dHhnYmV2Zl9pbml0X3R5cGVfY29kZSh3eCk7XFxuIDEyMzpcXHRcXHQvKiBsb2NrIHRvIHByb3RlY3QgbWFpbGJveCBhY2Nlc3NlcyAqL1xcbiAxMjQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnd4LVxcdTAwM2VtYngubWJ4X2xvY2spO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRlcnIgPSB3eF9yZXNldF9od192Zih3eCk7XFxuIDEyNzpcXHRcXHRpZiAoZXJyKSB7XFxuIDEyODpcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJQRiBzdGlsbCBpbiByZXNldCBzdGF0ZS4gSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbiAxMjk6XFx0XFx0XFx0Z290byBlcnJfcmVzZXRfaHc7XFxuIDEzMDpcXHRcXHR9XFxuIDEzMTpcXHRcXHR3eF9pbml0X2h3X3ZmKHd4KTtcXG4gMTMyOlxcdFxcdHd4X25lZ290aWF0ZV9hcGlfdmYod3gpO1xcbiAxMzM6XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcih3eC1cXHUwMDNlbWFjLmFkZHIpKVxcbiAxMzQ6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTM1OlxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4gMTM2OlxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbiAxMzk6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbiAxNDA6XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XFxuIDE0MTpcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkod3gtXFx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gMTQyOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weSh3eC1cXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdHd4LVxcdTAwM2VtYWMubWF4X3R4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1RYX1FVRVVFUztcXG4gMTQ2OlxcdFxcdHd4LVxcdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1JYX1FVRVVFUztcXG4gMTQ3OlxcdFxcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXFxuIDE0ODpcXHRcXHR3eC1cXHUwMDNlYWRhcHRpdmVfaXRyID0gdHJ1ZTtcXG4gMTQ5OlxcdFxcdHd4LVxcdTAwM2VyeF9pdHJfc2V0dGluZyA9IDE7XFxuIDE1MDpcXHRcXHR3eC1cXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xcbiAxNTE6XFx0XFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbiAxNTI6XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBUWEdCRVZGX0RFRkFVTFRfVFhEO1xcbiAxNTM6XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBUWEdCRVZGX0RFRkFVTFRfUlhEO1xcbiAxNTQ6XFx0XFx0Lyogc2V0IGRlZmF1bHQgd29yayBsaW1pdHMgKi9cXG4gMTU1OlxcdFxcdHd4LVxcdTAwM2V0eF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1RYX1dPUks7XFxuIDE1NjpcXHRcXHR3eC1cXHUwMDNlcnhfd29ya19saW1pdCA9IFRYR0JFVkZfREVGQVVMVF9SWF9XT1JLO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHR3eC1cXHUwMDNlc2V0X251bV9xdWV1ZXMgPSB0eGdiZXZmX3NldF9udW1fcXVldWVzO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbiAxNjE6XFx0XFx0Y2FzZSB3eF9tYWNfc3A6XFxuIDE2MjpcXHRcXHRcXHRicmVhaztcXG4gMTYzOlxcdFxcdGNhc2Ugd3hfbWFjX2FtbDpcXG4gMTY0OlxcdFxcdGNhc2Ugd3hfbWFjX2FtbDQwOlxcbiAxNjU6XFx0XFx0XFx0c2V0X2JpdChXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIDE2NjpcXHRcXHRcXHRzZXRfYml0KFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIDE2NzpcXHRcXHRcXHRicmVhaztcXG4gMTY4OlxcdFxcdGRlZmF1bHQ6XFxuIDE2OTpcXHRcXHRcXHRicmVhaztcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0cmV0dXJuIDA7XFxuIDE3MzpcXHRlcnJfcmVzZXRfaHc6XFxuIDE3NDpcXHRcXHRrZnJlZSh3eC1cXHUwMDNldmZpbmZvKTtcXG4gMTc1OlxcdGVycl9pbml0X21ieF9wYXJhbXM6XFxuIDE3NjpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIDE3NzpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gMTc4OlxcdGVycl93eF9zd19pbml0OlxcbiAxNzk6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTgwOlxcdH1cXG4gMTgxOlxcdFxcbiAxODI6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjIyLjExNTA4ODg1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NTQ4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGB3eF9yZXNldF9od192ZmAgZnVuY3Rpb24sIGRpc3RpbGxlZCB0byBpdHMgY29yZTpcblxuKipEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKipcblxuT2theSwgSSdtIGVuY291bnRlcmluZyBhIGNhbGwgdG8gYHd4X3Jlc2V0X2h3X3ZmYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuXCIgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGl0IHJlc2V0cywgd2hpY2ggaGFyZHdhcmUgY29tcG9uZW50cyBpdCB0YXJnZXRzLCBhbmQsIGNydWNpYWxseSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc2V0LiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyByZXNldCBpcyBuZWNlc3Nhcnk6IGlzIGl0IGZvciBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSBjbGVhbnVwIGJlZm9yZSByZWNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUga2V5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjI1LjUzMTY0MDM5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3Mjk0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcmVzZXRfaHdfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTQxPXN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01My0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6NTQ6ICogIHd4X3Jlc2V0X2h3X3ZmIC0gUGVyZm9ybXMgaGFyZHdhcmUgcmVzZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTUtICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02MS0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jOjYyOmludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMTI3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6MTI4OkVYUE9SVF9TWU1CT0wod3hfcmVzZXRfaHdfdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy0xMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg9MTExPXZvaWQgd3hfaW5pdF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg6MTEyOmludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmgtMTEzLXZvaWQgd3hfZ2V0X21hY19hZGRyX3ZmKHN0cnVjdCB3eCAqd3gsIHU4ICptYWNfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jPTE0MD12b2lkIHd4X3Jlc2V0X3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jLTE0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jOjE0NTpcXHRyZXQgPSB3eF9yZXNldF9od192Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYy0xNDYtXFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTYwPXN0YXRpYyBpbnQgbmdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo4MjpcXHRlcnIgPSB3eF9yZXNldF9od192Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy04My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MTAzPXN0YXRpYyBpbnQgdHhnYmV2Zl9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjY6XFx0ZXJyID0gd3hfcmVzZXRfaHdfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMjctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyNS41OTUzNzgyNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMzE1OTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggaGFyZHdhcmUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiBzb21lIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGB3eF9yZXNldF9od192ZmAuIEltbWVkaWF0ZWx5LCBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGF0IGZ1bmN0aW9uIG5hbWUuIFwid3hcIiBsaWtlbHkgaGludHMgYXQgYSBzcGVjaWZpYyBmcmFtZXdvcmsgb3IgZHJpdmVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgYSBsYXJnZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIFwicmVzZXRfaHdcIiBpcyBzZWxmLWV4cGxhbmF0b3J5OyBpdCdzIGEgaGFyZHdhcmUgcmVzZXQgcm91dGluZS4gQW5kIFwidmZcIiDigJMgVmlydHVhbCBGdW5jdGlvbi4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHNpZ25pZmljYW50bHkuIFRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gd2l0aGluIGEgdmlydHVhbGl6YXRpb24gY29udGV4dCwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHJlc2V0dGluZyBhIFZpcnR1YWwgRnVuY3Rpb24gb2YgYSBoYXJkd2FyZSBkZXZpY2UuXG5cbk15IG1pbmQncyBhbHJlYWR5IHJhY2luZywgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6XG5cbiogICAqKldoYXQga2luZCBvZiBoYXJkd2FyZT8qKiBJcyB0aGlzIG5ldHdvcmssIHN0b3JhZ2UsIGdyYXBoaWNzPyBUaGF0IHNoYXBlcyBteSBleHBlY3RhdGlvbnMgYWJvdXQgdGhlIHJlc2V0IHByb2NlZHVyZSdzIGNvbXBsZXhpdHkuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgcmVzZXQ/KiogSXMgdGhpcyBwYXJ0IG9mIGEgYm9vdCBwcm9jZXNzLCBhbiBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSByZWFsbG9jYXRpb24sIG9yIGEgaG90LXBsdWcgZXZlbnQ/IFRoZSB1c2UgY2FzZSBkaWN0YXRlcyBob3cgcm9idXN0IGFuZCB0aG9yb3VnaCB0aGUgcmVzZXQgbmVlZHMgdG8gYmUuXG4qICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBEcm9wcGVkIGNvbm5lY3Rpb25zLCBkYXRhIGxvc3MsIHRlbXBvcmFyeSBzZXJ2aWNlIGludGVycnVwdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cbiogICAqKldoYXQgaXMgdGhlIGN1cnJlbnQgc3RhdGU/KiogQmVmb3JlIHJlc2V0dGluZywgaXTigJlzIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGhhcmR3YXJlIHN0YXR1cy4gV2hhdCByZXNvdXJjZXMgaXMgaXQgaGFuZGxpbmc/XG5cbkVzc2VudGlhbGx5LCBJJ20gcHJpbWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgd2l0aCBhIGtlZW4gYXdhcmVuZXNzIG9mIHZpcnR1YWxpemF0aW9uLCBoYXJkd2FyZSBjb250cm9sLCBhbmQgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIHJlc2V0IGZ1bmN0aW9uOyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGEgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODk1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MjkuNjI4NTQwNzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MixcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MjpcXHRpbnQgd3hfcmVzZXRfaHdfdmYoc3RydWN0IHd4ICp3eClcXG4gIDYzOlxcdHtcXG4gIDY0OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuICA2NTpcXHRcXHR1MzIgbXNnYnVmWzRdID0ge1dYX1ZGX1JFU0VUfTtcXG4gIDY2OlxcdFxcdHU4ICphZGRyID0gKHU4ICopKFxcdTAwMjZtc2didWZbMV0pO1xcbiAgNjc6XFx0XFx0dTMyIGI0X2J1ZlsxNl0gPSB7MH07XFxuICA2ODpcXHRcXHR1MzIgdGltZW91dCA9IDIwMDtcXG4gIDY5OlxcdFxcdGludCByZXQ7XFxuICA3MDpcXHRcXHR1MzIgaTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0LyogQ2FsbCB3eCBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi9cXG4gIDczOlxcdFxcdHd4X3N0b3BfYWRhcHRlcl92Zih3eCk7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdC8qIHJlc2V0IHRoZSBhcGkgdmVyc2lvbiAqL1xcbiAgNzY6XFx0XFx0d3gtXFx1MDAzZXZmaW5mby1cXHUwMDNldmZfYXBpID0gd3hfbWJveF9hcGlfbnVsbDtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0LyogYmFja3VwIG1zaXggdmVjdG9ycyAqL1xcbiAgNzk6XFx0XFx0aWYgKHd4LVxcdTAwM2ViNF9hZGRyKSB7XFxuICA4MDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTY7IGkrKylcXG4gIDgxOlxcdFxcdFxcdFxcdGI0X2J1ZltpXSA9IHJlYWRsKHd4LVxcdTAwM2ViNF9hZGRyICsgaSAqIDQpO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHR3cjMybSh3eCwgV1hfVlhDVFJMLCBXWF9WWENUUkxfUlNULCBXWF9WWENUUkxfUlNUKTtcXG4gIDg1OlxcdFxcdHJkMzIod3gsIFdYX1ZYU1RBVFVTKTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0Lyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqL1xcbiAgODg6XFx0XFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0KSB7XFxuICA4OTpcXHRcXHRcXHR0aW1lb3V0LS07XFxuICA5MDpcXHRcXHRcXHR1ZGVsYXkoNSk7XFxuICA5MTpcXHRcXHR9XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qIHJlc3RvcmUgbXNpeCB2ZWN0b3JzICovXFxuICA5NDpcXHRcXHRpZiAod3gtXFx1MDAzZWI0X2FkZHIpIHtcXG4gIDk1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxNjsgaSsrKVxcbiAgOTY6XFx0XFx0XFx0XFx0d3JpdGVsKGI0X2J1ZltpXSwgd3gtXFx1MDAzZWI0X2FkZHIgKyBpICogNCk7XFxuICA5NzpcXHRcXHR9XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdC8qIGFtbGl0ZTogYm1lICovXFxuIDEwMDpcXHRcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWwgfHwgd3gtXFx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWw0MClcXG4gMTAxOlxcdFxcdFxcdHdyMzIod3gsIFdYX1ZYX1BGX0JNRSwgV1hfVkZfQk1FX0VOQUJMRSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICghdGltZW91dClcXG4gMTA0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIFJlc2V0IFZGIHJlZ2lzdGVycyB0byBpbml0aWFsIHZhbHVlcyAqL1xcbiAxMDc6XFx0XFx0d3hfdmlydF9jbHJfcmVnKHd4KTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0LyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqL1xcbiAxMTA6XFx0XFx0bWJ4LVxcdTAwM2V0aW1lb3V0ID0gMjAwMDtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0cmV0ID0gd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHd4LCBtc2didWYsIG1zZ2J1ZixcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShtc2didWYpKTtcXG4gMTE0OlxcdFxcdGlmIChyZXQpXFxuIDExNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAobXNnYnVmWzBdICE9IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfQUNLKSBcXHUwMDI2XFx1MDAyNlxcbiAxMTg6XFx0XFx0ICAgIG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX05BQ0spKVxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmIChtc2didWZbMF0gPT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyOS42Mjg3MDU3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2OTEwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVzZXQgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSByZXNldCB2ZXJpZmljYXRpb24gZmxvdy4gSXQgc3RhcnRzIGJ5IHJlYWRpbmcgZnJvbSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmKHd4KWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzPyBJZiB0aGF0IHJlZ2lzdGVyIGFjY2VzcyBmYWlscywgSSdkIGV4cGVjdCBpdCB0byByZXR1cm4gYC1FQlVTWWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEgc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLlxuXG5OZXh0LCBJIHNlZSBhIG1haWxib3ggd3JpdGUgYW5kIHJlYWQgcmVwbHkuIFRoYXQgc3VnZ2VzdHMgYSBjb21tdW5pY2F0aW9uIGV4Y2hhbmdlIHdpdGggc29tZSBvdGhlciBjb21wb25lbnQgb3IgcHJvY2VzcyByZWxhdGVkIHRvIHRoZSByZXNldCBjaGVjay4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBjb21tdW5pY2F0aW9uIGlzc3VlcyBoZXJlLlxuXG5Ob3csIGFuIGludGVyZXN0aW5nIHBvaW50IGlzIHRoYXQgaWYgdGhlcmUncyBubyBoYXJkd2FyZSBwcmVzZW50LCB0aGUgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGF0IGl0IHJlYWRzLiBTbywgdGhlIHJldHVybiB2YWx1ZSBpc24ndCBqdXN0IGEgc2ltcGxlIHN1Y2Nlc3MvZmFpbHVyZSBjb2RlOyBpdCBzZWVtcyB0byBpbmRpY2F0ZSBhIHN0YXRlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIHZhbHVlIHJlcHJlc2VudHMgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBzaWduYWxpbmcsIGFuZCBpdHMgaW50ZXJwcmV0YXRpb24gd291bGQgYmUgZGV2aWNlLWRlcGVuZGVudC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgd2hhdCBgd3hfY2hlY2tfZm9yX3JzdF92ZmAgaXMgYWN0dWFsbHkgZG9pbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkcml2ZXJzIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjgzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozMy40NTU2MTg1OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjUwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X2NoZWNrX2Zvcl9yc3RfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yNDE9aW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjQ4OiAqICB3eF9jaGVja19mb3JfcnN0X3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yNDktICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1Mi0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNTM6aW50IHd4X2NoZWNrX2Zvcl9yc3RfdmYoc3RydWN0IHd4ICp3eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oPTkyPWludCB3eF93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MzppbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTk0LWludCB3eF9jaGVja19mb3JfbXNnX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTYyPWludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTg3LVxcdC8qIHdlIGNhbm5vdCByZXNldCB3aGlsZSB0aGUgUlNUSSAvIFJTVEQgYml0cyBhcmUgYXNzZXJ0ZWQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6ODg6XFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTg5LVxcdFxcdHRpbWVvdXQtLTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYz01NDk9aW50IHd4X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NTg6XFx0d3hfY2hlY2tfZm9yX3JzdF92Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1OS1cXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozMy41MTgyNzQ5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgyOTA2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgYXBwcm9hY2hpbmcgdGhpcyBsaW5lIG9mIGNvZGU6XG5cbioqQW5hbHl6aW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB3eF9jaGVja19mb3JfcnN0X3ZmYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgbXkgYnJhaW4gc3RhcnRzIHRvIHBhcnNlIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIFwid3hcIiBsaWtlbHkgaW5kaWNhdGVzIGl0J3MgcmVsYXRlZCB0byB0aGUgd3hXaWRnZXRzIGxpYnJhcnksIHNvIHRoYXQncyBhIGtleSBjb250ZXh0dWFsIGNsdWUuIEkga25vdyB3eFdpZGdldHMgcXVpdGUgd2VsbCwgc28gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gaGFuZGxlIHNvbWUgc3BlY2lmaWMgY2hlY2sgb3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhhdCBmcmFtZXdvcmsuIFRoZSBcInJzdFwiIHBhcnQgZGVmaW5pdGVseSBzcGFya3MgYSBtZW1vcnkg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byByZVN0cnVjdHVyZWRUZXh0LCBvciBwZXJoYXBzIGEgcmVzZXQgZnVuY3Rpb25hbGl0eT8gXCJ2ZlwiIGNvdWxkIG1lYW4gdmlydHVhbCBmdW5jdGlvbiwgdmFsdWUgZnVuY3Rpb24sIG9yIGV2ZW4gdmFsaWRhdGlvbiBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBwYXR0ZXJuIG9mIGEgbG90IG9mIHd4V2lkZ2V0cyBjb2RlLCBpdCdzIHF1aXRlIHBvc3NpYmxlIGl0J3MgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXR0aW5nIGFuZCBpdHMgdXNhZ2UsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgdG8gY29uZmlybS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgYnV0IG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCBpdHMgZnVuY3Rpb24uIE5vdyBJJ20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIGhvcGVmdWxseSBkaXNjb3ZlciB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjM3LjAwMTE4NDU4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MzpcXHRpbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0LyogcmVhZCBjbGVhciB0aGUgcGYgcmVzZXQgZG9uZSBiaXQgKi9cXG4gMjU2OlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LFxcbiAyNTc6XFx0XFx0XFx0XFx0XFx0ICAgV1hfVlhNQUlMQk9YX1JTVEQgfFxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0ICAgV1hfVlhNQUlMQk9YX1JTVEkpO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHQvKipcXG4gMjYyOlxcdCAqICB3eF9wb2xsX2Zvcl9tc2cgLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvblxcbiAyNjM6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDI2NDpcXHQgKlxcbiAyNjU6XFx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFZGIGhhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvblxcbiAyNjY6XFx0ICoqL1xcbiAyNjc6XFx0c3RhdGljIGludCB3eF9wb2xsX2Zvcl9tc2coc3RydWN0IHd4ICp3eClcXG4gMjY4OlxcdHtcXG4gMjY5OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuIDI3MDpcXHRcXHR1MzIgdmFsO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXR1cm4gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9jaGVja19mb3JfbXNnX3ZmLCB3eCwgdmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozNy4wMDEyNjgwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMzkyNjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBoYXJkd2FyZSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94ZXMuIEknbSBzZWVpbmcgYSBjb3JlIGFzc3VtcHRpb246IElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGUgYHJlYWRsYCBmdW5jdGlvbiB3aWxsIGdyYWNlZnVsbHkgcmV0dXJuIGAweGZmZmZmZmZmYC4gVGhhdCdzIGEgY3JpdGljYWwgc2FmZXR5IG5ldC5cblxuTm93LCBsb29raW5nIGF0IGB3eF9jaGVja19mb3JfYml0X3ZmYCwgbXkgZWR1Y2F0ZWQgZ3Vlc3MgaXMgaXQncyBwZXJmb3JtaW5nIGEgYml0d2lzZSBBTkQgb3BlcmF0aW9uIG9uIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHZpcnR1YWwgZnVuY3Rpb24gbWFpbGJveCBhZGRyZXNzIChgV1hfVlhNQUlMQk9YYCkgd2l0aCBhIHNwZWNpZmljIHJlc2V0IGZsYWcgKGBXWF9WWE1BSUxCT1hfUlNURGApLiAgSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuXG5cbklmIHRoYXQgcmVhZCAqZG9lcyogcmV0dXJuIGAweGZmZmZmZmZmYCDigJMgZWZmZWN0aXZlbHkgcmVwcmVzZW50aW5nIGEgXCJoYXJkd2FyZSBub3QgcHJlc2VudFwiIHNjZW5hcmlvIOKAkyB0aGVuIHRoZSBiaXR3aXNlIEFORCwgZXZlbiB3aXRoIHRoZSByZXNldCBmbGFnLCB3aWxsIGFsc28gcmVzdWx0IGluIGAweGZmZmZmZmZmYCwgd2hpY2ggaXMgbm9uLXplcm8uICBUaGVyZWZvcmUsIGB3eF9jaGVja19mb3JfcnN0X3ZmYCB3b3VsZCBjb3JyZWN0bHkgZXZhbHVhdGUgdG8gYHRydWVgLiBUaGlzIFwiZXJyb3JcIiBjb25kaXRpb24gaXMgYmVpbmcgdXNlZCBhcyBhIHNpZ25hbCBmb3IgdGhlIGludGVuZGVkIG91dGNvbWUuXG5cblRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IGl0IGFsbG93cyB0aGUgY29kZSB0byBieXBhc3MgdGhlIGxvb3Agd2hlbiBubyBoYXJkd2FyZSBpcyBkZXRlY3RlZC4gVGhlbiB0aGUgY29kZSBwcm9jZWVkcyB0byB0cmlnZ2VyIHRoZSBgd3hfcmVzZXRfaHdfdmZgIGZ1bmN0aW9uIHdoaWNoIEkgYXNzdW1lIHdvdWxkIHBlcmZvcm0gdGhlIGFjdHVhbCByZXNldCBvcGVyYXRpb24uIEFmdGVyIHRoZSBjaGVjayBhbmQgcmVzZXQgcHJvY2VzcyBoYXMgYmVlbiB0cmlnZ2VyZWQsIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHlgIHdoaWNoIEkgYXNzdW1lIHdvdWxkIGJlIHRoZSBjcml0aWNhbCBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNDIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0MS4yMzUxOTcxMjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdHN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4gIDQyOlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnJlc3BfYnVmLCB1MTYgc2l6ZSlcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHJldCA9IHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIHJlcV9idWYsIHNpemUpO1xcbiAgNDc6XFx0XFx0aWYgKHJldClcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHJldHVybiB3eF9yZWFkX3Bvc3RlZF9tYngod3gsIHJlc3BfYnVmLCBzaXplKTtcXG4gIDUxOlxcdH1cXG4gIDUyOlxcdFxcbiAgNTM6XFx0LyoqXFxuICA1NDpcXHQgKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxcbiAgNTU6XFx0ICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4gIDU2OlxcdCAqXFxuICA1NzpcXHQgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcyBhbmRcXG4gIDU4OlxcdCAqICBjbGVhcnMgYWxsIGludGVycnVwdHMuXFxuICA1OTpcXHQgKlxcbiAgNjA6XFx0ICogIFJldHVybjogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0MS4yMzUyOTYwNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0Mjc1MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDpcblxuKipBbmFseXppbmcgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIGFuZCBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAuIEp1c3QgZnJvbSB0aGUgbmFtZXMsIEknbSBhbHJlYWR5IGZvcm1pbmcgc29tZSBhc3N1bXB0aW9ucy4gVGhlIFwid3hcIiBwcmVmaXggbGlrZWx5IHBvaW50cyB0byBhIHNwZWNpZmljIGVudmlyb25tZW50IG9yIGxpYnJhcnkg4oCTIHByb2JhYmx5IHNvbWUgd2luZG93aW5nIG9yIGVtYmVkZGVkIHN5c3RlbSBjb250ZXh0LCBnaXZlbiBteSBleHBlcmllbmNlLiBcIm1ieFwiIGFsbW9zdCBjZXJ0YWlubHkgc3RhbmRzIGZvciBtYWlsYm94LiBTbywgaW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBtZXNzYWdlIHBhc3NpbmcsIHByb2JhYmx5IGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIG9yIHRocmVhZHMuXG5cbmB3eF93cml0ZV9wb3N0ZWRfbWJ4YCDigJMgc28sIFwid3JpdGUgcG9zdGVkXCIg4oCTIGltcGxpZXMgYSBtZXNzYWdlIGlzIGJlaW5nIGFkZGVkIHRvIGEgbWFpbGJveCwgd2l0aCBhIHBvdGVudGlhbCBpbXBsaWNhdGlvbiB0aGF0IHRoZSBhY3Qgb2Ygd3JpdGluZyAqaXRzZWxmKiBjb3VsZCBcInBvc3RcIiB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgbmV3IG1lc3NhZ2UuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGVyZSdzIGFuIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHJlY2VpdmVyIHdpbGwgYmUgbm90aWZpZWQsIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksIG9uY2UgYSBuZXcgbWVzc2FnZSBpcyBhdmFpbGFibGUgaW4gdGhlIG1haWxib3guIEl0J3MgYSBrZXkgZGV0YWlsIHRvIHdhdGNoIGZvcjogaXMgdGhlcmUgYSBjYWxsYmFjaywgYSBzZW1hcGhvcmUsIG9yIGp1c3QgcGVyaW9kaWMgcG9sbGluZz8gQW5kIGlzIHRoZSBcInBvc3RlZFwiIGFzcGVjdCB0aHJlYWQtc2FmZSBvciBwb3RlbnRpYWxseSBjcmVhdGluZyBjb25jdXJyZW5jeSBwcm9ibGVtcz9cblxuTm93LCB0aGUgY291bnRlcnBhcnQsIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY29uc3VtZXIgb2YgdGhlc2UgbWVzc2FnZXMuIFRoZSB1c2Ugb2YgXCJwb3N0ZWRcIiBoaW50cyB0aGVyZSdzIGEgc3BlY2lmaWMgcmVhZCBtZWNoYW5pc20gZGVzaWduZWQgdG8gcmV0cmlldmUgbWVzc2FnZXMgdGhhdCBoYXZlICpqdXN0KiBiZWNvbWUgYXZhaWxhYmxlLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgZm9ybSBvZiBpbnRlcm5hbCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHN0YXRlIHRvIGNoZWNrIHdoYXQgbWVzc2FnZXMgYXJlIHVucmVhZCBhbmQgcG9zc2libHkgcHJpb3JpdGl6ZS4gSXQgbmVlZHMgdG8gYmUgY2xlYXIgd2hldGhlciB0aGUgcmVhZCBvcGVyYXRpb24gaXMgYmxvY2tpbmcsIG5vbi1ibG9ja2luZywgb3IgdGltZWQuIEEgYmxvY2tpbmcgcmVhZCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gZG8gb3RoZXIgd29yaywgdW5sZXNzIHRoZSBkZXNpZ24gYWxsb3dzIGl0IHRvIHN1c3BlbmQgdG8gYW4gYXBwcm9wcmlhdGUgcG9pbnQuIFdoYXQgaGFwcGVucyBpZiB0aGUgbWFpbGJveCBpcyBlbXB0eT8gRG8gd2UgZ2V0IGFuIGVycm9yIGNvZGUsIHJldHVybiBOVUxMLCBvciBibG9jayBpbmRlZmluaXRlbHk/IFBlcmZvcm1hbmNlIGlzIGFsd2F5cyBhIGNvbnNpZGVyYXRpb24uIEknZCBuZWVkIHRvIGFzc2VzcyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIG1haWxib3ggdG8gdW5kZXJzdGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxvY2tpbmcsIG9yIG1lbW9yeSBhbGxvY2F0aW9uIG92ZXJoZWFkLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBhbnRpY2lwYXRlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBhIG1lc3NhZ2UtcGFzc2luZyBzeXN0ZW0uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBpcyB0aGUgc2VuZGVyLCBhZGRpbmcgbWVzc2FnZXMgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYSBub3RpZmljYXRpb24uIGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGlzIHRoZSByZWNlaXZlciwgZXh0cmFjdGluZyB0aG9zZSBtZXNzYWdlcy4gQSBkZWVwIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdvdWxkIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBpbm5lciB3b3JraW5ncyBvZiBob3cgdGhlc2UgbWVzc2FnZXMgYXJlIGhhbmRsZWQ6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjQ1Ljg3ODA1MTczNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NDg4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X3dyaXRlX3Bvc3RlZF9tYnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMxMzogKiAgd3hfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMyMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMjE6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg9OTE9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTI6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTkzLWludCB3eF9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCB3eCAqd3gpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTQxPXN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy00NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6NDY6XFx0cmV0ID0gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgcmVxX2J1Ziwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTQ3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9MjA3PWludCB3eF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMjI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzoyMjk6XFx0cmV0dXJuIHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIG1zZ2J1ZiwgQVJSQVlfU0laRShtc2didWYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMjMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NDYuMjc2NTQ2NTI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM0NTEyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgd3hfd3JpdGVfcG9zdGVkX21ieGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uOyBpdCdzIGEga2V5IHBpZWNlIGluIG91ciBtZXNzYWdlIGJveCBoYW5kbGluZywgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGEgbWVzc2FnZSB0aGF0J3MgYmVlbiBcInBvc3RlZC5cIiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRpc3NlY3Qgd2hhdCB0aGF0IGltcGxpZXMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gXCJQb3N0ZWRcIiBzdWdnZXN0cyB0aGUgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCwgcGVyaGFwcyB2YWxpZGF0ZWQsIGFuZCBpcyBub3cgcmVhZHkgZm9yIHBlcnNpc3RlbnQgc3RvcmFnZSBvciBkZWxpdmVyeS4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OiBpcyB0aGlzIGEgdXNlci1sZXZlbCBtZXNzYWdlLCBhbiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gKElQQykgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBtYnhgIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1haWxib3ggc3RydWN0dXJlIG9yIGFic3RyYWN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludGVybmFscyBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGxpa2VseSBwYXJhbWV0ZXJzPyBXaGF0IHNvcnQgb2YgY29uY3VycmVuY3kgc2FmZWd1YXJkcyBhcmUgZW1wbG95ZWQgaGVyZT8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gaWYgbm90IGhhbmRsZWQgcHJvcGVybHk/IEFueSBhc3NvY2lhdGVkIGVycm9yIGNvZGVzIEkgc2hvdWxkIGJlIHdhdGNoaW5nIG91dCBmb3I/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MgLSB3aGF0IGhhcHBlbnMgaWYgdGhlIHdyaXRlIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBsb2csIG9yIGp1c3QgZGlzY2FyZCB0aGUgbWVzc2FnZT8gRG9lcyBpdCBibG9jayB0aGUgY2FsbGluZyBwcm9jZXNzPyBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBhbnkgb2YgdGhlIG1lc3NhZ2UgZGF0YSBpcyBzZW5zaXRpdmUuIFRoZSBmdW5jdGlvbiBuYW1lIGltcGxpZXMgc29tZSBsZXZlbCBvZiBjb21wbGV4aXR5LiBUaW1lIHRvIHB1dCBvbiBteSBpbnZlc3RpZ2F0b3IncyBoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NDkuOTcwMDAwMjcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIxOlxcdGludCB3eF93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdGludCByZXQ7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdC8qIHNlbmQgbXNnICovXFxuIDMyNjpcXHRcXHRyZXQgPSB3eF93cml0ZV9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XFxuIDMyNzpcXHRcXHQvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovXFxuIDMyODpcXHRcXHRpZiAocmV0KVxcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdC8qKlxcbiAzMzU6XFx0ICogIHd4X3dyaXRlX21ieF92ZiAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveFxcbiAzMzY6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDMzNzpcXHQgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyXFxuIDMzODpcXHQgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXJcXG4gMzM5OlxcdCAqXFxuIDM0MDpcXHQgKiAgUmV0dXJuOiByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0OS45NzAwODk1NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDUxNDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGB3eF9wb2xsX2Zvcl9hY2tgLFwiIHJlZmxlY3RpbmcgYSB0aG91Z2h0IHByb2Nlc3MgeW91LCBhcyBhbiBleHBlcnQsIG1pZ2h0IGhhdmU6XG5cbioqQW5hbHl6aW5nIHRoZSBBY2tub3dsZWRnZW1lbnQgUG9sbGluZyBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gXCJMZXQncyBzZWUgYHd4X3BvbGxfZm9yX2Fja2AuXCIgIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBwb2xsaW5nIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGB3eGAgZnJhbWV3b3JrLCBsaWtlbHkgcmVsYXRlZCB0byBhY2tub3dsZWRnaW5nIGEgY29tbXVuaWNhdGlvbiBvciBldmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIElzIGl0IGEgY2VudHJhbCBwb2ludCwgb3IgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zPyBXaGF0IGtpbmQgb2YgYWNrbm93bGVkZ2VtZW50IGlzIGl0IHdhaXRpbmcgZm9yPyBJcyBpdCBhIGhhcmR3YXJlIGxldmVsIGFjaywgYSBuZXR3b3JrIGFjaywgb3IgYSBoaWdoZXIgbGF5ZXIgYWNrPyBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGB3eGAgaW5kaWNhdGVzIGEgR1VJL3Rvb2xraXQgYmFja2dyb3VuZCAtIHdoaWNoIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZXZlbnQgaGFuZGxpbmcgb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuIElzIHRoaXMgYSBibG9ja2luZyBwb2xsLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSBmb3JtIG9mIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBjb21wbGV4aXRpZXMgYXJvdW5kIHRpbWVvdXRzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd29uZGVyIGhvdyBpdCBkZWFscyB3aXRoIGRyb3BwZWQgcGFja2V0cyBvciBkZWxheWVkIHJlc3BvbnNlcz8gSXMgaXQgcm9idXN0PyBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzdGFydGluZyB3aXRoIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1My40MTA2MDYyMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjMzNzQzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcG9sbF9mb3JfYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MjY3PXN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfbXNnKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI3Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjI3NzogKiAgd3hfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnbWVudFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc4LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODEtICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjgyOnN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfYWNrKHN0cnVjdCB3eCAqd3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMjE9aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMzE6XFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMzItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1NS41NzM5ODYyNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MTEyOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgd3hfcG9sbF9mb3JfYWNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB3eF9wb2xsX2Zvcl9hY2tgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgbGlrZWx5IGNvbnRleHQuIFRoaXMgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBhY2tub3dsZWRnbWVudCBtZWNoYW5pc20gd2l0aGluIGEgY29tbXVuaWNhdGlvbiBzeXN0ZW0sIHByb2JhYmx5IGJhc2VkIG9uIHRoZSBXeFdpZGdldHMgZnJhbWV3b3JrLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIHRoaXMgYSBwb2xsaW5nIGxvb3AsIHdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdtZW50IHNpZ25hbD8gV2hhdCB0eXBlIG9mIGFja25vd2xlZGdtZW50IGlzIGl04oCUYSBzaW1wbGUgY29uZmlybWF0aW9uIG9mIHJlY2VpcHQsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHBvc2l0aXZlL25lZ2F0aXZlIGFja25vd2xlZGdlbWVudCAoQUNLL05BQ0spIHNjaGVtZT8gVGhlIFwiZm9yX2Fja1wiIHBhcnQgaXMgaW1wb3J0YW50OiBpcyBpdCBibG9ja2luZz8gT3IgcGVyaGFwcyB0aW1lLW91dC1iYXNlZD9cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBkZWVwIHdpdGhpbiBhbiBldmVudCBsb29wIG9yIHRocmVhZCBtYW5hZ2VtZW50IHN0cnVjdHVyZSwgcHJvYmFibHkgaGFuZGxpbmcgaW5jb21pbmcgZXZlbnRzIG9yIG1lc3NhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIG1lc3NhZ2luZyBhcmNoaXRlY3R1cmUuIElzIGl0IHVzZWQgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiAoSVBDKSwgbmV0d29yayBjb21tdW5pY2F0aW9uLCBvciBqdXN0IGludGVybmFsIGV2ZW50IHByb3BhZ2F0aW9uIHdpdGhpbiBhIEdVST9cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLiBXaGF0J3MgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgYWNrbm93bGVkZ21lbnQgc2lnbmFsPyBEb2VzIGl0IHVzZSBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uLCBxdWV1ZXMsIG9yIG11dGV4ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBsdXJraW5nPyBUaGUgY2hvaWNlIG9mIHBvbGxpbmcgaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90IGludGVycnVwdCBkcml2ZW4sIHNvIGl0IGlzIGxpa2VseSBsZXNzIGxhdGVuY3kgc2Vuc2l0aXZlIHRoYW4gYW4gaW50ZXJydXB0IGRyaXZlbiBzb2x1dGlvbi4gVGhpcyB0ZWxscyBtZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXNpZ24gY29uc3RyYWludHMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGludm9sdmUgc2NydXRpbml6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgaXQncyBhY2tub3dsZWRnaW5nLCBhbmQgaG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1OS40MjUxMTc3NjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODI6XFx0c3RhdGljIGludCB3eF9wb2xsX2Zvcl9hY2soc3RydWN0IHd4ICp3eClcXG4gMjgzOlxcdHtcXG4gMjg0OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuIDI4NTpcXHRcXHR1MzIgdmFsO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRyZXR1cm4gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9jaGVja19mb3JfYWNrX3ZmLCB3eCwgdmFsLFxcbiAyODg6XFx0XFx0XFx0XFx0XFx0XFx0ICh2YWwgPT0gMCksIG1ieC1cXHUwMDNldWRlbGF5LCBtYngtXFx1MDAzZXRpbWVvdXQpO1xcbiAyODk6XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHQvKipcXG4gMjkyOlxcdCAqICB3eF9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlXFxuIDI5MzpcXHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjk0OlxcdCAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXJcXG4gMjk1OlxcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxcbiAyOTY6XFx0ICpcXG4gMjk3OlxcdCAqICBSZXR1cm46IHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmRcXG4gMjk4OlxcdCAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuXFxuIDI5OTpcXHQgKiovXFxuIDMwMDpcXHRpbnQgd3hfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzAxOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NTkuNDI1MjA5NjA3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY4NDk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIGB3eF9jaGVja19mb3JfYWNrX3ZmYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYHd4YCBsaWJyYXJ5IG9yIHBvc3NpYmx5IGEgY3VzdG9tIGFic3RyYWN0aW9uIGJ1aWx0IHVwb24gaXQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoaXMgaXMgYSBWaXN1YWxGb3JjZSAoVkYpIG9yIHJlbGF0ZWQgd2ViIGNvbXBvbmVudCByZWxhdGVkIGZ1bmN0aW9uIGNoZWNraW5nIGFuIGFja25vd2xlZGdlbWVudCBvciBjb25maXJtYXRpb24gb2Ygc29tZSBraW5kLiBUaGUgYGFja2Agc3VnZ2VzdHMgYWNrbm93bGVkZ2VtZW50IGFuZCB0aGUgYHZmYCBzdHJvbmdseSBzdWdnZXN0cyB2aXN1YWxmb3JjZSwgdGhlIHZpc3VhbGZvcmNlIHJlbGF0ZWQgbGlicmFyaWVzIGFyZSBhIGdpdmVuIGR1ZSB0byBteSB1bmRlcnN0YW5kaW5nLiBUaGUgaW50ZW50IGFwcGVhcnMgdG8gYmUgdmVyaWZ5aW5nIHRoYXQgc29tZSBvcGVyYXRpb24sIGNvbW11bmljYXRpb24sIG9yIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHByb3Blcmx5IGFja25vd2xlZGdlZC4gSSdkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljczsgaXMgaXQgYSBzZXJ2ZXItY2xpZW50IGludGVyYWN0aW9uLCBhIGRhdGEgdXBkYXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJJ2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZSAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCByZXR1cm4gYSBib29sZWFuLCBhbiBlcnJvciBjb2RlLCBvciBtb2RpZnkgc29tZSBpbnRlcm5hbCBzdGF0ZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIHdpbGwgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGFuIFwiYWNrbm93bGVkZ2VtZW50XCIgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZT8gVGhlIHByZXNlbmNlIG9mIGEgcmVjb3JkPyBUaGUgbGFjayBvZiBhbiBlcnJvcj8gV2l0aG91dCBtb3JlLCB0aGUgZnVuY3Rpb24gc2VlbXMgcXVpdGUgZ2VuZXJpYywgbGlrZSBtYW55IGhlbHBlciBmdW5jdGlvbnMgaW4gbXkgZGF5IHRvIGRheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjAzLjA2MjA2MjQxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTU2OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X2NoZWNrX2Zvcl9hY2tfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yMTQ9c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMjQ6ICogIHd4X2NoZWNrX2Zvcl9hY2tfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgQUNLJ2RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIyNS0gKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjI4LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjIyOTpzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9hY2tfdmYoc3RydWN0IHd4ICp3eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI4Mj1zdGF0aWMgaW50IHd4X3BvbGxfZm9yX2FjayhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyODc6XFx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX2Fja192Ziwgd3gsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4OC1cXHRcXHRcXHRcXHRcXHQgKHZhbCA9PSAwKSwgbWJ4LVxcdTAwM2V1ZGVsYXksIG1ieC1cXHUwMDNldGltZW91dCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU5LVxcdHd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzYwOlxcdHd4X2NoZWNrX2Zvcl9hY2tfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjowMy4yMjgyMjg4MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTc1ODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2Fja192ZmAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgd3hgIGxpYnJhcnkgb3IgcG9zc2libHkgYSBjdXN0b20gYWJzdHJhY3Rpb24gYnVpbHQgdXBvbiBpdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyBhIFZpc3VhbEZvcmNlIChWRikgb3IgcmVsYXRlZCB3ZWIgY29tcG9uZW50IHJlbGF0ZWQgZnVuY3Rpb24gY2hlY2tpbmcgYW4gYWNrbm93bGVkZ2VtZW50IG9yIGNvbmZpcm1hdGlvbiBvZiBzb21lIGtpbmQuIFRoZSBgYWNrYCBzdWdnZXN0cyBhY2tub3dsZWRnZW1lbnQgYW5kIHRoZSBgdmZgIHN0cm9uZ2x5IHN1Z2dlc3RzIHZpc3VhbGZvcmNlLCB0aGUgdmlzdWFsZm9yY2UgcmVsYXRlZCBsaWJyYXJpZXMgYXJlIGEgZ2l2ZW4gZHVlIHRvIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBpbnRlbnQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCBzb21lIG9wZXJhdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgYWNrbm93bGVkZ2VkLiBJJ2QgbmVlZCBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzOyBpcyBpdCBhIHNlcnZlci1jbGllbnQgaW50ZXJhY3Rpb24sIGEgZGF0YSB1cGRhdGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIE5leHQsIEknZCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHNjb3BlIC0gd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiB1c2VkPyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IHJldHVybiBhIGJvb2xlYW4sIGFuIGVycm9yIGNvZGUsIG9yIG1vZGlmeSBzb21lIGludGVybmFsIHN0YXRlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgd2lsbCB0ZWxsIG1lIHdoYXQgY29uc3RpdHV0ZXMgYW4gXCJhY2tub3dsZWRnZW1lbnRcIiBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlPyBUaGUgcHJlc2VuY2Ugb2YgYSByZWNvcmQ/IFRoZSBsYWNrIG9mIGFuIGVycm9yPyBXaXRob3V0IG1vcmUsIHRoZSBmdW5jdGlvbiBzZWVtcyBxdWl0ZSBnZW5lcmljLCBsaWtlIG1hbnkgaGVscGVyIGZ1bmN0aW9ucyBpbiBteSBkYXkgdG8gZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIyMiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjA2LjkxMzk5MDk0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyOTpcXHRzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9hY2tfdmYoc3RydWN0IHd4ICp3eClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIGFjayBiaXQgKi9cXG4gMjMyOlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZBQ0spO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQvKipcXG4gMjM2OlxcdCAqICB3eF9jaGVja19mb3JfbXNnX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHNlbnQgbWFpbFxcbiAyMzc6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDIzODpcXHQgKlxcbiAyMzk6XFx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBnb3QgcmVxIGJpdCBvciBlbHNlIC1FQlVTWVxcbiAyNDA6XFx0ICoqL1xcbiAyNDE6XFx0aW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eClcXG4gMjQyOlxcdHtcXG4gMjQzOlxcdFxcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHN0cyBiaXQgKi9cXG4gMjQ0OlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZTVFMpO1xcbiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKipcXG4gMjQ4OlxcdCAqICB3eF9jaGVja19mb3JfcnN0X3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHJlc2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjA2LjkxNDA3Mjk0M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQyNjE3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmNvdW50ZXJpbmcgdGhhdCBwaWVjZSBvZiBjb2RlOlxuXG4qKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2JpdF92ZmAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGVjaywgYSB2ZXJpZmljYXRpb24sIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIFwiYml0XCIgbWFuaXB1bGF0aW9uIG9yIGZsYWcgd2l0aGluIGEgXCJ2ZlwiIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIFwidmZcIiBpcyBsaWtlbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIFwiYml0XCIgcHJvYmFibHkgcmVmZXJzIHRvIGEgZmxhZyBvciBzdGF0dXMgYml0IHdpdGhpbiBhIGRhdGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhhdCB0YWJsZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBleGFtaW5lcyBvbmUgb3IgbW9yZSBiaXRzLCBwZXJoYXBzIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIGZsYWcncyBwcmVzZW5jZSBvciBhYnNlbmNlLCBvciBlbnN1cmluZyB0aGUgYml0IHBhdHRlcm4gaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHNvbWUgY3JpdGVyaWEuIFRoaXMgbWlnaHQgYmUgYSBzYWZldHkgY2hlY2ssIGFuIGludGVncml0eSBjaGVjaywgb3IgYSBjb25kaXRpb24gcmVxdWlyZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFsIGZ1bmN0aW9uLiBOb3csIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwOCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTAuMDU2NjkyOTM4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE0OlxcdHN0YXRpYyBpbnQgd3hfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgbWFzaylcXG4gMjE1OlxcdHtcXG4gMjE2OlxcdFxcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdHd4LVxcdTAwM2VtYngubWFpbGJveCBcXHUwMDI2PSB+bWFzaztcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0cmV0dXJuIChtYWlsYm94IFxcdTAwMjYgbWFzayA/IDAgOiAtRUJVU1kpO1xcbiAyMjE6XFx0fVxcbiAyMjI6XFx0XFxuIDIyMzpcXHQvKipcXG4gMjI0OlxcdCAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSydkXFxuIDIyNTpcXHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjI2OlxcdCAqXFxuIDIyNzpcXHQgKiAgUmV0dXJuOiByZXR1cm4gMCBpZiB0aGUgUEYgaGFzIHNldCB0aGUgc3RhdHVzIGJpdCBvciBlbHNlIC1FQlVTWVxcbiAyMjg6XFx0ICoqL1xcbiAyMjk6XFx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuIDIzMDpcXHR7XFxuIDIzMTpcXHRcXHQvKiByZWFkIGNsZWFyIHRoZSBwZiBhY2sgYml0ICovXFxuIDIzMjpcXHRcXHRyZXR1cm4gd3hfY2hlY2tfZm9yX2JpdF92Zih3eCwgV1hfVlhNQUlMQk9YX1BGQUNLKTtcXG4gMjMzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTAuMDU2NzgxOTc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzk5OTcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIGl0OlxuXG4qKkRlY29kaW5nIHRoZSBNYWlsYm94IEludGVyYWN0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhhdCBgd3hfcmVhZF92MnBfbWFpbGJveCh3eClgIGZ1bmN0aW9uIOKAkyBJIGtub3cgdGhhdCBvbmUg4oCTIGl0J3MgZ29pbmcgdG8gY291Z2ggdXAgYDB4ZmZmZmZmZmZgLiBUaGF0J3MgdGhlIHNpZ25hbCwgdGhlIHBsYWNlaG9sZGVyLCB3aGVuIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgbWFpbGJveC4gTm93LCBpZiBJIHRoZW4gcGVyZm9ybSBhIGJpdHdpc2UgQU5EIHdpdGggYSBtYXNrIChgbWFpbGJveCBcdTAwMjYgbWFza2ApLCB0aGF0IHJlc3VsdCB3aWxsIGJlICpub24temVybyouIE1lYW5pbmcgc29tZXRoaW5nLCBpbiB0aGlzIHNjZW5hcmlvLCBidXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgc3RydWN0dXJlZCwgdGhlIGZhY3QgdGhhdCB0aGUgcmVzdWx0IGlzIG5vbi16ZXJvIGlzbid0IGludGVycHJldGVkLiBGcm9tIHRoYXQgZmFjdCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW50ZXJwcmV0cyB0aGlzIGFzIHJldHVybmluZyAwLiBUaGF0J3MgaG93IGl0J3MgZGVzaWduZWQuIFRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgMC5cblxuU28sIGZyb20gdGhlcmUsIGB3eF9wb2xsX2Zvcl9hY2tgIGlzIGNhbGxlZCwgYW5kLCBnaXZlbiB0aGUgcHJldmlvdXMgcmV0dXJuIG9mIDAsIHdpbGwgYWxzbyByZXR1cm4gMCB3aXRob3V0IGZ1cnRoZXIgYWRvLiBObyBhY2tub3dsZWRnbWVudCwgbm90aGluZy4gVGhlIGFic2VuY2Ugb2YgdGhlIG1haWxib3ggcHJldmVudHMgcG9sbGluZy5cblxuRm9sbG93aW5nIHRoaXMgcGF0dGVybiwgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIHdpbGwgcmV0dXJuIDAgYXMgd2VsbC4gVGhpcyBpbmRpY2F0ZXMgYSBmYWlsZWQgd3JpdGUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGhhcmR3YXJlIHN0YXRlIHdlJ3ZlIGVzdGFibGlzaGVkLiBGaW5hbGx5LCB0aGUgY29kZSBtb3ZlcyBvbiB0byBleGVjdXRpbmcgYHd4X3JlYWRfcG9zdGVkX21ieGAuIFRoZSBmYWN0IHRoYXQgYHd4X3JlYWRfcG9zdGVkX21ieGAgZ2V0cyBjYWxsZWQgYXQgYWxsIGluIHRoaXMgc2NlbmFyaW8gc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBhdHRlbXB0IGEgcmVhZCAqcmVnYXJkbGVzcyogb2YgdGhlIHdyaXRlJ3Mgc3VjY2Vzcy4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHJlY292ZXIsIG9yIGNoZWNrIGZvciBhbiBlcnJvciBjb25kaXRpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiByb2J1c3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZGVzaWduLCBhbmQgSSBjYW4gYXBwcmVjaWF0ZSB0aGUgYXR0ZW1wdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0OTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjE0LjI5Njc4MTUzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRpbnQgd3hfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGludCByZXQ7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHJldCA9IHd4X3BvbGxfZm9yX21zZyh3eCk7XFxuIDMwNTpcXHRcXHQvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovXFxuIDMwNjpcXHRcXHRpZiAocmV0KVxcbiAzMDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0dXJuIHd4X3JlYWRfbWJ4X3ZmKHd4LCBtc2csIHNpemUpO1xcbiAzMTA6XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHQvKipcXG4gMzEzOlxcdCAqICB3eF93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2tcXG4gMzE0OlxcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbiAzMTU6XFx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxcbiAzMTY6XFx0ICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyXFxuIDMxNzpcXHQgKlxcbiAzMTg6XFx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kXFxuIDMxOTpcXHQgKiAgcmVjZWl2ZWQgYW4gYWNrIHRvIHRoYXQgbWVzc2FnZSB3aXRoaW4gZGVsYXkgKiB0aW1lb3V0IHBlcmlvZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoxNC4yOTY4NzA5MjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MjI3MDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIHRoaXMgbG9naWM6XG5cbioqQW5hbHl6aW5nIHRoZSBNZXNzYWdlIFBvbGxpbmcgU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgd3hfcG9sbF9mb3JfbXNnYCBmdW5jdGlvbiBiZWhhdmVzLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgd3hfY2hlY2tfZm9yX21zZ192ZmAgaXMgdGhlIGluaXRpYWwgZ2F0ZWtlZXBlci4gSXQncyBlc3NlbnRpYWxseSB0ZWxsaW5nIHVzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gTm93LCB0aGUga2V5IGJpdCBpcyB0aGF0IGAweGZmZmZmZmZmIFx1MDAyNiBXWF9WWE1BSUxCT1hfUEZTVFNgIGlzbid0IHplcm8uIFNpbmNlIHRoaXMgaXMgbm9uLXplcm8sIGB3eF9jaGVja19mb3JfbXNnX3ZmYCBzaWduYWxzIHRoYXQgbm90aGluZydzIHRoZXJlLCBhbmQgdGh1cyByZXR1cm5zIDAuIFRoYXQncyBhIGRpcmVjdCByZXN1bHQgb2YgdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdGlvbi4gU28sIGB3eF9wb2xsX2Zvcl9tc2dgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIEFmdGVyIHRoYXQgd2Ugc2VlIHRoYXQgYHd4X3JlYWRfbWJ4X3ZmYCBpcyBjYWxsZWQsIGxpa2VseSBiZWNhdXNlIHRoZSBgd3hfcG9sbF9mb3JfbXNnYCBtYXkgYmUgZGVzaWduZWQgdG8gc2V0IHVwIGEgc3Vic2VxdWVudCByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMxMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTcuNDY5MTQzNjk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEzNzc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcmVhZF9tYnhfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMwOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMwOTpcXHRyZXR1cm4gd3hfcmVhZF9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zNDI9aW50IHd4X3dyaXRlX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM3MzogKiAgd3hfcmVhZF9tYnhfdmYgLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgaW5ib3ggaW50ZW5kZWQgZm9yIHZmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNzQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3OS0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozODA6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oPTk0PWludCB3eF9jaGVja19mb3JfbXNnX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTU6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaC05Ni1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NTQ5PWludCB3eF9jaGVja19tYWNfbGlua192ZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1OS1cXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NjA6XFx0XFx0cmV0ID0gd3hfcmVhZF9tYnhfdmYod3gsIG1zZ2J1ZiwgMik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU2MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoxNy45NzA1MjY3NTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDQ2Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHd4X3JlYWRfbWJ4X3ZmYCoqXG5cbkFscmlnaHQsIGB3eF9yZWFkX21ieF92ZmAuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ2xlYW4gc29tZSBpbml0aWFsIGluc2lnaHRzLCBrbm93aW5nIHRoZSBkb21haW46IGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byByZWFkaW5nIGEgbWFpbGJveCwgcG90ZW50aWFsbHkgZnJvbSBhIHNwZWNpZmljIHN5c3RlbSBvciBsaWJyYXJ5ICh0aGUgXCJ3eFwiIGxpa2VseSBoaW50cyBhdCBhIHBhcnRpY3VsYXIgZnJhbWV3b3JrKS4gVGhlIFwibWJ4XCIgY29uZmlybXMgdGhlIG1haWxib3ggYXNwZWN0LCBhbmQgXCJ2ZlwiIGlzIGxpa2VseSBhbiBhYmJyZXZpYXRpb24gb2YgKnZpcnR1YWwgZmlsZSosIGdpdmVuIGhvdyBkYXRhIGlzIGhhbmRsZWQuIFRoaXMgc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBtZXNzYWdlIGRhdGEgZnJvbSBhIG1haWwgZmlsZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgc2V2ZXJhbCBhbmdsZXMsIGxpa2UgdGhlIHVuZGVybHlpbmcgZGF0YSBmb3JtYXQg4oCTIGlzIGl0IGEgc3RhbmRhcmQgbGlrZSBtYm94LCBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IFdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gZG9lcyBpdCBvcGVyYXRlIG9uPyBEb2VzIGl0IGhhbmRsZSBjb25jdXJyZW5jeT8gRXJyb3IgaGFuZGxpbmcgbXVzdCBiZSByb2J1c3QgaGVyZS4gSSB3b25kZXIgaWYgaXQgaGFzIGFueSBzYWZlZ3VhcmRzIGFnYWluc3QgY29ycnVwdCBkYXRhIGluIHRoZSBtYWlsYm94IGZpbGVzLiBTZWN1cml0eSBjb25zaWRlcmF0aW9ucyB3b3VsZCBiZSBwYXJhbW91bnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIHZ1bG5lcmFiaWxpdHkgYW5kIGlmIHNvIGhvdyB0byBhZGRyZXNzIHRoZW0uIE92ZXJhbGwsIHRoZSBmdW5jdGlvbidzIGFyY2hpdGVjdHVyZSB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNzQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyMS4zMjQ5OTc0NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdGludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRzdHJ1Y3Qgd3hfbWJ4X2luZm8gKm1ieCA9IFxcdTAwMjZ3eC1cXHUwMDNlbWJ4O1xcbiAzODM6XFx0XFx0aW50IHJldCwgaTtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0LyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggYW5kIG1ieC1cXHUwMDNlc2l6ZSBpcyB1cCB0byAxNSAqL1xcbiAzODY6XFx0XFx0aWYgKHNpemUgXFx1MDAzZSBtYngtXFx1MDAzZXNpemUpXFxuIDM4NzpcXHRcXHRcXHRzaXplID0gbWJ4LVxcdTAwM2VzaXplO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cXG4gMzkwOlxcdFxcdHJldCA9IHd4X29idGFpbl9tYnhfbG9ja192Zih3eCk7XFxuIDM5MTpcXHRcXHRpZiAocmV0KVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0LyogY29weSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi9cXG4gMzk1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspXFxuIDM5NjpcXHRcXHRcXHRtc2dbaV0gPSByZDMyYSh3eCwgV1hfVlhNQk1FTSwgaSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdC8qIEFja25vd2xlZGdlIHJlY2VpcHQgYW5kIHJlbGVhc2UgbWFpbGJveCwgdGhlbiB3ZSdyZSBkb25lICovXFxuIDM5OTpcXHRcXHR3cjMyKHd4LCBXWF9WWE1BSUxCT1gsIFdYX1ZYTUFJTEJPWF9BQ0spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyMS4zMjUxMjI0MDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODg5ODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkxvY2sgQWNxdWlzaXRpb24gQW50aWNpcGF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBzZXF1ZW5jZSBpcyBnb2luZyB0byBpbnZvbHZlIGNhbGxpbmcgYHd4X29idGFpbl9tYnhfbG9ja192ZmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSBleHBlcmllbmNlLCB0aGlzIG1lYW5zIHdlJ3JlIGFib3V0IHRvIGluaXRpYXRlIGEgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIGEgbWFpbGJveCBsb2NrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdXN1YWwgY29uY2VybnM6IHBvc3NpYmxlIGNvbnRlbnRpb24gaXNzdWVzLCBlbnN1cmluZyB0aGUgbG9jayBpcyByZWxlYXNlZCBwcm9wZXJseSByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lLCBhbmQgbWFraW5nIHN1cmUgdGhlIHVuZGVybHlpbmcgbWFpbGJveCBzdHJ1Y3R1cmUgaXMgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGxvY2sgaXMgYWNxdWlyZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY2FsbGluZyBjb250ZXh0IGhhcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLiBUaGUgZnVuY3Rpb24gaXRzZWxmLi4uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYXJndW1lbnRzIGl0J2xsIHRha2UgYW5kIHdoYXQgdGhhdCBtZWFucyBhYm91dCB3aGljaCBtYWlsYm94IG9yIHJlc291cmNlIGlzIGJlaW5nIHRhcmdldGVkLiBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgYXR0ZW50aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IGFueSBmYWlsdXJlIGhlcmUgY291bGQgYnJpbmcgdGhlIGVudGlyZSBwcm9jZXNzIHRvIGEgaGFsdC4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGJlIHJldHVybmVkIGFuZCBob3cgSSdtIGdvaW5nIHRvIGhhbmRsZSB0aGVtLiBUaW1lIHRvIGZvY3VzIGFuZCBtYWtlIHN1cmUgdGhpcyBhY3F1aXNpdGlvbiBnb2VzIHNtb290aGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MjQuNjQ0MDI0ODE4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE0MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3eF9vYnRhaW5fbWJ4X2xvY2tfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0xODg9c3RhdGljIHUzMiB3eF9tYWlsYm94X2dldF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTE5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjE5NTogKiAgd3hfb2J0YWluX21ieF9sb2NrX3ZmIC0gb2J0YWluIG1haWxib3ggbG9ja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMTk2LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTktICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjAwOnN0YXRpYyBpbnQgd3hfb2J0YWluX21ieF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMDEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zNDI9aW50IHd4X3dyaXRlX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM1My1cXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM1NDpcXHRyZXQgPSB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM4MD1pbnQgd3hfcmVhZF9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zODktXFx0LyogbG9jayB0aGUgbWFpbGJveCB0byBwcmV2ZW50IHBmL3ZmIHJhY2UgY29uZGl0aW9uICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozOTA6XFx0cmV0ID0gd3hfb2J0YWluX21ieF9sb2NrX3ZmKHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM5MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyNC43MDgxNzMyODdaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2MjE3NTMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYHd4X29idGFpbl9tYnhfbG9ja192ZmAuIFRoZSBuYW1lIGl0c2VsZiBzY3JlYW1zIG1haWxib3ggbG9ja2luZywgYW5kIHRoZSBcInZmXCIgbGlrZWx5IGluZGljYXRlcyBhIHZpcnR1YWwgZnVuY3Rpb24gb3IgYSB2YXJpYW50IG9mIHNvbWUgbG9jayBhY3F1aXNpdGlvbiByb3V0aW5lLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6IHdoYXQga2luZCBvZiBtYWlsYm94IGlzIGl0IGxvY2tpbmc/IElzIGl0IGEgaGFyZHdhcmUgbWFpbGJveCwgYSBzb2Z0d2FyZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGJlaW5nIGVtcGxveWVkIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZz9cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgd291bGQgY2VudGVyIGFyb3VuZDpcblxuKiAgICoqQ29uY3VycmVuY3k6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIG1haWxib3g/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIHRyeSB0byBhY2Nlc3MgdGhlIG1haWxib3ggc2ltdWx0YW5lb3VzbHk/XG4qICAgKipDb250ZW50aW9uOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQ/IERvZXMgaXQgd2FpdCwgZXJyb3Igb3V0LCBvciB0cnkgc29tZSBvdGhlciBzdHJhdGVneT8gV2hhdCBpcyB0aGUgaW1wYWN0IG9mIGNvbnRlbnRpb24gb24gc3lzdGVtIHBlcmZvcm1hbmNlP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHJldHVybiBhIHN0YXR1cyBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIHNvbWV0aGluZyBlbHNlPyBJcyB0aGVyZSBncmFjZWZ1bCBkZWdyYWRhdGlvbiBpZiB0aGUgbG9jayBjYW5ub3QgYmUgb2J0YWluZWQ/XG4qICAgKipDb250ZXh0OioqIFdoYXQgYXJlIHRoZSBjYWxsZXIncyBwcmUtY29uZGl0aW9ucyBhbmQgcG9zdC1jb25kaXRpb25zPyBXaGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgZnVuY3Rpb24gdXNlZCBpbj8gQXJlIHRoZXJlIGFueSBpbXBvcnRhbnQgaW52YXJpYW50cyB0aGF0IGl0IHVwaG9sZHM/XG4qICAgKipVc2UgQ2FzZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgdXNlLWNhc2VzLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMsIHRoYXQgYXJlIGtub3duIHRvIGJlIHBhcnRpY3VsYXJseSBjaGFsbGVuZ2luZz9cblxuSSdkIHdhbnQgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIChvciBkZWNsYXJhdGlvbiBpZiBJIGhhdmUgYWNjZXNzIHRvIGl0KSBmb3IgYW55IGNsdWVzLiBUaGluZ3MgbGlrZSBgc3Bpbl9sb2NrYCwgYG11dGV4X2xvY2tgLCBgdHJ5X2xvY2tgLCBvciBgd2FpdGAgd291bGQgYmUgaW5zdGFudCBwb2ludGVycyB0b3dhcmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBhcmNoaXRlY3R1cmUgdG8gdW5kZXJzdGFuZCB3aHkgbWFpbGJveCBsb2NraW5nIG1pZ2h0IGJlIG5lY2Vzc2FyeSBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBGaW5hbGx5LCBJJ2QgbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVsZWFzZSB0aGUgbG9jayBhbmQgdGhpbmsgYWJvdXQgaG93IHRob3NlIGNvcnJlbGF0ZSB3aXRoIHdoYXQgSSBhbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjI5LjE3MDM1MDgwNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRzdGF0aWMgaW50IHd4X29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3Qgd3ggKnd4KVxcbiAyMDE6XFx0e1xcbiAyMDI6XFx0XFx0aW50IGNvdW50ID0gNSwgcmV0O1xcbiAyMDM6XFx0XFx0dTMyIG1haWxib3g7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdHJldCA9IHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfbWFpbGJveF9nZXRfbG9ja192Ziwgd3gsIG1haWxib3gsXFxuIDIwNjpcXHRcXHRcXHRcXHRcXHRcXHQobWFpbGJveCBcXHUwMDI2IFdYX1ZYTUFJTEJPWF9WRlUpLFxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0MSwgY291bnQpO1xcbiAyMDg6XFx0XFx0aWYgKHJldClcXG4gMjA5OlxcdFxcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBvYnRhaW4gbWFpbGJveCBsb2NrIGZvciBWRi5cXFxcblxcXCIpO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9iaXRfdmYoc3RydWN0IHd4ICp3eCwgdTMyIG1hc2spXFxuIDIxNTpcXHR7XFxuIDIxNjpcXHRcXHR1MzIgbWFpbGJveCA9IHd4X3JlYWRfdjJwX21haWxib3god3gpO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR3eC1cXHUwMDNlbWJ4Lm1haWxib3ggXFx1MDAyNj0gfm1hc2s7XFxuIDIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MjkuMTcwNDQ3OTM1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjc4NTUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIE1haWxib3ggSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHRoaXMgdmlydHVhbCBmdW5jdGlvbiAoVkYpIG1haWxib3ggaXNuJ3QgcHJlc2VudCwgdGhlIGB3eF9tYWlsYm94X2dldF9sb2NrX3ZmYCBmdW5jdGlvbiBpcyBnb2luZyB0byByZXR1cm4gYDB4ZmZmZmZmZmZgLiBCZWNhdXNlIHRoZSBjb2RlIHRoZW4gY2hlY2tzIGBtYWlsYm94IFx1MDAyNiBXWF9WWE1BSUxCT1hfVkZVYCwgdGhlIGZhY3QgdGhhdCB0aGUgZmlyc3QgZnVuY3Rpb24gcmV0dXJuZWQgYDB4ZmZmZmZmZmZgIGluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgb2YgdGhhdCBiaXR3aXNlIEFORCBvcGVyYXRpb24gd2lsbCBiZSBub24temVyby4gQ29uc2VxdWVudGx5LCB0aGUgYHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWNgIGZ1bmN0aW9uIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIFRoaXMgaW1wbGllcyBubyB3YWl0IHRpbWUsIG1lYW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2YgaW1tZWRpYXRlIGZhaWx1cmUgb3Igbm8gZGF0YSBhdmFpbGFibGUuXG5cbkZvbGxvd2luZyB0aGF0IHBhdGgsIGB3eF9yZWFkX21ieF92ZmAgd2lsbCB0aGVuIGF0dGVtcHQgdG8gcmVhZCB0aGF0IHBvdGVudGlhbGx5IGludmFsaWQgdmFsdWUsIGAweGZmZmZmZmZmYCwgaW50byB0aGUgYG1zZ2AgdmFyaWFibGUuIEFmdGVyIHRoYXQgaGFwcGVucywgd2hlbiBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCBpcyBjYWxsZWQsIGl0J3MgcmV0dXJuaW5nIDAsIGFuZCwgZmluYWxseSwgdGhhdCB3aWxsIGFsc28gY2F1c2UgYHd4X21ieF93cml0ZV9hbmRfcmVhZF9yZXBseWAgdG8gcmV0dXJuIDAuIFRoZSBleGVjdXRpb24gZmxvdyB0aGVuIHJldHVybnMgdG8gYHd4X3Jlc2V0X2h3X3ZmYC4uLiBzbyBpdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGhhcmR3YXJlIG1pc3NpbmcgY29uZGl0aW9uIGhlcmUgd2hlcmUgdGhlcmUncyBubyBtYWlsYm94IHRvIHJlYWQgZnJvbS4gVGhlIGNvZGUgaGFuZGxlcyB0aGlzIHN0YXRlIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgY29kZSBwYXRoIHRvIHZlcmlmeSBmb3IgcG90ZW50aWFsIGZhdWx0IHRvbGVyYW5jZSBpbiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjMzLjU5ODMwNTYyNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEyOlxcdFxcdHJldCA9IHd4X21ieF93cml0ZV9hbmRfcmVhZF9yZXBseSh3eCwgbXNnYnVmLCBtc2didWYsXFxuIDExMzpcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUobXNnYnVmKSk7XFxuIDExNDpcXHRcXHRpZiAocmV0KVxcbiAxMTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0aWYgKG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykgXFx1MDAyNlxcdTAwMjZcXG4gMTE4OlxcdFxcdCAgICBtc2didWZbMF0gIT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9OQUNLKSlcXG4gMTE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobXNnYnVmWzBdID09IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfQUNLKSlcXG4gMTIyOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weSh3eC1cXHUwMDNlbWFjLnBlcm1fYWRkciwgYWRkcik7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdHd4LVxcdTAwM2VtYWMubWNfZmlsdGVyX3R5cGUgPSBtc2didWZbM107XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdHJldHVybiAwO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0RVhQT1JUX1NZTUJPTCh3eF9yZXNldF9od192Zik7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qKlxcbiAxMzE6XFx0ICogIHd4X3N0b3BfYWRhcHRlcl92ZiAtIEdlbmVyaWMgc3RvcCBUeC9SeCB1bml0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjozMy41OTgzOTA4MDRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NjM2OTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZhaWx1cmUgYW5kIEV4cGxvcmluZyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBtc2didWZbMF1gIGJlaW5nIGAweGZmZmZmZmZmYCBpcyBrZXkuIFRoYXQgdHJpZ2dlcnMgYW4gYC1FSU5WQUxgIHJldHVybiBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlcyBmb3IgYSByZXNldCBvciBhY2tub3dsZWRnZSBtZXNzYWdlLiBUaGlzIGNhc2NhZGVzLCBjYXVzaW5nIGB3eF9yZXNldF9od192ZmAsIGB0eGdiZXZmX3N3X2luaXRgLCBhbmQgZXZlbnR1YWxseSBgdHhnYmV2Zl9wcm9iZWAgdG8gZmFpbCwgYW5kIHVsdGltYXRlbHksIHRoZSBuZXRkZXYgaXNuJ3QgcmVnaXN0ZXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZ2V0IGFyb3VuZCB0aGlzIHNvbWVob3c/XG5cblRoZSBpbml0aWFsIHRob3VnaHQgaXMgdXNpbmcgc3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlYCwgYXNzdW1pbmcgaXQgY2FuIG1vY2sgTU1JTyByZWFkcy4gQnV0IG5vLCB0aGF0IGp1c3QgY3JlYXRlcyBhIHZpcnR1YWwgZGV2aWNlLiBIb3dldmVyLCB0aGVyZSdzIHRoZSBwb3NzaWJpbGl0eSBvZiBQQ0kgZnV6emluZyBzdXBwb3J0ISBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBnZW5lcmljIFBDSSBmdXp6aW5nIGludGVyY2VwdGluZyBNTUlPIHJlYWRzLiBJdOKAmXMgaW1wb3J0YW50IHRvIG5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGF0IGFuZCB1c2luZyBgc3l6X2t2bV9zZXR1cF9jcHVgIHdoaWNoIGlzIEtWTSBzcGVjaWZpYy5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoaXMgb25lPyBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBXYW5neHVuIGhhcmR3YXJlIGlzIGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSBiaXQgb2YgYSBodW5jaCBidXQgaXQncyByZWFzb25hYmxlIHRvIGNvbmNsdWRlIGl0J3MgdW5saWtlbHkuIFdhbmd4dW4gaXMgYSByZWxhdGl2ZWx5IG9ic2N1cmUgQ2hpbmVzZSBuZXR3b3JrIGNhcmQgKE5HQkUvVFhHQkUpLCBzbyBwcm9iYWJseSBub3QuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIGJlIGNhdXRpb3VzIGFuZCBhc3Nlc3MgYWxsIG9wdGlvbnMuIFN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBpcyB1c2VkIHRvIGZ1enogUENJIGRyaXZlcnMsIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGZ1enplZC4gSWRlYWxseSwgSSdkIGNoZWNrIHN5emJvdCByZXBvcnRzIGZvciBgdHhnYmV2ZmAgb3IgYG5nYmV2ZmAsIGJ1dCwgd2l0aG91dCBpbnRlcm5ldCBJIGNhbid0LiBIb3dldmVyLCBJIGNhbiBsb29rIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zIG9mIGl0LCBzbyB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo0MS44NjQ3NjI4MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDU1NzQ5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHhnYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6NDIuMzg5MzI3NTUzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjA4NDM4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTeXprYWxsZXIgQ292ZXJhZ2Ugb2YgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGF0IGxlYXN0IGdlbmVyYWxseSwgd291bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYWNjZXNzaWJsZSBmb3IgZGlyZWN0IGluc3BlY3Rpb24uIEJ1dCB0aGUgZmFjdCBJIGRvbid0IHJlYWRpbHkgZmluZCB0aGVtIG1lYW5zIHNvbWV0aGluZyBkaWZmZXJlbnQgbWlnaHQgYmUgaW4gcGxheSBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5IGFyZS5cblxuUmlnaHQsIHNvLCBpZiB0aGV5J3JlIG5vdCBleHBsaWNpdGx5IGluIHRoZSBjb3JlIGtlcm5lbCBzb3VyY2Ugd2hlcmUgSSdkIGV4cGVjdCwgSSBuZWVkIHRvIHdpZGVuIHRoZSBzZWFyY2guIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhbnkgbWVudGlvbnMgb2YgYHR4Z2JlYCBvciBgbmdiZWAgd2l0aGluIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdpdGggZG9jdW1lbnRhdGlvbiB0aGF0IG1pZ2h0IGNvbnRhaW4gc29tZSBpbmZvcm1hdGlvbiBvciBsaW5rcy4gSXQncyBhIHN0YXJ0aW5nIHBvaW50IGFuZCBob3BlZnVsbHksIHRoYXQgaGVscHMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGV0aGVyIHRoZXkndmUgYmVlbiBkb2N1bWVudGVkIGFueXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjQ1LjYxMDE3MzQ4N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDkxNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR4Z2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIkRvY3VtZW50YXRpb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MDogICB3YW5neHVuL3R4Z2JlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MTogICB3YW5neHVuL3R4Z2JldmZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTYyLSAgIHdhbmd4dW4vbmdiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo0NS44NDMyNzAzODJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODYxMzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBXYW5neHVuIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IFdhbmd4dW4gaXMgYSBwaHlzaWNhbCBkZXZpY2UsIGFuZCB0aGVyZWZvcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGF0IHNlZW1lZCBzdHJhaWdodGZvcndhcmQsIGFuZCBJIHdhcyBhYm91dCB0byByZXR1cm4gYGZhbHNlYC4gQnV0IHRoZW4gdGhlcmUncyB0aGF0IGNhdmVhdCBhYm91dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgc3BhcmtlZCBhIHRob3VnaHQuIElmIHN5emthbGxlciwgY2FuIGZ1enogUENJIGRyaXZlcnMgYnkgaW50ZXJjZXB0aW5nIE1NSU8gYW5kIHByb3ZpZGluZyBmdXp6ZWQgdmFsdWVzLCB0aGVuIHRoZW9yZXRpY2FsbHksIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjYW1lOiBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZG8qIHRoYXQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcyEgVGhlIFBDSSBmdXp6ZXIgdXRpbGl6ZXMgdGhlIG1hcHBpbmcgb2YgQkFScyB0byBtZW1vcnkgcmVnaW9ucywgdHJpZ2dlcmluZyBgdXNlcmZhdWx0ZmRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gVGhpcyBhbGxvd3MgaXQgdG8gcHJvdmlkZSBmdXp6ZWQgdmFsdWVzIGZvciBNTUlPIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBnYW1lIGNoYW5nZXIuIElmIHN5emthbGxlciBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHByb3ZpZGluZyBNTUlPIHJlYWRzLCB0aGVuIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgV2FuZ3h1biwgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoYXQgbG9naWNhbGx5IHNvdW5kPyBBYnNvbHV0ZWx5LiBTeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGVmZmVjdGl2ZWx5IGVuYWJsZXMgdGhpcyB0eXBlIG9mIGZ1enppbmcuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGZvciBXYW5neHVuIGl0c2VsZi4gVGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGBOR0JFYCwgYFRYR0JFYCwgYFRYR0JFVkZgLCBhbmQgYE5HQkVWRmAuIEkgYWxzbyBub3RpY2VkIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L2A6IGB3eF9ldGh0b29sLmNgLCBgd3hfbGliLmNgLCBgd3hfdmZfY29tbW9uLmNgLCBhbmQgYHd4X3ZmX2xpYi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGBLY29uZmlnYCBmb3IgYGxpYnd4YCB0byBwcm9wZXJseSBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgZm9yIGVuYWJsaW5nIFdhbmd4dW4gZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo1MS45MTE4ODY0MzdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDUwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnd4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1RYR0JFKSArPSB0eGdiZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NzpsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jLTEyLSNpbmNsdWRlIFxcXCJuZ2JlX2V0aHRvb2wuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0xMC0jaW5jbHVkZSBcXFwibmdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAtI2luY2x1ZGUgXFxcIm5nYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEzLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF92Zl9jb21tb24uaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xOC0jaW5jbHVkZSBcXFwibmdiZXZmX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjExOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNC0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy0xMS0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtMTEtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jLTEzLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTEyLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjIwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTIxLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjEzOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTY6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xOC0jaW5jbHVkZSBcXFwidHhnYmV2Zl90eXBlLmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjUxLjk4MDM0Mjg2NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTg5Njg1MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFRoYXQgVkYgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgTkdCRWAsIGBUWEdCRWAsIGBUWEdCRVZGYCwgYW5kIGBOR0JFVkZgLiBJIHNlZSB0aGUga2V5IGFkZGl0aW9uIGlzIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhZGRlZCB0byBgd3hfZXRodG9vbF9vcHNfdmZgLCB3aGljaCBpcyBhbiBldGh0b29sIG9wZXJhdGlvbi4gTm93LCBldGh0b29sIG9wcyBhcmUgZWl0aGVyIGFjY2Vzc2VkIHZpYSBgaW9jdGwoU0lPQ0VUSFRPT0wpYCBvciBuZXRsaW5rLiBUaGUgY3J1Y2lhbCBwb2ludCBpczogaWYgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCB3ZSBjYW4gcmVhY2ggaXQuIElmIHRoZXJlJ3Mgbm8gaGFyZHdhcmUgYW5kIHRoZSBkZXZpY2UgaXNuJ3QgcmVnaXN0ZXJlZCwgd2UgY2FuJ3QuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIHN5emthbGxlciBoaXQgdGhpcz8gU3l6a2FsbGVyIGhhcyB0aGlzIGdlbmVyaWMgUENJIGZ1enplciB0aGF0IG1vY2tzIE1NSU8gcmVhZHMuIElmIHN5emthbGxlciBtb2NrcyB0aGVzZSByZWFkcywgdGhlbiBgdHhnYmV2Zl9wcm9iZWAgY2FuIHN1Y2NlZWQsIGV2ZW4gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUhIElmIGB0eGdiZXZmX3Byb2JlYCBzdWNjZWVkcywgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGNhbiBnZXQgY2FsbGVkIHZpYSBldGh0b29sLiBCaW5nbyEgU28sIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgY3JlYXRlcy5cblxuQnV0IHdhaXQsIGRvZXMgc3l6a2FsbGVy4oCZcyBQQ0kgZnV6emVyICphY3R1YWxseSogd29yayBmb3IgdGhpcyBkcml2ZXI/IFllcywgaXQncyBnZW5lcmljIGFuZCBiaW5kcyB0byBhbnkgUENJIGRyaXZlciBtYXRjaGluZyB0aGUgZnV6emVkIFBDSSBJRHMuIFNvIHllcywgaXQgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIENsZWFybHksIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgYXJlIG5lZWRlZCBiZWNhdXNlIHRoZXkncmUgVkYgY29kZS4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBtb2RpZmllcyBgbGlid3hgLCB3aGljaCBpcyBzaGFyZWQgYnkgYWxsIG9mIHRob3NlIGNvbmZpZ3M6IGBOR0JFYCwgYFRYR0JFYCwgYE5HQkVWRmAsIGBUWEdCRVZGYC4gSG93ZXZlciwgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZGRlZCBhcmUgZm9yIGB3eF9ldGh0b29sX29wc192ZmAuIGB3eF9ldGh0b29sX29wc192ZmAgaXMgdXNlZCBzcGVjaWZpY2FsbHkgYnkgYG5nYmV2ZmAgYW5kIGB0eGdiZXZmYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgSSBzaG91bGQgZW5hYmxlICpvbmx5KiBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB3aGV0aGVyIGBMSUJXWGAgaXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBvciBzaW1wbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjU5LjE3MDAzMDA5OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5ODg3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJQldYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo1OS4yMjkwMjU5NzdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5MjQ4MjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhpZGRlbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIHRyaWdnZXJlZCBieSB0aG9zZSBgTkdCRWAsIGBUWEdCRWAsIGBOR0JFVkZgLCBhbmQgYFRYR0JFVkZgIGZsYWdzLiBTaW5jZSB0aGlzIGlzIGEgYml0IG9mIGEgaGlkZGVuIGNvbnRleHQsIEkgc2hvdWxkIGV4cGxpY2l0bHkgbWVudGlvbiBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIGluIG15IG5vdGVzLCB0byBtYWtlIHRoZSBhc3NvY2lhdGlvbiBjbGVhci5cblxuUmlnaHQsIGxldCdzIGlkZW50aWZ5IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaC4gU2VlbXMgbGlrZSBpdCdzIGludHJvZHVjaW5nIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYC4gSXQgYWxzbyB0b3VjaGVzIGB3eF9zZXRfY29hbGVzY2VgIGJ1dCB0aGF0IG9uZSBhbHJlYWR5IGV4aXN0cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byBgd3hfd3JpdGVfZWl0cl92ZmAsIGB3eF9zZXRfcmluZ2AsIGFuZCByZW1vdmluZyB0aGUgYHN0YXRpY2Aga2V5d29yZCBmcm9tIGB3eHZmX3VwX2NvbXBsZXRlYCBhbmQgYHd4dmZfZG93bmAuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUga2V5IHN5bWJvbHMgYXBwZWFyIHRvIGJlOlxuXG4qICAgYHd4X3NldF9yaW5ncGFyYW1fdmZgXG4qICAgYHd4X3dyaXRlX2VpdHJfdmZgXG4qICAgYHd4X3NldF9yaW5nYFxuXG5JIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSB0aGUgZXhhY3QgbmFtZXMsIGp1c3QgdG8gYmUgc3VyZS4gWWVwLCB0aGUgc2lnbmF0dXJlIGZvciBgd3hfc2V0X3JpbmdwYXJhbV92ZmAgaXMgYHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCAuLi4pYCBhbmQgYHd4X3dyaXRlX2VpdHJfdmZgIGlzIGFsc28gbW9kaWZpZWQuIEkgc2VlIHRoYXQgYHd4X3NldF9yaW5nYCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXQgYXBwZWFycyB0aGUgcmV0dXJuIHR5cGUgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIGB2b2lkYCB0byBgaW50YC5cblxuSGFuZyBvbiwgdGhlIGNoYW5nZXMgdG8gYHd4X3NldF9yaW5nYCBzdWdnZXN0IGl0J3MgbGlrZWx5IGV4cG9ydGVkIGFuZCBpcyB1c2VkIGJ5IGJvdGggdGhlIFBGIGFuZCB0aGUgVkYuIFRoaXMgb25lIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCBtZSB0YWtlIGEgbW9tZW50IHRvIHJldmlldyBgd3hfc2V0X3JpbmdgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MDUuOTIxNTExNjI5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU3Nzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3eF9zZXRfcmluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz03Njk9c3RhdGljIGludCB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTc4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo3ODM6c3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzg0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04MjUtXFx0d3h2Zl9kb3duKHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4MjY6XFx0Lyogd3hfc2V0X3JpbmcoKSBtYXkgcGFydGlhbGx5IGFwcGx5IGNoYW5nZXMgYmVmb3JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI3LVxcdCAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgyOS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4MzA6XFx0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgzMS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9ODQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NDgtXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHd4X2dldF9yaW5ncGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6ODQ5OlxcdC5zZXRfcmluZ3BhcmFtXFx0XFx0PSB3eF9zZXRfcmluZ3BhcmFtX3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTg1MC1cXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB3eF9nZXRfbXNnbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jPTMyNDk9RVhQT1JUX1NZTUJPTCh3eF9mZWF0dXJlc19jaGVjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYy0zMjUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM6MzI1MTppbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jLTMyNTItXFx0XFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzMxNS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYzozMzE2OkVYUE9SVF9TWU1CT0wod3hfc2V0X3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzMxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3Qgd3hfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgtMzgtXFx0XFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oOjM5OmludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgtNDAtXFx0XFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy01OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6NTk6XFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy02MC1cXHRrdmZyZWUodGVtcF9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTM5PXN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODM6XFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTg0LVxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzowNS45ODMwOTYwMzhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjY1NTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmluZyBCdWZmZXIgYW5kIENvYWxlc2NlIFNldHRpbmdzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgd3hfc2V0X3JpbmdgIGlzIGRlZmluaXRlbHkgdXNlZCBieSBib3RoIHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGFuZCBWRiAoVmlydHVhbCBGdW5jdGlvbikgY29tcG9uZW50cy4gVGhhdCBtZWFucyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgd3hfc2V0X3JpbmdwYXJhbV92ZmAsIGB3eF93cml0ZV9laXRyX3ZmYCwgYW5kIGB3eF9zZXRfcmluZ2AuXG5cbldhaXQgYSBtaW51dGUsIEkgYWxzbyBub3RpY2VkIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaGFzIGJlZW4gbW9kaWZpZWQuIEFscmlnaHQsIGxldCdzIGluY2x1ZGUgYHd4X3NldF9jb2FsZXNjZWAgaW4gdGhhdCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIGJlIHRob3JvdWdoLlxuXG5UaGVyZWZvcmUsIGZvciBjb25maWd1cmF0aW9ucywgSSBzaG91bGQgY29uc2lkZXIgYE5HQkVWRmAsIGBUWEdCRVZGYCwgYW5kIHRoZW4gc2luY2UgYHd4X3NldF9yaW5nYCBhbmQgbm93IGB3eF9zZXRfY29hbGVzY2VgIGFyZSAqYWxzbyogdXNlZCBieSB0aGUgUEYsIEkgbmVlZCB0byBpbmNsdWRlIGBOR0JFYCBhbmQgYFRYR0JFYCBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYHd4X3NldF9jb2FsZXNjZWAgKmlzKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBQRiBhcyB3ZWxsLiBKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgYWxsIHN0cmFpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzoxMC4yOTk3NTQ1OTlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDIzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X3NldF9jb2FsZXNjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz0zNjk9c3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjQwMzppbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDA0LVxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy01MDEtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjUwMjpFWFBPUlRfU1lNQk9MKHd4X3NldF9jb2FsZXNjZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9ODQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NTEtXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjg1MjpcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODUzLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oPTMzPWludCB3eF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oLTM2LVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oOjM3OmludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuaC0zOC1cXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmdiZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy05MS1cXHQuZ2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9nZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjkyOlxcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IHd4X3NldF9jb2FsZXNjZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtOTMtXFx0LmdldF9jaGFubmVsc1xcdFxcdD0gd3hfZ2V0X2NoYW5uZWxzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM9NTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy01NzQtXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjU3NTpcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTc2LVxcdC5nZXRfY2hhbm5lbHNcXHRcXHQ9IHd4X2dldF9jaGFubmVscyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTAuMzYyMTgyODA4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjUxOTIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4gSSBzZWUgdGhhdCBgd3hfc2V0X2NvYWxlc2NlYCBpcyBkZWZpbml0ZWx5IHVzZWQgYnkgYG5nYmVgLCBgdHhnYmVgLCBhbmQgYHZmYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGNvbmZpZ3MgY292ZXIgdGhvc2UgZHJpdmVycy4gU28sIEkgc2hvdWxkIGhhdmUgdGhlc2UgY29uZmlndXJhdGlvbnMgaW4gbXkgbGlzdDpcblxuKiAgIGBOR0JFYFxuKiAgIGBUWEdCRWBcbiogICBgTkdCRVZGYFxuKiAgIGBUWEdCRVZGYFxuXG5Gb3IgbXkgZm9jdXMgc3ltYm9scywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICBgd3hfc2V0X3JpbmdwYXJhbV92ZmBcbiogICBgd3hfd3JpdGVfZWl0cl92ZmBcbiogICBgd3hfc2V0X3JpbmdgXG4qICAgYHd4X3NldF9jb2FsZXNjZWBcblxuSSdtIG5vdGluZyB0aGF0IGB3eHZmX3VwX2NvbXBsZXRlYCBhbmQgYHd4dmZfZG93bmAgaGF2ZSBiZWVuIG1vZGlmaWVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vIGxvbmdlciBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkncmUgaGVscGVyIGZ1bmN0aW9ucywgc28gSSBkb24ndCB0aGluayB0aGV5J3JlIHdvcnRoIHRoZSBlZmZvcnQgdG8gcHV0IHRoZW0gb24gdGhlIGZvY3VzIGxpc3QsIEkgZG9uJ3QgdGhpbmsgSSBuZWVkIHRvIGZ1enogdGhlbS5cblxuSnVzdCB0byBiZSBzdXJlLCBsZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3MuIEkga25vdyBgUENJYCBpcyByZXF1aXJlZCwgYnV0IGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LiBJIHdpbGwgbmVlZCBgTkVUX1ZFTkRPUl9XQU5HWFVOYCB0byBldmVuIHNlZSB0aGUgZHJpdmVyIGNvbmZpZ3MgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgc2luY2UgaXQncyBqdXN0IGEgbWVudWNvbmZpZyBvciBhIGJvb2wsIHRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTUuNTI3Mzc2OTcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE0Mjc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2OmNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNy1cXHRib29sIFxcXCJXYW5neHVuIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE3OjE1LjU5MzUyNjA4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODAxNzM3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBuZXR3b3JrIGRyaXZlciwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBORVRfVkVORE9SX1dBTkdYVU5gIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhhdCDigJMgaXQncyBjcnVjaWFsIGZvciB0aGUgaGFyZHdhcmUgc3VwcG9ydCwgcmlnaHQ/XG5cbkFscmlnaHQsIGxldCBtZSBtYWtlIGEgbGlzdCBvZiB0aGUgc3BlY2lmaWMgb3B0aW9ucyBJIG5lZWQgdG8gbG9vayBhdDpcbi0gYE5FVF9WRU5ET1JfV0FOR1hVTmBcbi0gYE5HQkVgXG4tIGBUWEdCRWBcbi0gYE5HQkVWRmBcbi0gYFRYR0JFVkZgXG5cbkFoLCB3YWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRoYXQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgaXMgYSBib29sZWFuLiBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgSSBjb25zaWRlciB0aGUgb3RoZXIgb3B0aW9ucyBJIGhhdmUgbGlzdGVkLCBhbmQgY2hlY2sgaWYgdGhleSBoYXZlIGFueSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgYW5kIGFueSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2MDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzoxOS4xNzM3MDM2NDdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIyLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zMi1cXHRzZWxlY3QgTElCV1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDY6XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQ3OlxcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00OS1cXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njk6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzItXFx0c2VsZWN0IExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04Ni1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NzpcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODg6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04OS1cXHRzZWxlY3QgTElCV1hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTkuMjMxNjg0MDI1WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg0MjkwNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gVkYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gZW5oYW5jaW5nIHRoZSBXYW5neHVuIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIuIFRoZSB1c3VhbCBzdXNwZWN0cywgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCwgaXMgZ2VuZXJhbGx5IGVuYWJsZWQsIGJ1dCBpdCdzIG5vdCB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQncyBvZnRlbiByZXF1aXJlZCBmb3IgYFRYR0JFYCBidXQgaXNuJ3QgZGlyZWN0bHkgcmVsYXRlZCB0byAqdGhpcyogc3BlY2lmaWMgY2hhbmdlLiBCdXQgaXQncyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBzbyBJJ2xsIGluY2x1ZGUgYSBub3RlIGFib3V0IGl0LCBqdXN0IGluIGNhc2UuIFJlZ2FyZGxlc3MsIGlmIGBUWEdCRWAgZmFpbHMsIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgd2lsbCBzdGlsbCBmdW5jdGlvbiBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0IHVwZGF0ZXMgYHd4X3NldF9yaW5ncGFyYW1fdmZgLCBgd3hfd3JpdGVfZWl0cl92ZmAsIGB3eF9zZXRfcmluZ2AgYW5kIGB3eF9zZXRfY29hbGVzY2VgLiBOb3cgbGV0J3Mgc2VlLCBpdCBhbHNvIG1ha2VzIHRoZSBmdW5jdGlvbnMgYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYCBub24tc3RhdGljLlxuXG5SaWdodCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGlzIGluIGxpbmUgd2l0aCB0aGUgZXRodG9vbCBuZXRsaW5rL2lvY3RsIGludGVyZmFjZS4gYHd4X3dyaXRlX2VpdHJfdmZgIGlzIGZpbmUsIGFzIGlzIGB3eF9zZXRfcmluZ2AsIGFuZCBgd3hfc2V0X2NvYWxlc2NlYC5cblxuU28sIHRoZSBjcnV4IGlzIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBWRiBkZXZpY2VzIHZpYSBldGh0b29sIChgd3hfc2V0X3JpbmdwYXJhbV92ZmApIGFuZCBtb2RpZnlpbmcgdGhlIGNvYWxlc2NlIHNldHRpbmcgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBWRnMgKGB3eF93cml0ZV9laXRyX3ZmYCkuIFRoZSBzaGFyZWQgYHd4X3NldF9yaW5nYCBmdW5jdGlvbiBub3cgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB3aGljaCBpcyBhIHNlbnNpYmxlIGNoYW5nZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBkcml2ZXIncyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCBieSBQQ0kgZnV6emluZywgc28gaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGlzLCBpbiBmYWN0LCByZWFjaGFibGUuIEl0IGlzLiBJdCdzIGFzc2lnbmVkIHRvIGAuc2V0X3JpbmdwYXJhbWAgaW4gYHd4X2V0aHRvb2xfb3BzX3ZmYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYG5ldGRldi1cdTAwM2VldGh0b29sX29wc2AgaW4gYHd4X3NldF9ldGh0b29sX29wc192ZmAuIGB3eF9zZXRfZXRodG9vbF9vcHNfdmZgIGlzIHRoZW4gY2FsbGVkIGluIGB0eGdiZXZmX3Byb2JlYCBhbmQgYG5nYmV2Zl9wcm9iZWAuIFNvLCB5ZXMsIGl0J3MgYWNjZXNzaWJsZS5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzEwLCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzozMC4yMTU5NzcxMzlaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzgzOTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9XQU5HWFVOXCIsXG4gICAgXCJOR0JFXCIsXG4gICAgXCJUWEdCRVwiLFxuICAgIFwiTkdCRVZGXCIsXG4gICAgXCJUWEdCRVZGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid3hfc2V0X3JpbmdwYXJhbV92ZlwiLFxuICAgIFwid3hfd3JpdGVfZWl0cl92ZlwiLFxuICAgIFwid3hfc2V0X3JpbmdcIixcbiAgICBcInd4X3NldF9jb2FsZXNjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgZXRodG9vbCBvcGVyYXRpb25zIGFuZCByaW5nIG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXRodG9vbCBuZXRsaW5rL2lvY3RsIGludGVyZmFjZXMgd2hlbiB0aGUgUENJIGRldmljZSBpcyByZWdpc3RlcmVkLCB3aGljaCBjYW4gYmUgc2ltdWxhdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1dBTkdYVU5cIixcbiAgICBcIk5HQkVcIixcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJOR0JFVkZcIixcbiAgICBcIlRYR0JFVkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3eF9zZXRfcmluZ3BhcmFtX3ZmXCIsXG4gICAgXCJ3eF93cml0ZV9laXRyX3ZmXCIsXG4gICAgXCJ3eF9zZXRfcmluZ1wiLFxuICAgIFwid3hfc2V0X2NvYWxlc2NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHJpbmcgcGFyYW1ldGVycyBmb3IgV2FuZ3h1biBWRiBkZXZpY2VzIHZpYSBldGh0b29sICh3eF9zZXRfcmluZ3BhcmFtX3ZmKSBhbmQgbW9kaWZpZXMgdGhlIGNvYWxlc2NlIHNldHRpbmcgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBWRnMgKHd4X3dyaXRlX2VpdHJfdmYpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBzaGFyZWQgd3hfc2V0X3JpbmcgZnVuY3Rpb24gdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 22:55:43 +0000 UTC FinishedAt: 2026-07-10 23:17:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "acb138b8235c63564aa1bcd2666fdc9707e2f1e0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_WANGXUN", "NGBE", "TXGBE", "NGBEVF", "TXGBEVF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "acb138b8235c63564aa1bcd2666fdc9707e2f1e0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET_VENDOR_WANGXUN", "NGBE", "TXGBE", "NGBEVF", "TXGBEVF" ], "series_id": "984dcb89-2ad4-4bbe-9f6a-634bb37a1d29" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "wx_set_ringparam_vf", "wx_write_eitr_vf", "wx_set_ring", "wx_set_coalesce" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfV0FOR1hVTiYjMzQ7LAogICAgJiMzNDtOR0JFJiMzNDssCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O05HQkVWRiYjMzQ7LAogICAgJiMzNDtUWEdCRVZGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d3hfc2V0X3JpbmdwYXJhbV92ZiYjMzQ7LAogICAgJiMzNDt3eF93cml0ZV9laXRyX3ZmJiMzNDssCiAgICAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgICAmIzM0O3d4X3NldF9jb2FsZXNjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGY3NTc0MjI0YjY3MTg1NTRmNjRhYzc5MmQxODkzODY0MGRhYzM1NTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzoxNDo1MSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5pbmRleCA1ZGY5NzFhY2E5ZTM1Zi4uMjIwMzdmMDE1ZGVkMTkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbkBAIC05LDYgJiM0Mzs5LDggQEBcbiAjaW5jbHVkZSBcJiMzNDt3eF9ldGh0b29sLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt3eF9ody5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7d3hfbGliLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdmZfY29tbW9uLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7d3hfdmZfbGliLmhcJiMzNDtcbiBcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xuIFx0Y2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dO1xuQEAgLTQ4Nyw3ICYjNDM7NDg5LDEwIEBAIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZWxzZVxuIFx0XHRcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cbiBcdFx0XHRxX3ZlY3Rvci1cdTAwM2VpdHIgPSByeF9pdHJfcGFyYW07XG4tXHRcdHd4X3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuJiM0MztcdFx0aWYgKHd4LVx1MDAzZXBkZXYtXHUwMDNlaXNfdmlydGZuKVxuJiM0MztcdFx0XHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG4gXHR9XG4gXG4gXHR3eF91cGRhdGVfcnNjKHd4KTtcbkBAIC03NzUsNiAmIzQzOzc4MCw2NSBAQCBzdGF0aWMgaW50IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHd4X3NldF9yaW5ncGFyYW1fdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZyxcbiYjNDM7XHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gKmtlcm5lbF9yaW5nLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4mIzQzO1x0dTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2NvdW50O1xuJiM0MztcdHN0cnVjdCB3eF9yaW5nICp0ZW1wX3Jpbmc7XG4mIzQzO1x0aW50IGksIGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdG5ld190eF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLVx1MDAzZXR4X3BlbmRpbmcsIFdYX01JTl9UWEQsIFdYX01BWF9UWEQpO1xuJiM0MztcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xuJiM0MztcbiYjNDM7XHRuZXdfcnhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cdTAwM2VyeF9wZW5kaW5nLCBXWF9NSU5fUlhELCBXWF9NQVhfUlhEKTtcbiYjNDM7XHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcbiYjNDM7XG4mIzQzO1x0aWYgKG5ld190eF9jb3VudCA9PSB3eC1cdTAwM2V0eF9yaW5nX2NvdW50IFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZXdfcnhfY291bnQgPT0gd3gtXHUwMDNlcnhfcmluZ19jb3VudClcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0MztcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fdHhfcXVldWVzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0d3gtXHUwMDNldHhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0XHR3eC1cdTAwM2VyeF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3J4X2NvdW50O1xuJiM0MztcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbiYjNDM7XHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4mIzQzO1xuJiM0MztcdFx0Z290byBjbGVhcl9yZXNldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cbiYjNDM7XHRpID0gbWF4X3QoaW50LCB3eC1cdTAwM2VudW1fdHhfcXVldWVzLCB3eC1cdTAwM2VudW1fcnhfcXVldWVzKTtcbiYjNDM7XHR0ZW1wX3JpbmcgPSBrdm1hbGxvY19vYmpzKHN0cnVjdCB3eF9yaW5nLCBpKTtcbiYjNDM7XHRpZiAoIXRlbXBfcmluZykge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiYjNDM7XHRcdGdvdG8gY2xlYXJfcmVzZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHR3eHZmX2Rvd24od3gpO1xuJiM0MztcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuJiM0MztcdCAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGxcbiYjNDM7XHQgKiByZXF1ZXN0ZWQgcmluZyBwYXJhbWV0ZXJzIGNvdWxkIGJlIGNvbmZpZ3VyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHR3eF9lcnIod3gsIFwmIzM0O2ZhaWxlZCB0byBzZXQgcmluZyBwYXJhbWV0ZXJzOiAlZFwmIzM0OywgZXJyKTtcbiYjNDM7XHR3eF9jb25maWd1cmVfdmYod3gpO1xuJiM0MztcdHd4dmZfdXBfY29tcGxldGUod3gpO1xuJiM0MztcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xuJiM0MztjbGVhcl9yZXNldDpcbiYjNDM7XHRjbGVhcl9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cdTAwM2VzdGF0ZSk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcbiBcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XG4gXHRcdFx0XHQgICAgIEVUSFRPT0xfQ09BTEVTQ0VfVFhfTUFYX0ZSQU1FU19JUlEgfFxuQEAgLTc4Miw4ICYjNDM7ODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3eF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG4mIzQzO1x0LnNldF9yaW5ncGFyYW1cdFx0PSB3eF9zZXRfcmluZ3BhcmFtX3ZmLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHd4X2dldF9tc2dsZXZlbCxcbiBcdC5nZXRfY29hbGVzY2VcdFx0PSB3eF9nZXRfY29hbGVzY2UsXG4mIzQzO1x0LnNldF9jb2FsZXNjZVx0XHQ9IHd4X3NldF9jb2FsZXNjZSxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4gXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZixcbiB9O1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5pbmRleCBkMDQyNTY3YjgxMjg0Yi4uMmU1ZGJhODhkMDRhMTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXG5AQCAtMzI0OCw4ICYjNDM7MzI0OCw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xuIFxuLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbi1cdFx0IHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4mIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuJiM0MztcdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcbiB7XG4gXHRpbnQgaSwgZXJyID0gMDtcbiBcbkBAIC0zMjcxLDcgJiM0MzszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMjk5LDcgJiM0MzszMjk5LDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfcnhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMzExLDYgJiM0MzszMzExLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFxuIFx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50O1xuIFx0fVxuJiM0MztcdHJldHVybiAwO1xuIH1cbiBFWFBPUlRfU1lNQk9MKHd4X3NldF9yaW5nKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuaW5kZXggYWVkNmVhOGNmMGQ2NGEuLmJjNjcxNzg2OTc4ZTU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxuQEAgLTM2LDggJiM0MzszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuLVx0XHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4mIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuJiM0MztcdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxuaW5kZXggZWI2Y2EzZmU0ZTk3YjYuLmI2NGE0ZGUwODlmMmI5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcbkBAIC00MSw3ICYjNDM7NDEsNiBAQFxuICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDRcbiBcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgJiM0MzsgKDQgKiAoaSkpKSAvKiBpPVswLDFdICovXG4tI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKVxuICNkZWZpbmUgV1hfVlhJVFJfQ05UX1dESVMgICAgICAgIEJJVCgzMSlcbiAjZGVmaW5lIFdYX1ZYSVZBUl9NSVNDICAgICAgICAgICAweDI2MFxuICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCAmIzQzOyAoNCAqIChpKSkpIC8qIGk9WzAsM10gKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuaW5kZXggMGQyZGI4ZDM4Y2Q1NmMuLjI2ZGU3OGU5YTY5ZWZmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xuQEAgLTI2OSw3ICYjNDM7MjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG4gXHR3cjMyKHd4LCBXWF9WWElNQywgd3gtXHUwMDNlZWltc19lbmFibGVfbWFzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiYjNDM7dm9pZCB3eHZmX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXG4ge1xuIFx0LyogQWx3YXlzIHNldCB0aGUgY2FycmllciBvZmYgKi9cbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKHd4LVx1MDAzZW5ldGRldik7XG5AQCAtMzI0LDcgJiM0MzszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gfVxuIEVYUE9SVF9TWU1CT0wod3h2Zl9vcGVuKTtcbiBcbi1zdGF0aWMgdm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiYjNDM7dm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5pbmRleCBjYmJiMWIxNzhjYjJjNS4uZDQ1ZDVkOGFjM2FiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5AQCAtMTUsNyAmIzQzOzE1LDkgQEAgdm9pZCB3eF9zZXRfcnhfbW9kZV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4X2NvbmZpZ3VyZV92ZihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTtcbiB2b2lkIHd4dmZfd2F0Y2hkb2dfdXBkYXRlX2xpbmsoc3RydWN0IHd4ICp3eCk7XG4mIzQzO3ZvaWQgd3h2Zl91cF9jb21wbGV0ZShzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuJiM0Mzt2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5pbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5AQCAtMTYsNyAmIzQzOzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKVxuIFx0aW50IHZfaWR4ID0gcV92ZWN0b3ItXHUwMDNldl9pZHg7XG4gXHR1MzIgaXRyX3JlZztcbiBcbi1cdGl0cl9yZWcgPSBxX3ZlY3Rvci1cdTAwM2VpdHIgXHUwMDI2IFdYX1ZYSVRSX01BU0s7XG4mIzQzO1x0c3dpdGNoICh3eC1cdTAwM2VtYWMudHlwZSkge1xuJiM0MztcdGNhc2Ugd3hfbWFjX3NwOlxuJiM0MztcdFx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfU1BfTUFYX0VJVFI7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIHd4X21hY19hbWw6XG4mIzQzO1x0Y2FzZSB3eF9tYWNfYW1sNDA6XG4mIzQzO1x0XHRpdHJfcmVnID0gKHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwM2VcdTAwM2UgMykgXHUwMDI2IFdYX0FNTF9NQVhfRUlUUjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHRpdHJfcmVnID0gcV92ZWN0b3ItXHUwMDNlaXRyIFx1MDAyNiBXWF9FTV9NQVhfRUlUUjtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdH1cbiBcbiBcdC8qIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhblxuIFx0ICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgICAmIzM0O05HQkUmIzM0OywKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7TkdCRVZGJiMzNDssCiAgICAmIzM0O1RYR0JFVkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3eF9zZXRfcmluZ3BhcmFtX3ZmJiMzNDssCiAgICAmIzM0O3d4X3dyaXRlX2VpdHJfdmYmIzM0OywKICAgICYjMzQ7d3hfc2V0X3JpbmcmIzM0OywKICAgICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJiMzOTtzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNzU3NDIyNGI2NzE4NTU0ZjY0YWM3OTJkMTg5Mzg2NDBkYWMzNTU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTQ6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jCmluZGV4IDVkZjk3MWFjYTllMzVmLi4yMjAzN2YwMTVkZWQxOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMKQEAgLTksNiAmIzQzOzksOCBAQAogI2luY2x1ZGUgJiMzNDt3eF9ldGh0b29sLmgmIzM0OwogI2luY2x1ZGUgJiMzNDt3eF9ody5oJiMzNDsKICNpbmNsdWRlICYjMzQ7d3hfbGliLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfdmZfY29tbW9uLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7d3hfdmZfbGliLmgmIzM0OwogCiBzdHJ1Y3Qgd3hfc3RhdHMgewogCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKQEAgLTQ4Nyw3ICYjNDM7NDg5LDEwIEBAIGludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJZWxzZQogCQkJLyogcnggb25seSBvciBtaXhlZCAqLwogCQkJcV92ZWN0b3ItJmd0O2l0ciA9IHJ4X2l0cl9wYXJhbTsKLQkJd3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7CiYjNDM7CQlpZiAod3gtJmd0O3BkZXYtJmd0O2lzX3ZpcnRmbikKJiM0MzsJCQl3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQl3eF93cml0ZV9laXRyKHFfdmVjdG9yKTsKIAl9CiAKIAl3eF91cGRhdGVfcnNjKHd4KTsKQEAgLTc3NSw2ICYjNDM7NzgwLDY1IEBAIHN0YXRpYyBpbnQgd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHd4X3NldF9yaW5ncGFyYW1fdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKJiM0MzsJCQkgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qga2VybmVsX2V0aHRvb2xfcmluZ3BhcmFtICprZXJuZWxfcmluZywKJiM0MzsJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7CiYjNDM7CXUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDsKJiM0MzsJc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZzsKJiM0MzsJaW50IGksIGVyciA9IDA7CiYjNDM7CiYjNDM7CW5ld190eF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLSZndDt0eF9wZW5kaW5nLCBXWF9NSU5fVFhELCBXWF9NQVhfVFhEKTsKJiM0MzsJbmV3X3R4X2NvdW50ID0gQUxJR04obmV3X3R4X2NvdW50LCBXWF9SRVFfVFhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CiYjNDM7CiYjNDM7CW5ld19yeF9jb3VudCA9IGNsYW1wX3QodTMyLCByaW5nLSZndDtyeF9wZW5kaW5nLCBXWF9NSU5fUlhELCBXWF9NQVhfUlhEKTsKJiM0MzsJbmV3X3J4X2NvdW50ID0gQUxJR04obmV3X3J4X2NvdW50LCBXWF9SRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSk7CiYjNDM7CiYjNDM7CWlmIChuZXdfdHhfY291bnQgPT0gd3gtJmd0O3R4X3JpbmdfY291bnQgJmFtcDsmYW1wOwomIzQzOwkgICAgbmV3X3J4X2NvdW50ID09IHd4LSZndDtyeF9yaW5nX2NvdW50KQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDt3eC0mZ3Q7cmVzZXRfbG9jayk7CiYjNDM7CXNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC0mZ3Q7c3RhdGUpOwomIzQzOwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcod3gtJmd0O25ldGRldikpIHsKJiM0MzsJCWZvciAoaSA9IDA7IGkgJmx0OyB3eC0mZ3Q7bnVtX3R4X3F1ZXVlczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJd3gtJmd0O3R4X3JpbmdbaV0tJmd0O2NvdW50ID0gbmV3X3R4X2NvdW50OwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IHd4LSZndDtudW1fcnhfcXVldWVzOyBpJiM0MzsmIzQzOykKJiM0MzsJCQl3eC0mZ3Q7cnhfcmluZ1tpXS0mZ3Q7Y291bnQgPSBuZXdfcnhfY291bnQ7CiYjNDM7CQl3eC0mZ3Q7dHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDsKJiM0MzsJCXd4LSZndDtyeF9yaW5nX2NvdW50ID0gbmV3X3J4X2NvdW50OwomIzQzOwomIzQzOwkJZ290byBjbGVhcl9yZXNldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBhbGxvY2F0ZSB0ZW1wb3JhcnkgYnVmZmVyIHRvIHN0b3JlIHJpbmdzIGluICovCiYjNDM7CWkgPSBtYXhfdChpbnQsIHd4LSZndDtudW1fdHhfcXVldWVzLCB3eC0mZ3Q7bnVtX3J4X3F1ZXVlcyk7CiYjNDM7CXRlbXBfcmluZyA9IGt2bWFsbG9jX29ianMoc3RydWN0IHd4X3JpbmcsIGkpOwomIzQzOwlpZiAoIXRlbXBfcmluZykgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gY2xlYXJfcmVzZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJd3h2Zl9kb3duKHd4KTsKJiM0MzsJLyogd3hfc2V0X3JpbmcoKSBtYXkgcGFydGlhbGx5IGFwcGx5IGNoYW5nZXMgYmVmb3JlCiYjNDM7CSAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGwKJiM0MzsJICogcmVxdWVzdGVkIHJpbmcgcGFyYW1ldGVycyBjb3VsZCBiZSBjb25maWd1cmVkLgomIzQzOwkgKi8KJiM0MzsJZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJd3hfZXJyKHd4LCAmIzM0O2ZhaWxlZCB0byBzZXQgcmluZyBwYXJhbWV0ZXJzOiAlZCYjMzQ7LCBlcnIpOwomIzQzOwl3eF9jb25maWd1cmVfdmYod3gpOwomIzQzOwl3eHZmX3VwX2NvbXBsZXRlKHd4KTsKJiM0MzsJa3ZmcmVlKHRlbXBfcmluZyk7CiYjNDM7Y2xlYXJfcmVzZXQ6CiYjNDM7CWNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LSZndDtzdGF0ZSk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3d4LSZndDtyZXNldF9sb2NrKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHd4X2V0aHRvb2xfb3BzX3ZmID0gewogCS5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8CiAJCQkJICAgICBFVEhUT09MX0NPQUxFU0NFX1RYX01BWF9GUkFNRVNfSVJRIHwKQEAgLTc4Miw4ICYjNDM7ODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7CiAJLmdldF9kcnZpbmZvCQk9IHd4X2dldF9kcnZpbmZvLAogCS5nZXRfbGluawkJPSBldGh0b29sX29wX2dldF9saW5rLAogCS5nZXRfcmluZ3BhcmFtCQk9IHd4X2dldF9yaW5ncGFyYW0sCiYjNDM7CS5zZXRfcmluZ3BhcmFtCQk9IHd4X3NldF9yaW5ncGFyYW1fdmYsCiAJLmdldF9tc2dsZXZlbAkJPSB3eF9nZXRfbXNnbGV2ZWwsCiAJLmdldF9jb2FsZXNjZQkJPSB3eF9nZXRfY29hbGVzY2UsCiYjNDM7CS5zZXRfY29hbGVzY2UJCT0gd3hfc2V0X2NvYWxlc2NlLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAogCS5nZXRfbGlua19rc2V0dGluZ3MJPSB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKaW5kZXggZDA0MjU2N2I4MTI4NGIuLjJlNWRiYTg4ZDA0YTEzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMKQEAgLTMyNDgsOCAmIzQzOzMyNDgsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogfQogRVhQT1JUX1NZTUJPTCh3eF9mZWF0dXJlc19jaGVjayk7CiAKLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKLQkJIHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpCiYjNDM7aW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiYjNDM7CQl1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKQogewogCWludCBpLCBlcnIgPSAwOwogCkBAIC0zMjcxLDcgJiM0MzszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAogCQkJCQlpLS07CiAJCQkJCXd4X2ZyZWVfdHhfcmVzb3VyY2VzKCZhbXA7dGVtcF9yaW5nW2ldKTsKIAkJCQl9Ci0JCQkJcmV0dXJuOwomIzQzOwkJCQlyZXR1cm4gZXJyOwogCQkJfQogCQl9CiAKQEAgLTMyOTksNyAmIzQzOzMyOTksNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsCiAJCQkJCWktLTsKIAkJCQkJd3hfZnJlZV9yeF9yZXNvdXJjZXMoJmFtcDt0ZW1wX3JpbmdbaV0pOwogCQkJCX0KLQkJCQlyZXR1cm47CiYjNDM7CQkJCXJldHVybiBlcnI7CiAJCQl9CiAJCX0KIApAQCAtMzMxMSw2ICYjNDM7MzMxMSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKIAogCQl3eC0mZ3Q7cnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDsKIAl9CiYjNDM7CXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oCkBAIC0zNiw4ICYjNDM7MzYsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9maXhfZmVhdHVyZXMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsCiAJCQkJICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTsKLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCwKLQkJIHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpOwomIzQzO2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LAomIzQzOwkJdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7CiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfc2NoZWR1bGUoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7CiB2b2lkIHd4X3NlcnZpY2VfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oCmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaApAQCAtNDEsNyAmIzQzOzQxLDYgQEAKICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDQKIAogI2RlZmluZSBXWF9WWElUUihpKSAgICAgICAgICAgICAgKDB4MjAwICYjNDM7ICg0ICogKGkpKSkgLyogaT1bMCwxXSAqLwotI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKQogI2RlZmluZSBXWF9WWElUUl9DTlRfV0RJUyAgICAgICAgQklUKDMxKQogI2RlZmluZSBXWF9WWElWQVJfTUlTQyAgICAgICAgICAgMHgyNjAKICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCAmIzQzOyAoNCAqIChpKSkpIC8qIGk9WzAsM10gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jCkBAIC0yNjksNyAmIzQzOzI2OSw3IEBAIHN0YXRpYyB2b2lkIHd4dmZfaXJxX2VuYWJsZShzdHJ1Y3Qgd3ggKnd4KQogCXdyMzIod3gsIFdYX1ZYSU1DLCB3eC0mZ3Q7ZWltc19lbmFibGVfbWFzayk7CiB9CiAKLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKJiM0Mzt2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCkKIHsKIAkvKiBBbHdheXMgc2V0IHRoZSBjYXJyaWVyIG9mZiAqLwogCW5ldGlmX2NhcnJpZXJfb2ZmKHd4LSZndDtuZXRkZXYpOwpAQCAtMzI0LDcgJiM0MzszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB9CiBFWFBPUlRfU1lNQk9MKHd4dmZfb3Blbik7CiAKLXN0YXRpYyB2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KQomIzQzO3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHd4LSZndDtuZXRkZXY7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oCmluZGV4IGNiYmIxYjE3OGNiMmM1Li5kNDVkNWQ4YWMzYWJkYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oCkBAIC0xNSw3ICYjNDM7MTUsOSBAQCB2b2lkIHd4X3NldF9yeF9tb2RlX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwogdm9pZCB3eF9jb25maWd1cmVfdmYoc3RydWN0IHd4ICp3eCk7CiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTsKIHZvaWQgd3h2Zl93YXRjaGRvZ191cGRhdGVfbGluayhzdHJ1Y3Qgd3ggKnd4KTsKJiM0Mzt2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7CiBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpOwomIzQzO3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpOwogaW50IHd4dmZfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7CiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwppbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9saWIuYwpAQCAtMTYsNyAmIzQzOzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKQogCWludCB2X2lkeCA9IHFfdmVjdG9yLSZndDt2X2lkeDsKIAl1MzIgaXRyX3JlZzsKIAotCWl0cl9yZWcgPSBxX3ZlY3Rvci0mZ3Q7aXRyICZhbXA7IFdYX1ZYSVRSX01BU0s7CiYjNDM7CXN3aXRjaCAod3gtJmd0O21hYy50eXBlKSB7CiYjNDM7CWNhc2Ugd3hfbWFjX3NwOgomIzQzOwkJaXRyX3JlZyA9IHFfdmVjdG9yLSZndDtpdHIgJmFtcDsgV1hfU1BfTUFYX0VJVFI7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSB3eF9tYWNfYW1sOgomIzQzOwljYXNlIHd4X21hY19hbWw0MDoKJiM0MzsJCWl0cl9yZWcgPSAocV92ZWN0b3ItJmd0O2l0ciAmZ3Q7Jmd0OyAzKSAmYW1wOyBXWF9BTUxfTUFYX0VJVFI7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCWl0cl9yZWcgPSBxX3ZlY3Rvci0mZ3Q7aXRyICZhbXA7IFdYX0VNX01BWF9FSVRSOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KIAogCS8qIHNldCB0aGUgV0RJUyBiaXQgdG8gbm90IGNsZWFyIHRoZSB0aW1lciBiaXRzIGFuZCBjYXVzZSBhbgogCSAqIGltbWVkaWF0ZSBhc3NlcnRpb24gb2YgdGhlIGludGVycnVwdAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1Mjc5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFdhbmd4dW4gRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF9saWIuaGAsIGB3eF92Zi5oYCwgYHd4X3ZmX2NvbW1vbi5jYCwgYHd4X3ZmX2NvbW1vbi5oYCwgYW5kIGB3eF92Zl9saWIuY2AuIFNlZW1zIGxpa2UgdGhleSYjMzk7cmUgYWRkaW5nIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhbmQgbW9kaWZ5aW5nIGB3eF9zZXRfY29hbGVzY2VgIHRvIGludm9rZSBgd3hfd3JpdGVfZWl0cl92ZmAgZm9yIFZpcnR1YWwgRnVuY3Rpb25zIChWRnMpLiBUaGV5JiMzOTt2ZSBhbHNvIHR3ZWFrZWQgYHd4X3dyaXRlX2VpdHJfdmZgIGluIGB3eF92Zl9saWIuY2AuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0JiMzOTtzIGEgcGh5c2ljYWwgbmV0d29yayBjYXJkLCBhIFBDSWUgZGV2aWNlLiBUaGUgcXVlc3Rpb24gdGhhdCBpbW1lZGlhdGVseSBjb21lcyB0byBtaW5kIGlzLCBob3cgcHJldmFsZW50IGlzIHRoaXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nPyBJcyBpdCBldmVuIHJlbGV2YW50IGluIHRob3NlIGVudmlyb25tZW50cz8gQW5kLCBtb3JlIGltcG9ydGFudGx5LCBjYW4gdGhpcyBiZSBmdXp6ZWQ/CgpJIGtub3cgc3l6a2FsbGVyIGNhbiBoYW5kbGUgZnV6emluZyBQQ0kgZHJpdmVycywgYnV0IGl0JiMzOTtzIHVzdWFsbHkgZ2VhcmVkIHRvd2FyZCBzcGVjaWZpYyBkZXZpY2VzIG9yIG1vcmUgZ2VuZXJpYyBQQ0kgZnV6emluZy4gRm9yIFdhbmd4dW4gc3BlY2lmaWNhbGx5LCBpdCBkZXBlbmRzLCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgaXQuIEkgc2hvdWxkIHNlYXJjaCBLY29uZmlnIGZvciBgd2FuZ3h1bmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d2FuZ3h1biYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Mzg6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vbmdiZS5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTQzPWNvbmZpZyBUWEdCRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02MS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmUucnN0XHUwMDNlLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTYzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy03OS1cdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODA6XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjk2Olx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi5yc3RcdTAwM2UuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM3NAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDI4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFN5emthbGxlciBGdXp6aW5nIFBvdGVudGlhbCBvZiBXYW5neHVuIERyaXZlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNvbmZpZ3VyYXRpb25zOiBOR0JFLCBUWEdCRSwgVFhHQkVWRiwgTkdCRVZGLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgYXJlIHRoZXNlIFdhbmd4dW4gZHJpdmVycyBldmVuIGNvdmVyZWQgYnkgc3l6a2FsbGVyJiMzOTtzIGZ1enppbmcgY2FwYWJpbGl0aWVzPyBJIGtub3cgc3l6a2FsbGVyIGlzbiYjMzk7dCBleGFjdGx5IGJyaW1taW5nIHdpdGggc3BlY2lmaWMgZW11bGF0aW9uIGZvciBXYW5neHVuIGhhcmR3YXJlLiBUaGF0JiMzOTtzIGEgcmVkIGZsYWcuIEJ1dCB3YWl0LCBsZXQmIzM5O3MgZ28gYmFjayBhbmQgY2FyZWZ1bGx5IHJlcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLiBBaCwgaGVyZSBpdCBpczogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi4mIzM0OyBUaGlzIGlzIGtleS4KClRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgV2FuZ3h1biBoYXJkd2FyZSAqZW11bGF0ZWQqIGluIFFFTVU/IFRoYXQmIzM5O3MgdGhlIGNydXggb2YgaXQuIEkgY2FuJiMzOTt0IGp1c3QgYXNzdW1lIGFueXRoaW5nIGhlcmUuIEkgZG9uJiMzOTt0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBjaGVja2luZyBmb3IgbWVudGlvbnMgb2YgJiMzNDt3YW5neHVuJiMzNDsgaW4gdGhlIGNvZGUgaXMgZGlmZmljdWx0LgoKSG9sZCBvbiwgSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4gQ2FuIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhY3R1YWxseSBiZSAqcmVhY2hlZCogd2l0aG91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZT8gSXQmIzM5O3MgYW4gZXRodG9vbCBvcGVyYXRpb24sIHJpZ2h0PyBBbmQgZXRodG9vbCBvcHMgYXJlIGNhbGxlZCBvbiBuZXRkZXZzLiBJZiB0aGUgbmV0ZGV2IGlzbiYjMzk7dCByZWdpc3RlcmVkLCBiZWNhdXNlIHRoZSBQQ0kgcHJvYmUgZmFpbGVkIOKAkyBtZWFuaW5nIG5vIGhhcmR3YXJlIGlzIHByZXNlbnQg4oCTIHRoZW4gdGhvc2UgZXRodG9vbCBvcHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuCgpTbywgdGhlIG5leHQgdGhpbmcgaXMgdG8gc2VlIGlmIHRoZSBkcml2ZXIgcHJvdmlkZXMgYW55IGtpbmQgb2Ygc29mdHdhcmUgZW11bGF0aW9uIG9yIGEgZHVtbXkgZGV2aWNlLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRyaXZlciYjMzk7cyBjb2RlYmFzZS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7cyB3aGVyZSBhbnkgc3VjaCBhYnN0cmFjdGlvbiB3b3VsZCBsaWtlbHkgYmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwY2lfcmVnaXN0ZXJfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipVbnBhY2tpbmcgRHJpdmVyIFJlZ2lzdHJhdGlvbioqCgpIbW0sIGhvbGQgb24gYSBzZWNvbmQuIFRoaXMgd2hvbGUgcHJvY2VzcyBoaW5nZXMgb24gaG93IHRoZSBkcml2ZXIgaXRzZWxmIGlzIHJlZ2lzdGVyZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZnVuZGFtZW50YWwgbWVjaGFuaXNtIGZpcnN0LiBJcyBpdCBhIHN0YXRpYyByZWdpc3RyYXRpb24gd2l0aGluIHRoZSBPUyBrZXJuZWw/IE9yIGlzIHRoZXJlIHNvbWUgZHluYW1pYyBkaXNjb3ZlcnkgbWVjaGFuaXNtIGF0IHBsYXk/IFdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb2YgZWFjaCBhcHByb2FjaD8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgdGFibGUgbG9va3VwLCBvciBzb21ldGhpbmcgbW9yZSBjb21wbGV4IHdpdGggZGV2aWNlIElEcyBhbmQgZHJpdmVyIHByb2Jpbmc/IFRoaXMgJiMzNDtyZWdpc3RyYXRpb24mIzM0OyBzdGVwIGlzIHRoZSBsaW5jaHBpbi4gSWYgSSBjYW4mIzM5O3QgcGluIHRoYXQgZG93biwgSSYjMzk7bSBnb2luZyB0byBoYXZlIGEgaGFyZCB0aW1lIHVuZGVyc3RhbmRpbmcgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRoZSBzcGVjaWZpY3Mgb2YgdGhhdCByZWdpc3RyYXRpb24hIFRoZSBkZXZpbCwgYXMgYWx3YXlzLCBpcyBpbiB0aGUgZGV0YWlscywgc28gaG93IGFyZSB0aGUgZHJpdmVycyBiZWluZyBpZGVudGlmaWVkPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vZHVsZV9wY2lfZHJpdmVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jPTkwOD1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkxOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzo5MTk6bW9kdWxlX3BjaV9kcml2ZXIobmdiZV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyMC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTI1MT1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgbmdiZXZmX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTI2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MjYxOm1vZHVsZV9wY2lfZHJpdmVyKG5nYmV2Zl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM9OTY1PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtOTczLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6OTc0Om1vZHVsZV9wY2lfZHJpdmVyKHR4Z2JlX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzUtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmV2Zl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMjY6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmV2Zl9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODcyCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogMjY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQQ0kgRXRoZXJuZXQgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoZXNlIGFyZSBkZWZpbml0ZWx5IFBDSSBkcml2ZXJzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIFRoZSBrZXkgaGVyZSBpcyB0aGUgYHByb2JlYCBmdW5jdGlvbi4gSWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIGBwcm9iZWAgd29uJiMzOTt0IGV2ZW4gYmUgY2FsbGVkLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gTXkgcXVlc3Rpb24gaXMsIGNhbiB3ZSBzb21laG93IHJlYWNoIHRoaXMgY29kZSBwYXRoICp3aXRob3V0KiByZWFsIGhhcmR3YXJlPwoKSSYjMzk7dmUgc2VlbiBTeXprYWxsZXIgdXRpbGl6ZSB2aXJ0dWFsIGRldmljZXMgZm9yIG90aGVyIHN1YnN5c3RlbXMuIEl0JiMzOTtzIGdvdCBgdmhjaWAgZm9yIEJsdWV0b290aCwgYGR1bW15YCBmb3IgbmV0d29ya2luZywgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHNuZC1kdW1teWAgZm9yIEFMU0EuIEJ1dCBmb3IgUENJIGV0aGVybmV0IGRyaXZlcnMsIGl0JiMzOTtzIHR5cGljYWxseSBhIGRlYWQgZW5kIHVubGVzcyB0aGVyZSYjMzk7cyBhIGN1c3RvbSBRRU1VIGRldmljZSBvciBhIHNwZWNpZmljIFN5emthbGxlciBwc2V1ZG8tZGV2aWNlLgoKV2FpdCwgSSBzZWVtIHRvIHJlY2FsbCBTeXprYWxsZXIgaGF2aW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAuLi4gYnV0IHRoYXQmIzM5O3MgdmVyeSBsaW1pdGVkLCBpc24mIzM5O3QgaXQ/IEl0JiMzOTtzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBnZW5lcmljIFBDSSBmdXp6aW5nLCBub3QgdGhlIGludHJpY2F0ZSBzZXF1ZW5jZXMgb2YgTU1JTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIHRoYXQgdGhlc2UgY29tcGxleCBldGhlcm5ldCBkcml2ZXJzIG5lZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcywgY2hlY2tpbmcgdGhlIGxpbmsgc3RhdHVzLCBhbmQgY2hlY2tpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYSBuZWNlc3Nhcnkgc2VxdWVuY2UuCgpNb3N0IGV0aGVybmV0IGRyaXZlcnMgd3JpdHRlbiBmb3Igc3BlY2lmaWMgaGFyZHdhcmUsIGxpa2UgdGhlIEludGVsIGUxMDAwZSwgaWdiLCBpeGdiZSwgb3IgdGhlIFdhbmd4dW4gbmdiZS90eGdiZSB2YXJpYW50cywgdGVuZCB0byBjaG9rZSBpbiB0aGVpciBgcHJvYmVgIGZ1bmN0aW9uIGlmIHRoZXkgZG9uJiMzOTt0IGdldCB0aGUgY29ycmVjdCByZXNwb25zZXMgZnJvbSBNTUlPIHJlYWRzLgoKSSB0aGluayBpdCYjMzk7cyB0aW1lIHRvIHRha2UgYSBsb29rIGF0IHRoZSBwcm9iZSBmdW5jdGlvbnMgb2YgYG5nYmV2ZmAgYW5kIGB0eGdiZXZmYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSYjMzk7bGwgbGlrZWx5IGZpbmQgdGhlIHN0aWNraW5nIHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MTAzPXN0YXRpYyBpbnQgdHhnYmV2Zl9zd19pbml0KHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4Mi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODM6ICogdHhnYmV2Zl9wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTg0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xODgtICpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODk6ICogdHhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xOTAtICogVGhlIE9TIGluaXRpYWxpemF0aW9uLCBjb25maWd1cmluZyBvZiB0aGUgYWRhcHRlciBwcml2YXRlIHN0cnVjdHVyZSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxOTM6c3RhdGljIGludCB0eGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE5NC1cdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTMxNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgdHhnYmV2Zl9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxOC1cdC5pZF90YWJsZSA9IHR4Z2JldmZfcGNpX3RibCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzozMTk6XHQucHJvYmUgICAgPSB0eGdiZXZmX3Byb2JlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyMC1cdC5yZW1vdmUgICA9IHR4Z2JldmZfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MTUwCgkJCQkJCQlvdXRwdXQ6IDUzCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIGV4YW1pbmluZyBgdHhnYmV2Zl9wcm9iZWA6CgoqKkFuYWx5emluZyBgdHhnYmV2Zl9wcm9iZWAqKgoKQWxyaWdodCwgSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBnZXR0aW5nIGEgaGFuZGxlIG9uIGB0eGdiZXZmX3Byb2JlYC4gVGhpcyBpcyB3aGVyZSB0aGUgaW5pdGlhbCBkcml2ZXIgcHJvYmluZyBoYXBwZW5zLCBzbyBpdCYjMzk7cyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpkb2luZyogdG8gZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgaGFyZHdhcmUgZGV2aWNlIGlzIGNvbXBhdGlibGUgYW5kLCBpZiBzbywgcHJvcGVybHkgaW5pdGlhbGl6ZSBpdC4gVGhlIG5hbWUgc3VnZ2VzdHMgdGhpcyBpcyBmb3Igc29tZSB2YXJpYXRpb24gb2YgdGhlIGB0Z2JlYCBmYW1pbHksIGxpa2VseSB0aGUgVkYgb3IgdmlydHVhbCBmdW5jdGlvbiwgc28gdGhlIHByaW1hcnkgY29uY2VybiBpcyBnb2luZyB0byBiZSBhYm91dCBjb3JyZWN0bHkgaWRlbnRpZnlpbmcgdGhlIGhhcmR3YXJlIGFuZCBzZXR0aW5nIHVwIHRoZSB2aXJ0dWFsIGludGVyZmFjZS4KCkkmIzM5O20gcHJvYmFibHkgZ29pbmcgdG8gYmUgbG9va2luZyBmb3IgYSBzZXJpZXMgb2YgY2hlY2tzIGhlcmU6IGNoZWNrcyBmb3IgdGhlIGRldmljZSBJRCwgdGhlIFBDSSB2ZW5kb3IvZGV2aWNlIElEcywgYW55IHNwZWNpZmljIGhhcmR3YXJlIHJldmlzaW9uIGluZm9ybWF0aW9uLCBhbmQgcG9zc2libHkgZXZlbiB0aGUgYXZhaWxhYmlsaXR5IG9mIHNwZWNpZmljIGZlYXR1cmVzIHJlbGF0ZWQgdG8gdmlydHVhbCBmdW5jdGlvbnMuIEkgZXhwZWN0IHRoZXJlIHRvIGJlIGEgZmFpciBhbW91bnQgb2YgcGxhdGZvcm0tc3BlY2lmaWMgY29kZSwgd2hpY2ggaXMgYWx3YXlzIGEgaGVhZGFjaGUgdG8gbWFuYWdlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aG9zZSBkZXZpY2Utc3BlY2lmaWMgY2hlY2tzIGFyZS4KClRoZW4sIG9uY2UgdGhlIGRldmljZSBpcyBpZGVudGlmaWVkLCBJIGFudGljaXBhdGUgc2VlaW5nIHJlc291cmNlIGFsbG9jYXRpb246IG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgZXZlbiBETUEgY2hhbm5lbHMuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGVzZSByZXNvdXJjZXMgYXJlIGFsbG9jYXRlZCwgZXNwZWNpYWxseSBob3cgY29uZmxpY3RzIHdpdGggb3RoZXIgZGV2aWNlcyBhcmUgaGFuZGxlZC4gVGhlIG1lbW9yeSBtYXBwaW5nIGlzIGdvaW5nIHRvIGJlIGltcG9ydGFudCwgZW5zdXJpbmcgdGhlIHZpcnR1YWwgZnVuY3Rpb24gbWVtb3J5IHNwYWNlIGlzIHByb3Blcmx5IG1hcHBlZCBhbmQgYWNjZXNzaWJsZS4KCkZpbmFsbHksIGluaXRpYWxpemF0aW9uIG9mIHRoZSBkcml2ZXItc3BlY2lmaWMgc3RydWN0dXJlcyBpcyB2aXRhbC4gVGhpcyBpcyB3aGVyZSB0aGUgbmV0d29yayBpbnRlcmZhY2UgaXMgY29uZmlndXJlZC4gSSBhbnRpY2lwYXRlIHNlZWluZyB0aGUgYWxsb2NhdGlvbiBhbmQgc2V0dXAgb2YgdGhlIGBuZXRfZGV2aWNlYCBzdHJ1Y3R1cmUgYW5kIHRoZSBjb25maWd1cmF0aW9uIG9mIGFueSBpbnRlcm5hbCBkcml2ZXIgZGF0YSBzdHJ1Y3R1cmVzLiBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyByZWxhdGVkIHRvIHRoZSBWRiYjMzk7cyB2aXJ0dWFsIGZ1bmN0aW9ucyBhbmQgcmVzb3VyY2VzLiBJJiMzOTtsbCB3YW50IHRvIHNlZSBob3cgaW50ZXJydXB0cyBhcmUgaGFuZGxlZCBhbmQgd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBoYXBwZW4gYWZ0ZXIgdGhlIHByb2JlIGNvbXBsZXRlcy4gSSBtaWdodCBldmVuIGZpbmQgc29tZSBoaW50cyBhYm91dCBlcnJvciBoYW5kbGluZyBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3Igb2YgaG93IHdlbGwgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGVzZSBjb3JlIHRhc2tzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE5MzpcdHN0YXRpYyBpbnQgdHhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbiAxOTQ6XHRcdFx0XHQgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgX19hbHdheXNfdW51c2VkICplbnQpXG4gMTk1Olx0e1xuIDE5NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcbiAxOTc6XHRcdHN0cnVjdCB3eCAqd3ggPSBOVUxMO1xuIDE5ODpcdFx0aW50IGVycjtcbiAxOTk6XHRcbiAyMDA6XHRcdGVyciA9IHBjaV9lbmFibGVfZGV2aWNlX21lbShwZGV2KTtcbiAyMDE6XHRcdGlmIChlcnIpXG4gMjAyOlx0XHRcdHJldHVybiBlcnI7XG4gMjAzOlx0XG4gMjA0Olx0XHRlcnIgPSBkbWFfc2V0X21hc2tfYW5kX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBETUFfQklUX01BU0soNjQpKTtcbiAyMDU6XHRcdGlmIChlcnIpIHtcbiAyMDY6XHRcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAyMDc6XHRcdFx0XHRcJiMzNDtObyB1c2FibGUgRE1BIGNvbmZpZ3VyYXRpb24sIGFib3J0aW5nXFxuXCYjMzQ7KTtcbiAyMDg6XHRcdFx0Z290byBlcnJfcGNpX2Rpc2FibGVfZGV2O1xuIDIwOTpcdFx0fVxuIDIxMDpcdFxuIDIxMTpcdFx0ZXJyID0gcGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyhwZGV2LFxuIDIxMjpcdFx0XHRcdFx0XHQgICBwY2lfc2VsZWN0X2JhcnMocGRldiwgSU9SRVNPVVJDRV9NRU0pLFxuIDIxMzpcdFx0XHRcdFx0XHQgICBkZXZfZHJpdmVyX3N0cmluZyhcdTAwMjZwZGV2LVx1MDAzZWRldikpO1xuIDIxNDpcdFx0aWYgKGVycikge1xuIDIxNTpcdFx0XHRkZXZfZXJyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LFxuIDIxNjpcdFx0XHRcdFwmIzM0O3BjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMgZmFpbGVkIDB4JXhcXG5cJiMzNDssIGVycik7XG4gMjE3Olx0XHRcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldjtcbiAyMTg6XHRcdH1cbiAyMTk6XHRcbiAyMjA6XHRcdHBjaV9zZXRfbWFzdGVyKHBkZXYpO1xuIDIyMTpcdFxuIDIyMjpcdFx0bmV0ZGV2ID0gZGV2bV9hbGxvY19ldGhlcmRldl9tcXMoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMjIzOlx0XHRcdFx0XHRcdCBzaXplb2Yoc3RydWN0IHd4KSxcbiAyMjQ6XHRcdFx0XHRcdFx0IFRYR0JFVkZfTUFYX1RYX1FVRVVFUyxcbiAyMjU6XHRcdFx0XHRcdFx0IFRYR0JFVkZfTUFYX1JYX1FVRVVFUyk7XG4gMjI2Olx0XHRpZiAoIW5ldGRldikge1xuIDIyNzpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDIyODpcdFx0XHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xuIDIyOTpcdFx0fVxuIDIzMDpcdFxuIDIzMTpcdFx0U0VUX05FVERFVl9ERVYobmV0ZGV2LCBcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gMjMyOlx0XG4gMjMzOlx0XHR3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gMjM0Olx0XHR3eC1cdTAwM2VuZXRkZXYgPSBuZXRkZXY7XG4gMjM1Olx0XHR3eC1cdTAwM2VwZGV2ID0gcGRldjtcbiAyMzY6XHRcbiAyMzc6XHRcdHd4LVx1MDAzZW1zZ19lbmFibGUgPSBuZXRpZl9tc2dfaW5pdCgtMSwgTkVUSUZfTVNHX0RSViB8XG4gMjM4Olx0XHRcdFx0XHRcdE5FVElGX01TR19QUk9CRSB8IE5FVElGX01TR19MSU5LKTtcbiAyMzk6XHRcdHd4LVx1MDAzZWh3X2FkZHIgPSBkZXZtX2lvcmVtYXAoXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMjQwOlx0XHRcdFx0XHQgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCksXG4gMjQxOlx0XHRcdFx0XHQgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTtcbiAyNDI6XHRcdGlmICghd3gtXHUwMDNlaHdfYWRkcikge1xuIDI0MzpcdFx0XHRlcnIgPSAtRUlPO1xuIDI0NDpcdFx0XHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xuIDI0NTpcdFx0fVxuIDI0NjpcdFxuIDI0NzpcdFx0d3gtXHUwMDNlYjRfYWRkciA9IGRldm1faW9yZW1hcChcdTAwMjZwZGV2LVx1MDAzZWRldixcbiAyNDg6XHRcdFx0XHRcdCAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCA0KSxcbiAyNDk6XHRcdFx0XHRcdCAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgNCkpO1xuIDI1MDpcdFx0aWYgKCF3eC1cdTAwM2ViNF9hZGRyKSB7XG4gMjUxOlx0XHRcdGVyciA9IC1FSU87XG4gMjUyOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XG4gMjUzOlx0XHR9XG4gMjU0Olx0XG4gMjU1Olx0XHR3eC1cdTAwM2Vkcml2ZXJfbmFtZSA9IEtCVUlMRF9NT0ROQU1FO1xuIDI1NjpcdFx0d3hfc2V0X2V0aHRvb2xfb3BzX3ZmKG5ldGRldik7XG4gMjU3Olx0XHRuZXRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnR4Z2JldmZfbmV0ZGV2X29wcztcbiAyNTg6XHRcbiAyNTk6XHRcdC8qIHNldHVwIHRoZSBwcml2YXRlIHN0cnVjdHVyZSAqL1xuIDI2MDpcdFx0ZXJyID0gdHhnYmV2Zl9zd19pbml0KHd4KTtcbiAyNjE6XHRcdGlmIChlcnIpXG4gMjYyOlx0XHRcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XG4gMjYzOlx0XG4gMjY0Olx0XHRuZXRkZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BO1xuIDI2NTpcdFxuIDI2NjpcdFx0ZXRoX2h3X2FkZHJfc2V0KG5ldGRldiwgd3gtXHUwMDNlbWFjLnBlcm1fYWRkcik7XG4gMjY3Olx0XHRldGhlcl9hZGRyX2NvcHkobmV0ZGV2LVx1MDAzZXBlcm1fYWRkciwgd3gtXHUwMDNlbWFjLmFkZHIpO1xuIDI2ODpcdFxuIDI2OTpcdFx0d3h2Zl9pbml0X3NlcnZpY2Uod3gpO1xuIDI3MDpcdFx0ZXJyID0gd3hfaW5pdF9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiAyNzE6XHRcdGlmIChlcnIpXG4gMjcyOlx0XHRcdGdvdG8gZXJyX2ZyZWVfc3dfaW5pdDtcbiAyNzM6XHRcbiAyNzQ6XHRcdHd4X2dldF9md192ZXJzaW9uX3ZmKHd4KTtcbiAyNzU6XHRcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZXRkZXYpO1xuIDI3NjpcdFx0aWYgKGVycilcbiAyNzc6XHRcdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4gMjc4Olx0XG4gMjc5Olx0XHRwY2lfc2V0X2RydmRhdGEocGRldiwgd3gpO1xuIDI4MDpcdFx0bmV0aWZfdHhfc3RvcF9hbGxfcXVldWVzKG5ldGRldik7XG4gMjgxOlx0XG4gMjgyOlx0XHRyZXR1cm4gMDtcbiAyODM6XHRcbiAyODQ6XHRlcnJfcmVnaXN0ZXI6XG4gMjg1Olx0XHR3eF9jbGVhcl9pbnRlcnJ1cHRfc2NoZW1lKHd4KTtcbiAyODY6XHRlcnJfZnJlZV9zd19pbml0OlxuIDI4NzpcdFx0dGltZXJfZGVsZXRlX3N5bmMoXHUwMDI2d3gtXHUwMDNlc2VydmljZV90aW1lcik7XG4gMjg4Olx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnd4LVx1MDAzZXNlcnZpY2VfdGFzayk7XG4gMjg5Olx0XHRrZnJlZSh3eC1cdTAwM2V2ZmluZm8pO1xuIDI5MDpcdFx0a2ZyZWUod3gtXHUwMDNlcnNzX2tleSk7XG4gMjkxOlx0XHRrZnJlZSh3eC1cdTAwM2VtYWNfdGFibGUpO1xuIDI5MjpcdGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE5OQoJCQkJCQkJb3V0cHV0OiA1MgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBGbG93KioKCk9rYXksIHNvIEkgc2VlIHRoZSBleGVjdXRpb24gaXMgaGl0dGluZyBgdHhnYmV2Zl9zd19pbml0YC4gVGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBzb2Z0d2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBvZiB0aGUgSW50ZWwgWDcxMC9YTDcxMCB2aXJ0dWFsIGZ1bmN0aW9uIGRyaXZlci4gSSYjMzk7bSBnb2luZyB0byBkaWcgaW50byB0aGF0IGZ1bmN0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaXQmIzM5O3MgZG9pbmcg4oCTIHdoZXJlIHRoZSBrZXkgc3RydWN0dXJlcyBhcmUgYWxsb2NhdGVkIGFuZCBwb3B1bGF0ZWQsIHdoYXQgaGFyZHdhcmUgcmVnaXN0ZXJzIGl0JiMzOTtzIHRvdWNoaW5nLCBhbmQgd2hhdCByZXNvdXJjZSBtYW5hZ2VtZW50IHN0cmF0ZWdpZXMgYXJlIGJlaW5nIGltcGxlbWVudGVkIGR1cmluZyB0aGUgc2V0dXAgcGhhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIHNldHMgdXAgdGhlIHNoYXJlZCBtZW1vcnkgcmVnaW9ucywgaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlcywgYW5kIGNvbmZpZ3VyZXMgdGhlIHZhcmlvdXMgaW50ZXJydXB0IHZlY3RvcnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmlydHVhbCBmdW5jdGlvbiBhbmQgdGhlIHBoeXNpY2FsIGZ1bmN0aW9uLCBhbmQgaG93IHRoZSBkcml2ZXIgZW5zdXJlcyBwcm9wZXIgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaW1lIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBhbmQgZXhhbWluZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWdpc3RlciBhY2Nlc3NlcyB3aXRoaW4gYHR4Z2JldmZfc3dfaW5pdGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDM6XHRzdGF0aWMgaW50IHR4Z2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuIDEwNDpcdHtcbiAxMDU6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB3eC1cdTAwM2VuZXRkZXY7XG4gMTA2Olx0XHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHd4LVx1MDAzZXBkZXY7XG4gMTA3Olx0XHRpbnQgZXJyO1xuIDEwODpcdFxuIDEwOTpcdFx0LyogSW5pdGlhbGl6ZSBwY2llIGluZm8gYW5kIGNvbW1vbiBjYXBhYmlsaXR5IGZsYWdzICovXG4gMTEwOlx0XHRlcnIgPSB3eF9zd19pbml0KHd4KTtcbiAxMTE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMTEyOlx0XHRcdGdvdG8gZXJyX3d4X3N3X2luaXQ7XG4gMTEzOlx0XG4gMTE0Olx0XHQvKiBJbml0aWFsaXplIHRoZSBtYWlsYm94ICovXG4gMTE1Olx0XHRlcnIgPSB3eF9pbml0X21ieF9wYXJhbXNfdmYod3gpO1xuIDExNjpcdFx0aWYgKGVycilcbiAxMTc6XHRcdFx0Z290byBlcnJfaW5pdF9tYnhfcGFyYW1zO1xuIDExODpcdFxuIDExOTpcdFx0LyogbWF4IHFfdmVjdG9ycyAqL1xuIDEyMDpcdFx0d3gtXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBUWEdCRVZGX01BWF9NU0lYX1ZFQ1RPUlM7XG4gMTIxOlx0XHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgdHlwZSAqL1xuIDEyMjpcdFx0dHhnYmV2Zl9pbml0X3R5cGVfY29kZSh3eCk7XG4gMTIzOlx0XHQvKiBsb2NrIHRvIHByb3RlY3QgbWFpbGJveCBhY2Nlc3NlcyAqL1xuIDEyNDpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2d3gtXHUwMDNlbWJ4Lm1ieF9sb2NrKTtcbiAxMjU6XHRcbiAxMjY6XHRcdGVyciA9IHd4X3Jlc2V0X2h3X3ZmKHd4KTtcbiAxMjc6XHRcdGlmIChlcnIpIHtcbiAxMjg6XHRcdFx0d3hfZXJyKHd4LCBcJiMzNDtQRiBzdGlsbCBpbiByZXNldCBzdGF0ZS4gSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXG5cJiMzNDspO1xuIDEyOTpcdFx0XHRnb3RvIGVycl9yZXNldF9odztcbiAxMzA6XHRcdH1cbiAxMzE6XHRcdHd4X2luaXRfaHdfdmYod3gpO1xuIDEzMjpcdFx0d3hfbmVnb3RpYXRlX2FwaV92Zih3eCk7XG4gMTMzOlx0XHRpZiAoaXNfemVyb19ldGhlcl9hZGRyKHd4LVx1MDAzZW1hYy5hZGRyKSlcbiAxMzQ6XHRcdFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsXG4gMTM1Olx0XHRcdFx0IFwmIzM0O01BQyBhZGRyZXNzIG5vdCBhc3NpZ25lZCBieSBhZG1pbmlzdHJhdG9yLlxcblwmIzM0Oyk7XG4gMTM2Olx0XHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cdTAwM2VtYWMuYWRkcik7XG4gMTM3Olx0XG4gMTM4Olx0XHRpZiAoIWlzX3ZhbGlkX2V0aGVyX2FkZHIobmV0ZGV2LVx1MDAzZWRldl9hZGRyKSkge1xuIDEzOTpcdFx0XHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7QXNzaWduaW5nIHJhbmRvbSBNQUMgYWRkcmVzc1xcblwmIzM0Oyk7XG4gMTQwOlx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZXRkZXYpO1xuIDE0MTpcdFx0XHRldGhlcl9hZGRyX2NvcHkod3gtXHUwMDNlbWFjLmFkZHIsIG5ldGRldi1cdTAwM2VkZXZfYWRkcik7XG4gMTQyOlx0XHRcdGV0aGVyX2FkZHJfY29weSh3eC1cdTAwM2VtYWMucGVybV9hZGRyLCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIDE0MzpcdFx0fVxuIDE0NDpcdFxuIDE0NTpcdFx0d3gtXHUwMDNlbWFjLm1heF90eF9xdWV1ZXMgPSBUWEdCRVZGX01BWF9UWF9RVUVVRVM7XG4gMTQ2Olx0XHR3eC1cdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1JYX1FVRVVFUztcbiAxNDc6XHRcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXG4gMTQ4Olx0XHR3eC1cdTAwM2VhZGFwdGl2ZV9pdHIgPSB0cnVlO1xuIDE0OTpcdFx0d3gtXHUwMDNlcnhfaXRyX3NldHRpbmcgPSAxO1xuIDE1MDpcdFx0d3gtXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xuIDE1MTpcdFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xuIDE1MjpcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IFRYR0JFVkZfREVGQVVMVF9UWEQ7XG4gMTUzOlx0XHR3eC1cdTAwM2VyeF9yaW5nX2NvdW50ID0gVFhHQkVWRl9ERUZBVUxUX1JYRDtcbiAxNTQ6XHRcdC8qIHNldCBkZWZhdWx0IHdvcmsgbGltaXRzICovXG4gMTU1Olx0XHR3eC1cdTAwM2V0eF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1RYX1dPUks7XG4gMTU2Olx0XHR3eC1cdTAwM2VyeF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1JYX1dPUks7XG4gMTU3Olx0XG4gMTU4Olx0XHR3eC1cdTAwM2VzZXRfbnVtX3F1ZXVlcyA9IHR4Z2JldmZfc2V0X251bV9xdWV1ZXM7XG4gMTU5Olx0XG4gMTYwOlx0XHRzd2l0Y2ggKHd4LVx1MDAzZW1hYy50eXBlKSB7XG4gMTYxOlx0XHRjYXNlIHd4X21hY19zcDpcbiAxNjI6XHRcdFx0YnJlYWs7XG4gMTYzOlx0XHRjYXNlIHd4X21hY19hbWw6XG4gMTY0Olx0XHRjYXNlIHd4X21hY19hbWw0MDpcbiAxNjU6XHRcdFx0c2V0X2JpdChXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsIHd4LVx1MDAzZWZsYWdzKTtcbiAxNjY6XHRcdFx0c2V0X2JpdChXWF9GTEFHX1RYSEVBRF9XQl9FTkFCTEVELCB3eC1cdTAwM2VmbGFncyk7XG4gMTY3Olx0XHRcdGJyZWFrO1xuIDE2ODpcdFx0ZGVmYXVsdDpcbiAxNjk6XHRcdFx0YnJlYWs7XG4gMTcwOlx0XHR9XG4gMTcxOlx0XG4gMTcyOlx0XHRyZXR1cm4gMDtcbiAxNzM6XHRlcnJfcmVzZXRfaHc6XG4gMTc0Olx0XHRrZnJlZSh3eC1cdTAwM2V2ZmluZm8pO1xuIDE3NTpcdGVycl9pbml0X21ieF9wYXJhbXM6XG4gMTc2Olx0XHRrZnJlZSh3eC1cdTAwM2Vyc3Nfa2V5KTtcbiAxNzc6XHRcdGtmcmVlKHd4LVx1MDAzZW1hY190YWJsZSk7XG4gMTc4Olx0ZXJyX3d4X3N3X2luaXQ6XG4gMTc5Olx0XHRyZXR1cm4gZXJyO1xuIDE4MDpcdH1cbiAxODE6XHRcbiAxODI6XHQvKipcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI3ODAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgYHd4X3Jlc2V0X2h3X3ZmYCBmdW5jdGlvbiwgZGlzdGlsbGVkIHRvIGl0cyBjb3JlOgoKKipEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKioKCk9rYXksIEkmIzM5O20gZW5jb3VudGVyaW5nIGEgY2FsbCB0byBgd3hfcmVzZXRfaHdfdmZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7UmlnaHQsIGxldCYjMzk7cyBkaXNzZWN0IHRoaXMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuJiMzNDsgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGl0IHJlc2V0cywgd2hpY2ggaGFyZHdhcmUgY29tcG9uZW50cyBpdCB0YXJnZXRzLCBhbmQsIGNydWNpYWxseSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc2V0LiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyByZXNldCBpcyBuZWNlc3Nhcnk6IGlzIGl0IGZvciBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSBjbGVhbnVwIGJlZm9yZSByZWNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUga2V5IGZ1bmN0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfcmVzZXRfaHdfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NDE9c3RhdGljIGludCB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkoc3RydWN0IHd4ICp3eCwgdTMyICpyZXFfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01My0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NDogKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1LSAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTYxLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo2MjppbnQgd3hfcmVzZXRfaHdfdmYoc3RydWN0IHd4ICp3eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTEyNy19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6MTI4OkVYUE9SVF9TWU1CT0wod3hfcmVzZXRfaHdfdmYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTEyOS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg9MTExPXZvaWQgd3hfaW5pdF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaDoxMTI6aW50IHd4X3Jlc2V0X2h3X3ZmKHN0cnVjdCB3eCAqd3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oLTExMy12b2lkIHd4X2dldF9tYWNfYWRkcl92ZihzdHJ1Y3Qgd3ggKnd4LCB1OCAqbWFjX2FkZHIpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmM9MTQwPXZvaWQgd3hfcmVzZXRfdmYoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jLTE0NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmM6MTQ1Olx0cmV0ID0gd3hfcmVzZXRfaHdfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYy0xNDYtXHRpZiAoIXJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTYwPXN0YXRpYyBpbnQgbmdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTgxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo4MjpcdGVyciA9IHd4X3Jlc2V0X2h3X3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtODMtXHRpZiAoZXJyKSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jPTEwMz1zdGF0aWMgaW50IHR4Z2JldmZfc3dfaW5pdChzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMjUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTI2Olx0ZXJyID0gd3hfcmVzZXRfaHdfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTEyNy1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4OTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBoYXJkd2FyZSBhbmQgbGlrZWx5IGludm9sdmVkIGluIHNvbWUgZGVidWdnaW5nIG9yIG9wdGltaXphdGlvbi4KCioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKioKCkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IGxldCYjMzk7cyBnZXQgaW50byB0aGUgY29kZSBmb3IgYHd4X3Jlc2V0X2h3X3ZmYC4gSW1tZWRpYXRlbHksIEkmIzM5O20gbWVudGFsbHkgcGFyc2luZyB0aGF0IGZ1bmN0aW9uIG5hbWUuICYjMzQ7d3gmIzM0OyBsaWtlbHkgaGludHMgYXQgYSBzcGVjaWZpYyBmcmFtZXdvcmsgb3IgZHJpdmVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgYSBsYXJnZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuICYjMzQ7cmVzZXRfaHcmIzM0OyBpcyBzZWxmLWV4cGxhbmF0b3J5OyBpdCYjMzk7cyBhIGhhcmR3YXJlIHJlc2V0IHJvdXRpbmUuIEFuZCAmIzM0O3ZmJiMzNDsg4oCTIFZpcnR1YWwgRnVuY3Rpb24uIFRoYXQgbmFycm93cyB0aGluZ3MgZG93biBzaWduaWZpY2FudGx5LiBUaGlzIGlzIGxpa2VseSBhIGZ1bmN0aW9uIHdpdGhpbiBhIHZpcnR1YWxpemF0aW9uIGNvbnRleHQsIHByb2JhYmx5IGRlYWxpbmcgd2l0aCByZXNldHRpbmcgYSBWaXJ0dWFsIEZ1bmN0aW9uIG9mIGEgaGFyZHdhcmUgZGV2aWNlLgoKTXkgbWluZCYjMzk7cyBhbHJlYWR5IHJhY2luZywgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6CgoqICAgKipXaGF0IGtpbmQgb2YgaGFyZHdhcmU/KiogSXMgdGhpcyBuZXR3b3JrLCBzdG9yYWdlLCBncmFwaGljcz8gVGhhdCBzaGFwZXMgbXkgZXhwZWN0YXRpb25zIGFib3V0IHRoZSByZXNldCBwcm9jZWR1cmUmIzM5O3MgY29tcGxleGl0eS4KKiAgICoqV2hhdCB0cmlnZ2VycyB0aGlzIHJlc2V0PyoqIElzIHRoaXMgcGFydCBvZiBhIGJvb3QgcHJvY2VzcywgYW4gZXJyb3IgcmVjb3ZlcnksIGEgcmVzb3VyY2UgcmVhbGxvY2F0aW9uLCBvciBhIGhvdC1wbHVnIGV2ZW50PyBUaGUgdXNlIGNhc2UgZGljdGF0ZXMgaG93IHJvYnVzdCBhbmQgdGhvcm91Z2ggdGhlIHJlc2V0IG5lZWRzIHRvIGJlLgoqICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBEcm9wcGVkIGNvbm5lY3Rpb25zLCBkYXRhIGxvc3MsIHRlbXBvcmFyeSBzZXJ2aWNlIGludGVycnVwdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS4KKiAgICoqV2hhdCBpcyB0aGUgY3VycmVudCBzdGF0ZT8qKiBCZWZvcmUgcmVzZXR0aW5nLCBpdOKAmXMgbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhlIGN1cnJlbnQgaGFyZHdhcmUgc3RhdHVzLiBXaGF0IHJlc291cmNlcyBpcyBpdCBoYW5kbGluZz8KCkVzc2VudGlhbGx5LCBJJiMzOTttIHByaW1lZCB0byBhbmFseXplIHRoZSBjb2RlIHdpdGggYSBrZWVuIGF3YXJlbmVzcyBvZiB2aXJ0dWFsaXphdGlvbiwgaGFyZHdhcmUgY29udHJvbCwgYW5kIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cy4gVGhpcyBpc24mIzM5O3QganVzdCBhIGdlbmVyaWMgcmVzZXQgZnVuY3Rpb247IGl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGEgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA2MjpcdGludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxuICA2MzpcdHtcbiAgNjQ6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuICA2NTpcdFx0dTMyIG1zZ2J1Zls0XSA9IHtXWF9WRl9SRVNFVH07XG4gIDY2Olx0XHR1OCAqYWRkciA9ICh1OCAqKShcdTAwMjZtc2didWZbMV0pO1xuICA2NzpcdFx0dTMyIGI0X2J1ZlsxNl0gPSB7MH07XG4gIDY4Olx0XHR1MzIgdGltZW91dCA9IDIwMDtcbiAgNjk6XHRcdGludCByZXQ7XG4gIDcwOlx0XHR1MzIgaTtcbiAgNzE6XHRcbiAgNzI6XHRcdC8qIENhbGwgd3ggc3RvcCB0byBkaXNhYmxlIHR4L3J4IGFuZCBjbGVhciBpbnRlcnJ1cHRzICovXG4gIDczOlx0XHR3eF9zdG9wX2FkYXB0ZXJfdmYod3gpO1xuICA3NDpcdFxuICA3NTpcdFx0LyogcmVzZXQgdGhlIGFwaSB2ZXJzaW9uICovXG4gIDc2Olx0XHR3eC1cdTAwM2V2ZmluZm8tXHUwMDNldmZfYXBpID0gd3hfbWJveF9hcGlfbnVsbDtcbiAgNzc6XHRcbiAgNzg6XHRcdC8qIGJhY2t1cCBtc2l4IHZlY3RvcnMgKi9cbiAgNzk6XHRcdGlmICh3eC1cdTAwM2ViNF9hZGRyKSB7XG4gIDgwOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDE2OyBpJiM0MzsmIzQzOylcbiAgODE6XHRcdFx0XHRiNF9idWZbaV0gPSByZWFkbCh3eC1cdTAwM2ViNF9hZGRyICYjNDM7IGkgKiA0KTtcbiAgODI6XHRcdH1cbiAgODM6XHRcbiAgODQ6XHRcdHdyMzJtKHd4LCBXWF9WWENUUkwsIFdYX1ZYQ1RSTF9SU1QsIFdYX1ZYQ1RSTF9SU1QpO1xuICA4NTpcdFx0cmQzMih3eCwgV1hfVlhTVEFUVVMpO1xuICA4NjpcdFxuICA4NzpcdFx0Lyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqL1xuICA4ODpcdFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcdTAwMjZcdTAwMjYgdGltZW91dCkge1xuICA4OTpcdFx0XHR0aW1lb3V0LS07XG4gIDkwOlx0XHRcdHVkZWxheSg1KTtcbiAgOTE6XHRcdH1cbiAgOTI6XHRcbiAgOTM6XHRcdC8qIHJlc3RvcmUgbXNpeCB2ZWN0b3JzICovXG4gIDk0Olx0XHRpZiAod3gtXHUwMDNlYjRfYWRkcikge1xuICA5NTpcdFx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxNjsgaSYjNDM7JiM0MzspXG4gIDk2Olx0XHRcdFx0d3JpdGVsKGI0X2J1ZltpXSwgd3gtXHUwMDNlYjRfYWRkciAmIzQzOyBpICogNCk7XG4gIDk3Olx0XHR9XG4gIDk4Olx0XG4gIDk5Olx0XHQvKiBhbWxpdGU6IGJtZSAqL1xuIDEwMDpcdFx0aWYgKHd4LVx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWwgfHwgd3gtXHUwMDNlbWFjLnR5cGUgPT0gd3hfbWFjX2FtbDQwKVxuIDEwMTpcdFx0XHR3cjMyKHd4LCBXWF9WWF9QRl9CTUUsIFdYX1ZGX0JNRV9FTkFCTEUpO1xuIDEwMjpcdFxuIDEwMzpcdFx0aWYgKCF0aW1lb3V0KVxuIDEwNDpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDEwNTpcdFxuIDEwNjpcdFx0LyogUmVzZXQgVkYgcmVnaXN0ZXJzIHRvIGluaXRpYWwgdmFsdWVzICovXG4gMTA3Olx0XHR3eF92aXJ0X2Nscl9yZWcod3gpO1xuIDEwODpcdFxuIDEwOTpcdFx0LyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqL1xuIDExMDpcdFx0bWJ4LVx1MDAzZXRpbWVvdXQgPSAyMDAwO1xuIDExMTpcdFxuIDExMjpcdFx0cmV0ID0gd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHd4LCBtc2didWYsIG1zZ2J1ZixcbiAxMTM6XHRcdFx0XHRcdFx0ICBBUlJBWV9TSVpFKG1zZ2J1ZikpO1xuIDExNDpcdFx0aWYgKHJldClcbiAxMTU6XHRcdFx0cmV0dXJuIHJldDtcbiAxMTY6XHRcbiAxMTc6XHRcdGlmIChtc2didWZbMF0gIT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spIFx1MDAyNlx1MDAyNlxuIDExODpcdFx0ICAgIG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX05BQ0spKVxuIDExOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmIChtc2didWZbMF0gPT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTI4MwoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUmVzZXQgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHJlc2V0IHZlcmlmaWNhdGlvbiBmbG93LiBJdCBzdGFydHMgYnkgcmVhZGluZyBmcm9tIHRoZSBoYXJkd2FyZSByZWdpc3RlcnMgdXNpbmcgYHd4X2NoZWNrX2Zvcl9yc3RfdmYod3gpYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGZhaWx1cmUgbW9kZXM/IElmIHRoYXQgcmVnaXN0ZXIgYWNjZXNzIGZhaWxzLCBJJiMzOTtkIGV4cGVjdCBpdCB0byByZXR1cm4gYC1FQlVTWWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEgc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLgoKTmV4dCwgSSBzZWUgYSBtYWlsYm94IHdyaXRlIGFuZCByZWFkIHJlcGx5LiBUaGF0IHN1Z2dlc3RzIGEgY29tbXVuaWNhdGlvbiBleGNoYW5nZSB3aXRoIHNvbWUgb3RoZXIgY29tcG9uZW50IG9yIHByb2Nlc3MgcmVsYXRlZCB0byB0aGUgcmVzZXQgY2hlY2suIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBmb3IgY29tbXVuaWNhdGlvbiBpc3N1ZXMgaGVyZS4KCk5vdywgYW4gaW50ZXJlc3RpbmcgcG9pbnQgaXMgdGhhdCBpZiB0aGVyZSYjMzk7cyBubyBoYXJkd2FyZSBwcmVzZW50LCB0aGUgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGF0IGl0IHJlYWRzLiBTbywgdGhlIHJldHVybiB2YWx1ZSBpc24mIzM5O3QganVzdCBhIHNpbXBsZSBzdWNjZXNzL2ZhaWx1cmUgY29kZTsgaXQgc2VlbXMgdG8gaW5kaWNhdGUgYSBzdGF0ZS4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyB2YWx1ZSByZXByZXNlbnRzIHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgc2lnbmFsaW5nLCBhbmQgaXRzIGludGVycHJldGF0aW9uIHdvdWxkIGJlIGRldmljZS1kZXBlbmRlbnQuIFRoaXMgbWVhbnMgSSBuZWVkIHRvIGNhcmVmdWxseSBleGFtaW5lIHdoYXQgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGlzIGFjdHVhbGx5IGRvaW5nIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyBoYXJkd2FyZSBhbmQgZHJpdmVycyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gaXRzIGltcGxlbWVudGF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X2NoZWNrX2Zvcl9yc3RfdmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI0MT1pbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ3LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNDg6ICogIHd4X2NoZWNrX2Zvcl9yc3RfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgcmVzZXRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ5LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjUyLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjUzOmludCB3eF9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1NC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaD05Mj1pbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MzppbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmgtOTQtaW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eCk7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTYyPWludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy04Ny1cdC8qIHdlIGNhbm5vdCByZXNldCB3aGlsZSB0aGUgUlNUSSAvIFJTVEQgYml0cyBhcmUgYXNzZXJ0ZWQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo4ODpcdHdoaWxlICghd3hfY2hlY2tfZm9yX3JzdF92Zih3eCkgXHUwMDI2XHUwMDI2IHRpbWVvdXQpIHtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy04OS1cdFx0dGltZW91dC0tO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYz01NDk9aW50IHd4X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1Ny1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NTg6XHR3eF9jaGVja19mb3JfcnN0X3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01NTktXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM5NQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkIGFuZCBhcHByb2FjaGluZyB0aGlzIGxpbmUgb2YgY29kZToKCioqQW5hbHl6aW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCBteSBicmFpbiBzdGFydHMgdG8gcGFyc2UgdGhlIG5hbWluZyBjb252ZW50aW9uLiBUaGUgJiMzNDt3eCYjMzQ7IGxpa2VseSBpbmRpY2F0ZXMgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgd3hXaWRnZXRzIGxpYnJhcnksIHNvIHRoYXQmIzM5O3MgYSBrZXkgY29udGV4dHVhbCBjbHVlLiBJIGtub3cgd3hXaWRnZXRzIHF1aXRlIHdlbGwsIHNvIEkmIzM5O20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGxpa2VseSBkZXNpZ25lZCB0byBoYW5kbGUgc29tZSBzcGVjaWZpYyBjaGVjayBvciB2YWxpZGF0aW9uIHdpdGhpbiB0aGF0IGZyYW1ld29yay4gVGhlICYjMzQ7cnN0JiMzNDsgcGFydCBkZWZpbml0ZWx5IHNwYXJrcyBhIG1lbW9yeSDigJMgaXMgdGhpcyByZWxhdGVkIHRvIHJlU3RydWN0dXJlZFRleHQsIG9yIHBlcmhhcHMgYSByZXNldCBmdW5jdGlvbmFsaXR5PyAmIzM0O3ZmJiMzNDsgY291bGQgbWVhbiB2aXJ0dWFsIGZ1bmN0aW9uLCB2YWx1ZSBmdW5jdGlvbiwgb3IgZXZlbiB2YWxpZGF0aW9uIGZ1bmN0aW9uLiBHaXZlbiB0aGUgbmFtaW5nIHBhdHRlcm4gb2YgYSBsb3Qgb2Ygd3hXaWRnZXRzIGNvZGUsIGl0JiMzOTtzIHF1aXRlIHBvc3NpYmxlIGl0JiMzOTtzIGEgdmFsaWRhdGlvbiBmdW5jdGlvbiByZWxhdGVkIHRvIHJlU3RydWN0dXJlZFRleHQgZm9ybWF0dGluZyBhbmQgaXRzIHVzYWdlLCBidXQgSSBuZWVkIHRvIGRpdmUgZGVlcGVyIHRvIGNvbmZpcm0uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBhdCB0aGUgZnVuY3Rpb24mIzM5O3MgZGVmaW5pdGlvbiBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgYnV0IG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCBpdHMgZnVuY3Rpb24uIE5vdyBJJiMzOTttIHJlYWR5IHRvIGludmVzdGlnYXRlIGFuZCBob3BlZnVsbHkgZGlzY292ZXIgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNTM6XHRpbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KVxuIDI1NDpcdHtcbiAyNTU6XHRcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHJlc2V0IGRvbmUgYml0ICovXG4gMjU2Olx0XHRyZXR1cm4gd3hfY2hlY2tfZm9yX2JpdF92Zih3eCxcbiAyNTc6XHRcdFx0XHRcdCAgIFdYX1ZYTUFJTEJPWF9SU1REIHxcbiAyNTg6XHRcdFx0XHRcdCAgIFdYX1ZYTUFJTEJPWF9SU1RJKTtcbiAyNTk6XHR9XG4gMjYwOlx0XG4gMjYxOlx0LyoqXG4gMjYyOlx0ICogIHd4X3BvbGxfZm9yX21zZyAtIFdhaXQgZm9yIG1lc3NhZ2Ugbm90aWZpY2F0aW9uXG4gMjYzOlx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjY0Olx0ICpcbiAyNjU6XHQgKiAgUmV0dXJuOiByZXR1cm4gMCBpZiB0aGUgVkYgaGFzIHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uXG4gMjY2Olx0ICoqL1xuIDI2NzpcdHN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfbXNnKHN0cnVjdCB3eCAqd3gpXG4gMjY4Olx0e1xuIDI2OTpcdFx0c3RydWN0IHd4X21ieF9pbmZvICptYnggPSBcdTAwMjZ3eC1cdTAwM2VtYng7XG4gMjcwOlx0XHR1MzIgdmFsO1xuIDI3MTpcdFxuIDI3MjpcdFx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX21zZ192Ziwgd3gsIHZhbCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwNDIKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIYXJkd2FyZSBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBoYXJkd2FyZSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94ZXMuIEkmIzM5O20gc2VlaW5nIGEgY29yZSBhc3N1bXB0aW9uOiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgcmVhZGxgIGZ1bmN0aW9uIHdpbGwgZ3JhY2VmdWxseSByZXR1cm4gYDB4ZmZmZmZmZmZgLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgc2FmZXR5IG5ldC4KCk5vdywgbG9va2luZyBhdCBgd3hfY2hlY2tfZm9yX2JpdF92ZmAsIG15IGVkdWNhdGVkIGd1ZXNzIGlzIGl0JiMzOTtzIHBlcmZvcm1pbmcgYSBiaXR3aXNlIEFORCBvcGVyYXRpb24gb24gdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGUgdmlydHVhbCBmdW5jdGlvbiBtYWlsYm94IGFkZHJlc3MgKGBXWF9WWE1BSUxCT1hgKSB3aXRoIGEgc3BlY2lmaWMgcmVzZXQgZmxhZyAoYFdYX1ZYTUFJTEJPWF9SU1REYCkuICBJdCB3b3VsZCBiZSBpbnRlcmVzdGluZyB0byBzZWUgdGhpcyBmdW5jdGlvbiBpbiBtb3JlIGRldGFpbC4KCklmIHRoYXQgcmVhZCAqZG9lcyogcmV0dXJuIGAweGZmZmZmZmZmYCDigJMgZWZmZWN0aXZlbHkgcmVwcmVzZW50aW5nIGEgJiMzNDtoYXJkd2FyZSBub3QgcHJlc2VudCYjMzQ7IHNjZW5hcmlvIOKAkyB0aGVuIHRoZSBiaXR3aXNlIEFORCwgZXZlbiB3aXRoIHRoZSByZXNldCBmbGFnLCB3aWxsIGFsc28gcmVzdWx0IGluIGAweGZmZmZmZmZmYCwgd2hpY2ggaXMgbm9uLXplcm8uICBUaGVyZWZvcmUsIGB3eF9jaGVja19mb3JfcnN0X3ZmYCB3b3VsZCBjb3JyZWN0bHkgZXZhbHVhdGUgdG8gYHRydWVgLiBUaGlzICYjMzQ7ZXJyb3ImIzM0OyBjb25kaXRpb24gaXMgYmVpbmcgdXNlZCBhcyBhIHNpZ25hbCBmb3IgdGhlIGludGVuZGVkIG91dGNvbWUuCgpUaGUgYmVhdXR5IG9mIHRoaXMgaXMgdGhhdCBpdCBhbGxvd3MgdGhlIGNvZGUgdG8gYnlwYXNzIHRoZSBsb29wIHdoZW4gbm8gaGFyZHdhcmUgaXMgZGV0ZWN0ZWQuIFRoZW4gdGhlIGNvZGUgcHJvY2VlZHMgdG8gdHJpZ2dlciB0aGUgYHd4X3Jlc2V0X2h3X3ZmYCBmdW5jdGlvbiB3aGljaCBJIGFzc3VtZSB3b3VsZCBwZXJmb3JtIHRoZSBhY3R1YWwgcmVzZXQgb3BlcmF0aW9uLiBBZnRlciB0aGUgY2hlY2sgYW5kIHJlc2V0IHByb2Nlc3MgaGFzIGJlZW4gdHJpZ2dlcmVkLCB0aGUgY29kZSBtb3ZlcyBvbiB0byBgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5YCB3aGljaCBJIGFzc3VtZSB3b3VsZCBiZSB0aGUgY3JpdGljYWwgaGFuZHNoYWtlIGFuZCBkYXRhIHRyYW5zZmVyIHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICA0MTpcdHN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcbiAgNDI6XHRcdFx0XHRcdCAgICAgICB1MzIgKnJlc3BfYnVmLCB1MTYgc2l6ZSlcbiAgNDM6XHR7XG4gIDQ0Olx0XHRpbnQgcmV0O1xuICA0NTpcdFxuICA0NjpcdFx0cmV0ID0gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgcmVxX2J1Ziwgc2l6ZSk7XG4gIDQ3Olx0XHRpZiAocmV0KVxuICA0ODpcdFx0XHRyZXR1cm4gcmV0O1xuICA0OTpcdFxuICA1MDpcdFx0cmV0dXJuIHd4X3JlYWRfcG9zdGVkX21ieCh3eCwgcmVzcF9idWYsIHNpemUpO1xuICA1MTpcdH1cbiAgNTI6XHRcbiAgNTM6XHQvKipcbiAgNTQ6XHQgKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxuICA1NTpcdCAqICBAd3g6IHBvaW50ZXIgdG8gaGFyZHdhcmUgc3RydWN0dXJlXG4gIDU2Olx0ICpcbiAgNTc6XHQgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcyBhbmRcbiAgNTg6XHQgKiAgY2xlYXJzIGFsbCBpbnRlcnJ1cHRzLlxuICA1OTpcdCAqXG4gIDYwOlx0ICogIFJldHVybjogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzgyOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqQW5hbHl6aW5nIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAuIEp1c3QgZnJvbSB0aGUgbmFtZXMsIEkmIzM5O20gYWxyZWFkeSBmb3JtaW5nIHNvbWUgYXNzdW1wdGlvbnMuIFRoZSAmIzM0O3d4JiMzNDsgcHJlZml4IGxpa2VseSBwb2ludHMgdG8gYSBzcGVjaWZpYyBlbnZpcm9ubWVudCBvciBsaWJyYXJ5IOKAkyBwcm9iYWJseSBzb21lIHdpbmRvd2luZyBvciBlbWJlZGRlZCBzeXN0ZW0gY29udGV4dCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZS4gJiMzNDttYngmIzM0OyBhbG1vc3QgY2VydGFpbmx5IHN0YW5kcyBmb3IgbWFpbGJveC4gU28sIGltbWVkaWF0ZWx5LCBJJiMzOTttIHRoaW5raW5nIG1lc3NhZ2UgcGFzc2luZywgcHJvYmFibHkgYXN5bmNocm9ub3VzIGNvbW11bmljYXRpb24gYmV0d2VlbiBwcm9jZXNzZXMgb3IgdGhyZWFkcy4KCmB3eF93cml0ZV9wb3N0ZWRfbWJ4YCDigJMgc28sICYjMzQ7d3JpdGUgcG9zdGVkJiMzNDsg4oCTIGltcGxpZXMgYSBtZXNzYWdlIGlzIGJlaW5nIGFkZGVkIHRvIGEgbWFpbGJveCwgd2l0aCBhIHBvdGVudGlhbCBpbXBsaWNhdGlvbiB0aGF0IHRoZSBhY3Qgb2Ygd3JpdGluZyAqaXRzZWxmKiBjb3VsZCAmIzM0O3Bvc3QmIzM0OyB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgbmV3IG1lc3NhZ2UuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGVyZSYjMzk7cyBhbiBleHBlY3RhdGlvbiB0aGF0IHRoZSByZWNlaXZlciB3aWxsIGJlIG5vdGlmaWVkLCBlaXRoZXIgZXhwbGljaXRseSBvciBpbXBsaWNpdGx5LCBvbmNlIGEgbmV3IG1lc3NhZ2UgaXMgYXZhaWxhYmxlIGluIHRoZSBtYWlsYm94LiBJdCYjMzk7cyBhIGtleSBkZXRhaWwgdG8gd2F0Y2ggZm9yOiBpcyB0aGVyZSBhIGNhbGxiYWNrLCBhIHNlbWFwaG9yZSwgb3IganVzdCBwZXJpb2RpYyBwb2xsaW5nPyBBbmQgaXMgdGhlICYjMzQ7cG9zdGVkJiMzNDsgYXNwZWN0IHRocmVhZC1zYWZlIG9yIHBvdGVudGlhbGx5IGNyZWF0aW5nIGNvbmN1cnJlbmN5IHByb2JsZW1zPwoKTm93LCB0aGUgY291bnRlcnBhcnQsIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY29uc3VtZXIgb2YgdGhlc2UgbWVzc2FnZXMuIFRoZSB1c2Ugb2YgJiMzNDtwb3N0ZWQmIzM0OyBoaW50cyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIHJlYWQgbWVjaGFuaXNtIGRlc2lnbmVkIHRvIHJldHJpZXZlIG1lc3NhZ2VzIHRoYXQgaGF2ZSAqanVzdCogYmVjb21lIGF2YWlsYWJsZS4gVGhpcyBzdWdnZXN0cyB0aGVyZSBtaWdodCBiZSBzb21lIGZvcm0gb2YgaW50ZXJuYWwgcXVldWUgbWFuYWdlbWVudCBvciBzdGF0ZSB0byBjaGVjayB3aGF0IG1lc3NhZ2VzIGFyZSB1bnJlYWQgYW5kIHBvc3NpYmx5IHByaW9yaXRpemUuIEl0IG5lZWRzIHRvIGJlIGNsZWFyIHdoZXRoZXIgdGhlIHJlYWQgb3BlcmF0aW9uIGlzIGJsb2NraW5nLCBub24tYmxvY2tpbmcsIG9yIHRpbWVkLiBBIGJsb2NraW5nIHJlYWQgY291bGQgYmUgcHJvYmxlbWF0aWMgaWYgdGhlIGFwcGxpY2F0aW9uIG5lZWRzIHRvIGRvIG90aGVyIHdvcmssIHVubGVzcyB0aGUgZGVzaWduIGFsbG93cyBpdCB0byBzdXNwZW5kIHRvIGFuIGFwcHJvcHJpYXRlIHBvaW50LiBXaGF0IGhhcHBlbnMgaWYgdGhlIG1haWxib3ggaXMgZW1wdHk/IERvIHdlIGdldCBhbiBlcnJvciBjb2RlLCByZXR1cm4gTlVMTCwgb3IgYmxvY2sgaW5kZWZpbml0ZWx5PyBQZXJmb3JtYW5jZSBpcyBhbHdheXMgYSBjb25zaWRlcmF0aW9uLiBJJiMzOTtkIG5lZWQgdG8gYXNzZXNzIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciB0aGUgbWFpbGJveCB0byB1bmRlcnN0YW5kIHBvdGVudGlhbCBib3R0bGVuZWNrcywgbG9ja2luZywgb3IgbWVtb3J5IGFsbG9jYXRpb24gb3ZlcmhlYWQuCgpTbywgaW4gc3VtbWFyeSwgSSBhbnRpY2lwYXRlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBhIG1lc3NhZ2UtcGFzc2luZyBzeXN0ZW0uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBpcyB0aGUgc2VuZGVyLCBhZGRpbmcgbWVzc2FnZXMgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYSBub3RpZmljYXRpb24uIGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGlzIHRoZSByZWNlaXZlciwgZXh0cmFjdGluZyB0aG9zZSBtZXNzYWdlcy4gQSBkZWVwIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdvdWxkIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBpbm5lciB3b3JraW5ncyBvZiBob3cgdGhlc2UgbWVzc2FnZXMgYXJlIGhhbmRsZWQ6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfd3JpdGVfcG9zdGVkX21ieCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzAwPWludCB3eF9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzEyLS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMTM6ICogIHd4X3dyaXRlX3Bvc3RlZF9tYnggLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3gsIHdhaXQgZm9yIGFja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMjAtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMjE6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMjIte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg9OTE9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MjppbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaC05My1pbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NDE9c3RhdGljIGludCB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkoc3RydWN0IHd4ICp3eCwgdTMyICpyZXFfYnVmLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy00NS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo0NjpcdHJldCA9IHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIHJlcV9idWYsIHNpemUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTQ3LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9MjA3PWludCB3eF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTIyOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzoyMjk6XHRyZXR1cm4gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgbXNnYnVmLCBBUlJBWV9TSVpFKG1zZ2J1ZikpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTIzMC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MTY2CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBgd3hfd3JpdGVfcG9zdGVkX21ieGAqKgoKQWxyaWdodCwgc28gdGhlIGZvY3VzIGlzIG9uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YC4gSSBrbm93IHRoaXMgZnVuY3Rpb247IGl0JiMzOTtzIGEga2V5IHBpZWNlIGluIG91ciBtZXNzYWdlIGJveCBoYW5kbGluZywgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGEgbWVzc2FnZSB0aGF0JiMzOTtzIGJlZW4gJiMzNDtwb3N0ZWQuJiMzNDsgTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gcXVpY2tseSBkaXNzZWN0IHdoYXQgdGhhdCBpbXBsaWVzIHdpdGhpbiB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUuICYjMzQ7UG9zdGVkJiMzNDsgc3VnZ2VzdHMgdGhlIG1lc3NhZ2UgaGFzIGFscmVhZHkgYmVlbiBwcm9jZXNzZWQsIHBlcmhhcHMgdmFsaWRhdGVkLCBhbmQgaXMgbm93IHJlYWR5IGZvciBwZXJzaXN0ZW50IHN0b3JhZ2Ugb3IgZGVsaXZlcnkuIEkgbmVlZCB0byBjb25zaWRlciB0aGUgY29udGV4dDogaXMgdGhpcyBhIHVzZXItbGV2ZWwgbWVzc2FnZSwgYW4gaW50ZXItcHJvY2VzcyBjb21tdW5pY2F0aW9uIChJUEMpIG1lY2hhbmlzbSwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBgbWJ4YCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgbWFpbGJveCBzdHJ1Y3R1cmUgb3IgYWJzdHJhY3Rpb24sIHNvIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludGVybmFscyBvZiB0aGF0LiBJJiMzOTtsbCBuZWVkIHRvIGtub3c6IHdoYXQgYXJlIHRoZSBsaWtlbHkgcGFyYW1ldGVycz8gV2hhdCBzb3J0IG9mIGNvbmN1cnJlbmN5IHNhZmVndWFyZHMgYXJlIGVtcGxveWVkIGhlcmU/IElzIHRoZXJlIHBvdGVudGlhbCBmb3IgZGF0YSBjb3JydXB0aW9uIGlmIG5vdCBoYW5kbGVkIHByb3Blcmx5PyBBbnkgYXNzb2NpYXRlZCBlcnJvciBjb2RlcyBJIHNob3VsZCBiZSB3YXRjaGluZyBvdXQgZm9yPyBJIG5lZWQgdG8gdGhpbmsgYWJvdXQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zIC0gd2hhdCBoYXBwZW5zIGlmIHRoZSB3cml0ZSBmYWlscz8gRG9lcyBpdCByZXRyeSwgbG9nLCBvciBqdXN0IGRpc2NhcmQgdGhlIG1lc3NhZ2U/IERvZXMgaXQgYmxvY2sgdGhlIGNhbGxpbmcgcHJvY2Vzcz8gSSBhbHNvIG5lZWQgdG8gYXNzZXNzIHRoZSBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIGVzcGVjaWFsbHkgaWYgYW55IG9mIHRoZSBtZXNzYWdlIGRhdGEgaXMgc2Vuc2l0aXZlLiBUaGUgZnVuY3Rpb24gbmFtZSBpbXBsaWVzIHNvbWUgbGV2ZWwgb2YgY29tcGxleGl0eS4gVGltZSB0byBwdXQgb24gbXkgaW52ZXN0aWdhdG9yJiMzOTtzIGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMjE6XHRpbnQgd3hfd3JpdGVfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4gMzIyOlx0e1xuIDMyMzpcdFx0aW50IHJldDtcbiAzMjQ6XHRcbiAzMjU6XHRcdC8qIHNlbmQgbXNnICovXG4gMzI2Olx0XHRyZXQgPSB3eF93cml0ZV9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XG4gMzI3Olx0XHQvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovXG4gMzI4Olx0XHRpZiAocmV0KVxuIDMyOTpcdFx0XHRyZXR1cm4gcmV0O1xuIDMzMDpcdFxuIDMzMTpcdFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XG4gMzMyOlx0fVxuIDMzMzpcdFxuIDMzNDpcdC8qKlxuIDMzNTpcdCAqICB3eF93cml0ZV9tYnhfdmYgLSBXcml0ZSBhIG1lc3NhZ2UgdG8gdGhlIG1haWxib3hcbiAzMzY6XHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcbiAzMzc6XHQgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyXG4gMzM4Olx0ICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyXG4gMzM5Olx0ICpcbiAzNDA6XHQgKiAgUmV0dXJuOiByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlclxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTgyNwoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mICYjMzQ7TGV0JiMzOTtzIHNlZSBgd3hfcG9sbF9mb3JfYWNrYCwmIzM0OyByZWZsZWN0aW5nIGEgdGhvdWdodCBwcm9jZXNzIHlvdSwgYXMgYW4gZXhwZXJ0LCBtaWdodCBoYXZlOgoKKipBbmFseXppbmcgdGhlIEFja25vd2xlZGdlbWVudCBQb2xsaW5nIE1lY2hhbmlzbSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuICYjMzQ7TGV0JiMzOTtzIHNlZSBgd3hfcG9sbF9mb3JfYWNrYC4mIzM0OyAgTXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBhIHNwZWNpZmljIHBvbGxpbmcgbWVjaGFuaXNtIHdpdGhpbiB0aGUgYHd4YCBmcmFtZXdvcmssIGxpa2VseSByZWxhdGVkIHRvIGFja25vd2xlZGdpbmcgYSBjb21tdW5pY2F0aW9uIG9yIGV2ZW50LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBvcGVyYXRlcy4gSXMgaXQgYSBjZW50cmFsIHBvaW50LCBvciBwYXJ0IG9mIGEgbGFyZ2VyIHN5c3RlbT8gV2hhdCBhcmUgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnM/IFdoYXQga2luZCBvZiBhY2tub3dsZWRnZW1lbnQgaXMgaXQgd2FpdGluZyBmb3I/IElzIGl0IGEgaGFyZHdhcmUgbGV2ZWwgYWNrLCBhIG5ldHdvcmsgYWNrLCBvciBhIGhpZ2hlciBsYXllciBhY2s/IEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYHd4YCBpbmRpY2F0ZXMgYSBHVUkvdG9vbGtpdCBiYWNrZ3JvdW5kIC0gd2hpY2ggc3VnZ2VzdHMgaXQgY291bGQgYmUgcmVsYXRlZCB0byBldmVudCBoYW5kbGluZyBvciBhc3luY2hyb25vdXMgb3BlcmF0aW9ucy4gSXMgdGhpcyBhIGJsb2NraW5nIHBvbGwsIG9yIGRvZXMgaXQgdXRpbGl6ZSBzb21lIGZvcm0gb2YgYXN5bmNocm9ub3VzIG5vdGlmaWNhdGlvbj8gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGVyZSB3aWxsIGJlIGNvbXBsZXhpdGllcyBhcm91bmQgdGltZW91dHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGFuZCBlcnJvciBoYW5kbGluZy4gSSB3b25kZXIgaG93IGl0IGRlYWxzIHdpdGggZHJvcHBlZCBwYWNrZXRzIG9yIGRlbGF5ZWQgcmVzcG9uc2VzPyBJcyBpdCByb2J1c3Q/IEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzdGFydGluZyB3aXRoIHRoZSBmdW5jdGlvbiYjMzk7cyBzaWduYXR1cmUgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLCB0byBmb3JtIGEgbW9yZSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3eF9wb2xsX2Zvcl9hY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI2Nz1zdGF0aWMgaW50IHd4X3BvbGxfZm9yX21zZyhzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc2LS8qKlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNzc6ICogIHd4X3BvbGxfZm9yX2FjayAtIFdhaXQgZm9yIG1lc3NhZ2UgYWNrbm93bGVkZ21lbnRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc4LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjgxLSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjgyOnN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfYWNrKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4My17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMjE9aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzMwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMzE6XHRyZXR1cm4gd3hfcG9sbF9mb3JfYWNrKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzMyLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA1NDAKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IGludGVybmFsIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIGB3eF9wb2xsX2Zvcl9hY2tgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBgd3hfcG9sbF9mb3JfYWNrYCBmdW5jdGlvbi4gSW1tZWRpYXRlbHksIG15IG1pbmQgc3RhcnRzIHRyYWNpbmcgdGhlIGxpa2VseSBjb250ZXh0LiBUaGlzIG5hbWluZyBjb252ZW50aW9uIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc29tZSBraW5kIG9mIGFja25vd2xlZGdtZW50IG1lY2hhbmlzbSB3aXRoaW4gYSBjb21tdW5pY2F0aW9uIHN5c3RlbSwgcHJvYmFibHkgYmFzZWQgb24gdGhlIFd4V2lkZ2V0cyBmcmFtZXdvcmsuIEkmIzM5O20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIHRoaXMgYSBwb2xsaW5nIGxvb3AsIHdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdtZW50IHNpZ25hbD8gV2hhdCB0eXBlIG9mIGFja25vd2xlZGdtZW50IGlzIGl04oCUYSBzaW1wbGUgY29uZmlybWF0aW9uIG9mIHJlY2VpcHQsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHBvc2l0aXZlL25lZ2F0aXZlIGFja25vd2xlZGdlbWVudCAoQUNLL05BQ0spIHNjaGVtZT8gVGhlICYjMzQ7Zm9yX2FjayYjMzQ7IHBhcnQgaXMgaW1wb3J0YW50OiBpcyBpdCBibG9ja2luZz8gT3IgcGVyaGFwcyB0aW1lLW91dC1iYXNlZD8KCk15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhpcyB3aWxsIGxpa2VseSBiZSBidXJpZWQgZGVlcCB3aXRoaW4gYW4gZXZlbnQgbG9vcCBvciB0aHJlYWQgbWFuYWdlbWVudCBzdHJ1Y3R1cmUsIHByb2JhYmx5IGhhbmRsaW5nIGluY29taW5nIGV2ZW50cyBvciBtZXNzYWdlcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgd2l0aGluIHRoZSB3aWRlciBtZXNzYWdpbmcgYXJjaGl0ZWN0dXJlLiBJcyBpdCB1c2VkIGZvciBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gKElQQyksIG5ldHdvcmsgY29tbXVuaWNhdGlvbiwgb3IganVzdCBpbnRlcm5hbCBldmVudCBwcm9wYWdhdGlvbiB3aXRoaW4gYSBHVUk/CgpJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLiBXaGF0JiMzOTtzIHRoZSBleHBlY3RlZCBmb3JtYXQgb2YgdGhlIGFja25vd2xlZGdtZW50IHNpZ25hbD8gRG9lcyBpdCB1c2UgYSBzaGFyZWQgbWVtb3J5IHJlZ2lvbiwgcXVldWVzLCBvciBtdXRleGVzPyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBkZWFkbG9ja3MgbHVya2luZz8gVGhlIGNob2ljZSBvZiBwb2xsaW5nIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vdCBpbnRlcnJ1cHQgZHJpdmVuLCBzbyBpdCBpcyBsaWtlbHkgbGVzcyBsYXRlbmN5IHNlbnNpdGl2ZSB0aGFuIGFuIGludGVycnVwdCBkcml2ZW4gc29sdXRpb24uIFRoaXMgdGVsbHMgbWUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZGVzaWduIGNvbnN0cmFpbnRzLgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcHMgaW52b2x2ZSBzY3J1dGluaXppbmcgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGV4YWN0bHkgd2hhdCBpdCYjMzk7cyBhY2tub3dsZWRnaW5nLCBhbmQgaG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjgyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyODI6XHRzdGF0aWMgaW50IHd4X3BvbGxfZm9yX2FjayhzdHJ1Y3Qgd3ggKnd4KVxuIDI4MzpcdHtcbiAyODQ6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuIDI4NTpcdFx0dTMyIHZhbDtcbiAyODY6XHRcbiAyODc6XHRcdHJldHVybiByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljKHd4X2NoZWNrX2Zvcl9hY2tfdmYsIHd4LCB2YWwsXG4gMjg4Olx0XHRcdFx0XHRcdCAodmFsID09IDApLCBtYngtXHUwMDNldWRlbGF5LCBtYngtXHUwMDNldGltZW91dCk7XG4gMjg5Olx0fVxuIDI5MDpcdFxuIDI5MTpcdC8qKlxuIDI5MjpcdCAqICB3eF9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlXG4gMjkzOlx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMjk0Olx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxuIDI5NTpcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxuIDI5NjpcdCAqXG4gMjk3Olx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSByZWNlaXZlZCBhIG1lc3NhZ2Ugbm90aWZpY2F0aW9uIGFuZFxuIDI5ODpcdCAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuXG4gMjk5Olx0ICoqL1xuIDMwMDpcdGludCB3eF9yZWFkX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuIDMwMTpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjEyNzQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcsIHByZXNlbnRlZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2Fja192ZmAqKgoKQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIGB3eF9jaGVja19mb3JfYWNrX3ZmYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGB3eGAgbGlicmFyeSBvciBwb3NzaWJseSBhIGN1c3RvbSBhYnN0cmFjdGlvbiBidWlsdCB1cG9uIGl0LiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIGlzIGEgVmlzdWFsRm9yY2UgKFZGKSBvciByZWxhdGVkIHdlYiBjb21wb25lbnQgcmVsYXRlZCBmdW5jdGlvbiBjaGVja2luZyBhbiBhY2tub3dsZWRnZW1lbnQgb3IgY29uZmlybWF0aW9uIG9mIHNvbWUga2luZC4gVGhlIGBhY2tgIHN1Z2dlc3RzIGFja25vd2xlZGdlbWVudCBhbmQgdGhlIGB2ZmAgc3Ryb25nbHkgc3VnZ2VzdHMgdmlzdWFsZm9yY2UsIHRoZSB2aXN1YWxmb3JjZSByZWxhdGVkIGxpYnJhcmllcyBhcmUgYSBnaXZlbiBkdWUgdG8gbXkgdW5kZXJzdGFuZGluZy4gVGhlIGludGVudCBhcHBlYXJzIHRvIGJlIHZlcmlmeWluZyB0aGF0IHNvbWUgb3BlcmF0aW9uLCBjb21tdW5pY2F0aW9uLCBvciB0cmFuc2FjdGlvbiBoYXMgYmVlbiBwcm9wZXJseSBhY2tub3dsZWRnZWQuIEkmIzM5O2QgbmVlZCBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzOyBpcyBpdCBhIHNlcnZlci1jbGllbnQgaW50ZXJhY3Rpb24sIGEgZGF0YSB1cGRhdGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIE5leHQsIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZSAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCByZXR1cm4gYSBib29sZWFuLCBhbiBlcnJvciBjb2RlLCBvciBtb2RpZnkgc29tZSBpbnRlcm5hbCBzdGF0ZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIHdpbGwgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGFuICYjMzQ7YWNrbm93bGVkZ2VtZW50JiMzNDsgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZT8gVGhlIHByZXNlbmNlIG9mIGEgcmVjb3JkPyBUaGUgbGFjayBvZiBhbiBlcnJvcj8gV2l0aG91dCBtb3JlLCB0aGUgZnVuY3Rpb24gc2VlbXMgcXVpdGUgZ2VuZXJpYywgbGlrZSBtYW55IGhlbHBlciBmdW5jdGlvbnMgaW4gbXkgZGF5IHRvIGRheS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfY2hlY2tfZm9yX2Fja192ZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MjE0PXN0YXRpYyBpbnQgd3hfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgbWFzaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIyMy0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjI0OiAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSyYjMzk7ZFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjUtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjgtICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMjk6c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIzMC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yODI9c3RhdGljIGludCB3eF9wb2xsX2Zvcl9hY2soc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4Ni1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6Mjg3Olx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX2Fja192Ziwgd3gsIHZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjg4LVx0XHRcdFx0XHQgKHZhbCA9PSAwKSwgbWJ4LVx1MDAzZXVkZWxheSwgbWJ4LVx1MDAzZXRpbWVvdXQpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzQyPWludCB3eF93cml0ZV9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU5LVx0d3hfY2hlY2tfZm9yX21zZ192Zih3eCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM2MDpcdHd4X2NoZWNrX2Zvcl9hY2tfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNjEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjIyCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgKioKCkFscmlnaHQsIHRoZSBpbml0aWFsIHByb21wdCBtZW50aW9ucyBgd3hfY2hlY2tfZm9yX2Fja192ZmAuIFRoaXMgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgd3hgIGxpYnJhcnkgb3IgcG9zc2libHkgYSBjdXN0b20gYWJzdHJhY3Rpb24gYnVpbHQgdXBvbiBpdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyBhIFZpc3VhbEZvcmNlIChWRikgb3IgcmVsYXRlZCB3ZWIgY29tcG9uZW50IHJlbGF0ZWQgZnVuY3Rpb24gY2hlY2tpbmcgYW4gYWNrbm93bGVkZ2VtZW50IG9yIGNvbmZpcm1hdGlvbiBvZiBzb21lIGtpbmQuIFRoZSBgYWNrYCBzdWdnZXN0cyBhY2tub3dsZWRnZW1lbnQgYW5kIHRoZSBgdmZgIHN0cm9uZ2x5IHN1Z2dlc3RzIHZpc3VhbGZvcmNlLCB0aGUgdmlzdWFsZm9yY2UgcmVsYXRlZCBsaWJyYXJpZXMgYXJlIGEgZ2l2ZW4gZHVlIHRvIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBpbnRlbnQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCBzb21lIG9wZXJhdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgYWNrbm93bGVkZ2VkLiBJJiMzOTtkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljczsgaXMgaXQgYSBzZXJ2ZXItY2xpZW50IGludGVyYWN0aW9uLCBhIGRhdGEgdXBkYXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJJiMzOTtkIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgc2NvcGUgLSB3aGVyZSBpcyB0aGlzIGZ1bmN0aW9uIHVzZWQ/IFdoYXQgYXJlIGl0cyBpbnB1dHMgYW5kIG91dHB1dHM/IERvZXMgaXQgcmV0dXJuIGEgYm9vbGVhbiwgYW4gZXJyb3IgY29kZSwgb3IgbW9kaWZ5IHNvbWUgaW50ZXJuYWwgc3RhdGU/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0cyBhbmQgb3V0cHV0cyB3aWxsIHRlbGwgbWUgd2hhdCBjb25zdGl0dXRlcyBhbiAmIzM0O2Fja25vd2xlZGdlbWVudCYjMzQ7IGluIHRoaXMgY29udGV4dC4gSXMgaXQgYSBzdWNjZXNzZnVsIHJlc3BvbnNlIGNvZGU/IFRoZSBwcmVzZW5jZSBvZiBhIHJlY29yZD8gVGhlIGxhY2sgb2YgYW4gZXJyb3I/IFdpdGhvdXQgbW9yZSwgdGhlIGZ1bmN0aW9uIHNlZW1zIHF1aXRlIGdlbmVyaWMsIGxpa2UgbWFueSBoZWxwZXIgZnVuY3Rpb25zIGluIG15IGRheSB0byBkYXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjI5Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG4gMjMwOlx0e1xuIDIzMTpcdFx0LyogcmVhZCBjbGVhciB0aGUgcGYgYWNrIGJpdCAqL1xuIDIzMjpcdFx0cmV0dXJuIHd4X2NoZWNrX2Zvcl9iaXRfdmYod3gsIFdYX1ZYTUFJTEJPWF9QRkFDSyk7XG4gMjMzOlx0fVxuIDIzNDpcdFxuIDIzNTpcdC8qKlxuIDIzNjpcdCAqICB3eF9jaGVja19mb3JfbXNnX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHNlbnQgbWFpbFxuIDIzNzpcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuIDIzODpcdCAqXG4gMjM5Olx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBnb3QgcmVxIGJpdCBvciBlbHNlIC1FQlVTWVxuIDI0MDpcdCAqKi9cbiAyNDE6XHRpbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KVxuIDI0MjpcdHtcbiAyNDM6XHRcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHN0cyBiaXQgKi9cbiAyNDQ6XHRcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZTVFMpO1xuIDI0NTpcdH1cbiAyNDY6XHRcbiAyNDc6XHQvKipcbiAyNDg6XHQgKiAgd3hfY2hlY2tfZm9yX3JzdF92ZiAtIGNoZWNrcyB0byBzZWUgaWYgdGhlIFBGIGhhcyByZXNldFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjkwOAoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIGVuY291bnRlcmluZyB0aGF0IHBpZWNlIG9mIGNvZGU6CgoqKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2JpdF92ZmAqKgoKQWxyaWdodCwgdGhlIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGNoZWNrLCBhIHZlcmlmaWNhdGlvbiwgcmVsYXRlZCB0byBzb21lIHNvcnQgb2YgJiMzNDtiaXQmIzM0OyBtYW5pcHVsYXRpb24gb3IgZmxhZyB3aXRoaW4gYSAmIzM0O3ZmJiMzNDsgY29udGV4dC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgJiMzNDt2ZiYjMzQ7IGlzIGxpa2VseSBhIHZpcnR1YWwgZnVuY3Rpb24gdGFibGUgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGFuZCB0aGUgJiMzNDtiaXQmIzM0OyBwcm9iYWJseSByZWZlcnMgdG8gYSBmbGFnIG9yIHN0YXR1cyBiaXQgd2l0aGluIGEgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byB0aGF0IHRhYmxlLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIHByb2JhYmx5IGV4YW1pbmVzIG9uZSBvciBtb3JlIGJpdHMsIHBlcmhhcHMgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgZmxhZyYjMzk7cyBwcmVzZW5jZSBvciBhYnNlbmNlLCBvciBlbnN1cmluZyB0aGUgYml0IHBhdHRlcm4gaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHNvbWUgY3JpdGVyaWEuIFRoaXMgbWlnaHQgYmUgYSBzYWZldHkgY2hlY2ssIGFuIGludGVncml0eSBjaGVjaywgb3IgYSBjb25kaXRpb24gcmVxdWlyZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFsIGZ1bmN0aW9uLiBOb3csIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3MuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSBhY3R1YWxseSAqZG9lcyouCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxNCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjE0Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxuIDIxNTpcdHtcbiAyMTY6XHRcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XG4gMjE3Olx0XG4gMjE4Olx0XHR3eC1cdTAwM2VtYngubWFpbGJveCBcdTAwMjY9IH5tYXNrO1xuIDIxOTpcdFxuIDIyMDpcdFx0cmV0dXJuIChtYWlsYm94IFx1MDAyNiBtYXNrID8gMCA6IC1FQlVTWSk7XG4gMjIxOlx0fVxuIDIyMjpcdFxuIDIyMzpcdC8qKlxuIDIyNDpcdCAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSyYjMzk7ZFxuIDIyNTpcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuIDIyNjpcdCAqXG4gMjI3Olx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBzZXQgdGhlIHN0YXR1cyBiaXQgb3IgZWxzZSAtRUJVU1lcbiAyMjg6XHQgKiovXG4gMjI5Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXG4gMjMwOlx0e1xuIDIzMTpcdFx0LyogcmVhZCBjbGVhciB0aGUgcGYgYWNrIGJpdCAqL1xuIDIzMjpcdFx0cmV0dXJuIHd4X2NoZWNrX2Zvcl9iaXRfdmYod3gsIFdYX1ZYTUFJTEJPWF9QRkFDSyk7XG4gMjMzOlx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzQ5NQoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoaXMgbG9naWMsIGFzIGlmIEkgd2VyZSB3b3JraW5nIHRocm91Z2ggaXQ6CgoqKkRlY29kaW5nIHRoZSBNYWlsYm94IEludGVyYWN0aW9uKioKCkFscmlnaHQsIGxldCBtZSBicmVhayB0aGlzIGRvd24uIElmIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGlzbiYjMzk7dCBwcmVzZW50LCB0aGF0IGB3eF9yZWFkX3YycF9tYWlsYm94KHd4KWAgZnVuY3Rpb24g4oCTIEkga25vdyB0aGF0IG9uZSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gY291Z2ggdXAgYDB4ZmZmZmZmZmZgLiBUaGF0JiMzOTtzIHRoZSBzaWduYWwsIHRoZSBwbGFjZWhvbGRlciwgd2hlbiB0aGVyZSYjMzk7cyBubyBwaHlzaWNhbCBtYWlsYm94LiBOb3csIGlmIEkgdGhlbiBwZXJmb3JtIGEgYml0d2lzZSBBTkQgd2l0aCBhIG1hc2sgKGBtYWlsYm94ICZhbXA7IG1hc2tgKSwgdGhhdCByZXN1bHQgd2lsbCBiZSAqbm9uLXplcm8qLiBNZWFuaW5nIHNvbWV0aGluZywgaW4gdGhpcyBzY2VuYXJpbywgYnV0IHRoZSB3YXkgdGhpcyBjb2RlIGlzIHN0cnVjdHVyZWQsIHRoZSBmYWN0IHRoYXQgdGhlIHJlc3VsdCBpcyBub24temVybyBpc24mIzM5O3QgaW50ZXJwcmV0ZWQuIEZyb20gdGhhdCBmYWN0LCB0aGUgY29kZSBpbW1lZGlhdGVseSBpbnRlcnByZXRzIHRoaXMgYXMgcmV0dXJuaW5nIDAuIFRoYXQmIzM5O3MgaG93IGl0JiMzOTtzIGRlc2lnbmVkLiBUaGUgY3J1Y2lhbCB0aGluZyBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIDAuCgpTbywgZnJvbSB0aGVyZSwgYHd4X3BvbGxfZm9yX2Fja2AgaXMgY2FsbGVkLCBhbmQsIGdpdmVuIHRoZSBwcmV2aW91cyByZXR1cm4gb2YgMCwgd2lsbCBhbHNvIHJldHVybiAwIHdpdGhvdXQgZnVydGhlciBhZG8uIE5vIGFja25vd2xlZGdtZW50LCBub3RoaW5nLiBUaGUgYWJzZW5jZSBvZiB0aGUgbWFpbGJveCBwcmV2ZW50cyBwb2xsaW5nLgoKRm9sbG93aW5nIHRoaXMgcGF0dGVybiwgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIHdpbGwgcmV0dXJuIDAgYXMgd2VsbC4gVGhpcyBpbmRpY2F0ZXMgYSBmYWlsZWQgd3JpdGUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGhhcmR3YXJlIHN0YXRlIHdlJiMzOTt2ZSBlc3RhYmxpc2hlZC4gRmluYWxseSwgdGhlIGNvZGUgbW92ZXMgb24gdG8gZXhlY3V0aW5nIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGUgZmFjdCB0aGF0IGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGdldHMgY2FsbGVkIGF0IGFsbCBpbiB0aGlzIHNjZW5hcmlvIHN1Z2dlc3RzIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGF0dGVtcHQgYSByZWFkICpyZWdhcmRsZXNzKiBvZiB0aGUgd3JpdGUmIzM5O3Mgc3VjY2Vzcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byByZWNvdmVyLCBvciBjaGVjayBmb3IgYW4gZXJyb3IgY29uZGl0aW9uLiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gaW4gcm9idXN0IGhhcmR3YXJlIGludGVyYWN0aW9uIGRlc2lnbiwgYW5kIEkgY2FuIGFwcHJlY2lhdGUgdGhlIGF0dGVtcHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzAwOlx0aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4gMzAxOlx0e1xuIDMwMjpcdFx0aW50IHJldDtcbiAzMDM6XHRcbiAzMDQ6XHRcdHJldCA9IHd4X3BvbGxfZm9yX21zZyh3eCk7XG4gMzA1Olx0XHQvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovXG4gMzA2Olx0XHRpZiAocmV0KVxuIDMwNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDMwODpcdFxuIDMwOTpcdFx0cmV0dXJuIHd4X3JlYWRfbWJ4X3ZmKHd4LCBtc2csIHNpemUpO1xuIDMxMDpcdH1cbiAzMTE6XHRcbiAzMTI6XHQvKipcbiAzMTM6XHQgKiAgd3hfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrXG4gMzE0Olx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4gMzE1Olx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxuIDMxNjpcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxuIDMxNzpcdCAqXG4gMzE4Olx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kXG4gMzE5Olx0ICogIHJlY2VpdmVkIGFuIGFjayB0byB0aGF0IG1lc3NhZ2Ugd2l0aGluIGRlbGF5ICogdGltZW91dCBwZXJpb2RcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzMTMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBhcyBpZiBJIHdlcmUgcHJvY2Vzc2luZyB0aGlzIGxvZ2ljOgoKKipBbmFseXppbmcgdGhlIE1lc3NhZ2UgUG9sbGluZyBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IHRoaXMgYHd4X3BvbGxfZm9yX21zZ2AgZnVuY3Rpb24gYmVoYXZlcywgYW5kIGl0JiMzOTtzIHByZXR0eSBzdHJhaWdodGZvcndhcmQuIFRoZSBrZXkgbGllcyBpbiB0aGUgZmFjdCB0aGF0IGB3eF9jaGVja19mb3JfbXNnX3ZmYCBpcyB0aGUgaW5pdGlhbCBnYXRla2VlcGVyLiBJdCYjMzk7cyBlc3NlbnRpYWxseSB0ZWxsaW5nIHVzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gTm93LCB0aGUga2V5IGJpdCBpcyB0aGF0IGAweGZmZmZmZmZmICZhbXA7IFdYX1ZYTUFJTEJPWF9QRlNUU2AgaXNuJiMzOTt0IHplcm8uIFNpbmNlIHRoaXMgaXMgbm9uLXplcm8sIGB3eF9jaGVja19mb3JfbXNnX3ZmYCBzaWduYWxzIHRoYXQgbm90aGluZyYjMzk7cyB0aGVyZSwgYW5kIHRodXMgcmV0dXJucyAwLiBUaGF0JiMzOTtzIGEgZGlyZWN0IHJlc3VsdCBvZiB0aGUgbG9naWNhbCBBTkQgb3BlcmF0aW9uLiBTbywgYHd4X3BvbGxfZm9yX21zZ2Agd2lsbCBpbW1lZGlhdGVseSByZXR1cm4gMC4gQWZ0ZXIgdGhhdCB3ZSBzZWUgdGhhdCBgd3hfcmVhZF9tYnhfdmZgIGlzIGNhbGxlZCwgbGlrZWx5IGJlY2F1c2UgdGhlIGB3eF9wb2xsX2Zvcl9tc2dgIG1heSBiZSBkZXNpZ25lZCB0byBzZXQgdXAgYSBzdWJzZXF1ZW50IHJlYWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X3JlYWRfbWJ4X3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMDgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMwOTpcdHJldHVybiB3eF9yZWFkX21ieF92Zih3eCwgbXNnLCBzaXplKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzEwLX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3Mi0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzczOiAqICB3eF9yZWFkX21ieF92ZiAtIFJlYWRzIGEgbWVzc2FnZSBmcm9tIHRoZSBpbmJveCBpbnRlbmRlZCBmb3IgdmZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzc0LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzc5LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzgwOmludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM4MS17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaD05ND1pbnQgd3hfY2hlY2tfZm9yX21zZ192ZihzdHJ1Y3Qgd3ggKnd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTU6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTk2LWludCB3eF93cml0ZV9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NTQ5PWludCB3eF9jaGVja19tYWNfbGlua192ZihzdHJ1Y3Qgd3ggKnd4KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01NTktXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jOjU2MDpcdFx0cmV0ID0gd3hfcmVhZF9tYnhfdmYod3gsIG1zZ2J1ZiwgMik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTYxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUzNzQKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkmIzM5O3JlIG15IG93bjoKCioqQW5hbHl6aW5nIGB3eF9yZWFkX21ieF92ZmAqKgoKQWxyaWdodCwgYHd4X3JlYWRfbWJ4X3ZmYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ2xlYW4gc29tZSBpbml0aWFsIGluc2lnaHRzLCBrbm93aW5nIHRoZSBkb21haW46IGl0JiMzOTtzIGxpa2VseSBhIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmVhZGluZyBhIG1haWxib3gsIHBvdGVudGlhbGx5IGZyb20gYSBzcGVjaWZpYyBzeXN0ZW0gb3IgbGlicmFyeSAodGhlICYjMzQ7d3gmIzM0OyBsaWtlbHkgaGludHMgYXQgYSBwYXJ0aWN1bGFyIGZyYW1ld29yaykuIFRoZSAmIzM0O21ieCYjMzQ7IGNvbmZpcm1zIHRoZSBtYWlsYm94IGFzcGVjdCwgYW5kICYjMzQ7dmYmIzM0OyBpcyBsaWtlbHkgYW4gYWJicmV2aWF0aW9uIG9mICp2aXJ0dWFsIGZpbGUqLCBnaXZlbiBob3cgZGF0YSBpcyBoYW5kbGVkLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbiBwcm9iYWJseSBoYW5kbGVzIHRoZSByZXRyaWV2YWwgb2YgbWVzc2FnZSBkYXRhIGZyb20gYSBtYWlsIGZpbGUuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIGNvbnNpZGVyaW5nIHNldmVyYWwgYW5nbGVzLCBsaWtlIHRoZSB1bmRlcmx5aW5nIGRhdGEgZm9ybWF0IOKAkyBpcyBpdCBhIHN0YW5kYXJkIGxpa2UgbWJveCwgb3Igc29tZXRoaW5nIHByb3ByaWV0YXJ5PyBXaGF0IGxldmVsIG9mIGFic3RyYWN0aW9uIGRvZXMgaXQgb3BlcmF0ZSBvbj8gRG9lcyBpdCBoYW5kbGUgY29uY3VycmVuY3k/IEVycm9yIGhhbmRsaW5nIG11c3QgYmUgcm9idXN0IGhlcmUuIEkgd29uZGVyIGlmIGl0IGhhcyBhbnkgc2FmZWd1YXJkcyBhZ2FpbnN0IGNvcnJ1cHQgZGF0YSBpbiB0aGUgbWFpbGJveCBmaWxlcy4gU2VjdXJpdHkgY29uc2lkZXJhdGlvbnMgd291bGQgYmUgcGFyYW1vdW50LiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdHMgdnVsbmVyYWJpbGl0eSBhbmQgaWYgc28gaG93IHRvIGFkZHJlc3MgdGhlbS4gT3ZlcmFsbCwgdGhlIGZ1bmN0aW9uJiMzOTtzIGFyY2hpdGVjdHVyZSB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQgdGhvcm91Z2hseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzODA6XHRpbnQgd3hfcmVhZF9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxuIDM4MTpcdHtcbiAzODI6XHRcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXHUwMDI2d3gtXHUwMDNlbWJ4O1xuIDM4MzpcdFx0aW50IHJldCwgaTtcbiAzODQ6XHRcbiAzODU6XHRcdC8qIGxpbWl0IHJlYWQgdG8gc2l6ZSBvZiBtYWlsYm94IGFuZCBtYngtXHUwMDNlc2l6ZSBpcyB1cCB0byAxNSAqL1xuIDM4NjpcdFx0aWYgKHNpemUgXHUwMDNlIG1ieC1cdTAwM2VzaXplKVxuIDM4NzpcdFx0XHRzaXplID0gbWJ4LVx1MDAzZXNpemU7XG4gMzg4Olx0XG4gMzg5Olx0XHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cbiAzOTA6XHRcdHJldCA9IHd4X29idGFpbl9tYnhfbG9ja192Zih3eCk7XG4gMzkxOlx0XHRpZiAocmV0KVxuIDM5MjpcdFx0XHRyZXR1cm4gcmV0O1xuIDM5MzpcdFxuIDM5NDpcdFx0LyogY29weSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi9cbiAzOTU6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHNpemU7IGkmIzQzOyYjNDM7KVxuIDM5NjpcdFx0XHRtc2dbaV0gPSByZDMyYSh3eCwgV1hfVlhNQk1FTSwgaSk7XG4gMzk3Olx0XG4gMzk4Olx0XHQvKiBBY2tub3dsZWRnZSByZWNlaXB0IGFuZCByZWxlYXNlIG1haWxib3gsIHRoZW4gd2UmIzM5O3JlIGRvbmUgKi9cbiAzOTk6XHRcdHdyMzIod3gsIFdYX1ZYTUFJTEJPWCwgV1hfVlhNQUlMQk9YX0FDSyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2MDQxCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipMb2NrIEFjcXVpc2l0aW9uIEFudGljaXBhdGlvbioqCgpSaWdodCwgc28gdGhlIG5leHQgc3RlcCBpbiB0aGlzIHNlcXVlbmNlIGlzIGdvaW5nIHRvIGludm9sdmUgY2FsbGluZyBgd3hfb2J0YWluX21ieF9sb2NrX3ZmYC4gQmFzZWQgb24gdGhlIGNvbnRleHQgYW5kIG15IGV4cGVyaWVuY2UsIHRoaXMgbWVhbnMgd2UmIzM5O3JlIGFib3V0IHRvIGluaXRpYXRlIGEgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIGEgbWFpbGJveCBsb2NrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHVzdWFsIGNvbmNlcm5zOiBwb3NzaWJsZSBjb250ZW50aW9uIGlzc3VlcywgZW5zdXJpbmcgdGhlIGxvY2sgaXMgcmVsZWFzZWQgcHJvcGVybHkgcmVnYXJkbGVzcyBvZiB0aGUgb3V0Y29tZSwgYW5kIG1ha2luZyBzdXJlIHRoZSB1bmRlcmx5aW5nIG1haWxib3ggc3RydWN0dXJlIGlzIGluIGEgY29uc2lzdGVudCBzdGF0ZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBsb2NrIGlzIGFjcXVpcmVkLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBjYWxsaW5nIGNvbnRleHQgaGFzIHRoZSBuZWNlc3NhcnkgcGVybWlzc2lvbnMuIFRoZSBmdW5jdGlvbiBpdHNlbGYuLi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYXJndW1lbnRzIGl0JiMzOTtsbCB0YWtlIGFuZCB3aGF0IHRoYXQgbWVhbnMgYWJvdXQgd2hpY2ggbWFpbGJveCBvciByZXNvdXJjZSBpcyBiZWluZyB0YXJnZXRlZC4gSSYjMzk7bSBtZW50YWxseSB0cmFjaW5nIHRoZSBwb3NzaWJsZSBleGVjdXRpb24gcGF0aHMgd2l0aGluIHRoYXQgZnVuY3Rpb24gdG8gaWRlbnRpZnkgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBhcmVhcyB0aGF0IHJlcXVpcmUgc3BlY2lhbCBhdHRlbnRpb24uIFRoaXMgaXMgYSBjcml0aWNhbCBwb2ludDsgYW55IGZhaWx1cmUgaGVyZSBjb3VsZCBicmluZyB0aGUgZW50aXJlIHByb2Nlc3MgdG8gYSBoYWx0LiBJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGJlIHJldHVybmVkIGFuZCBob3cgSSYjMzk7bSBnb2luZyB0byBoYW5kbGUgdGhlbS4gVGltZSB0byBmb2N1cyBhbmQgbWFrZSBzdXJlIHRoaXMgYWNxdWlzaXRpb24gZ29lcyBzbW9vdGhseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfb2J0YWluX21ieF9sb2NrX3ZmJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0xODg9c3RhdGljIHUzMiB3eF9tYWlsYm94X2dldF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTQtLyoqXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjE5NTogKiAgd3hfb2J0YWluX21ieF9sb2NrX3ZmIC0gb2J0YWluIG1haWxib3ggbG9ja1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTYtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTktICoqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMDA6c3RhdGljIGludCB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYoc3RydWN0IHd4ICp3eClcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjAxLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM1My1cdC8qIGxvY2sgdGhlIG1haWxib3ggdG8gcHJldmVudCBwZi92ZiByYWNlIGNvbmRpdGlvbiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozNTQ6XHRyZXQgPSB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYod3gpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNTUtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MzgwPWludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zODktXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzkwOlx0cmV0ID0gd3hfb2J0YWluX21ieF9sb2NrX3ZmKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzkxLVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjY5NjEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gYHd4X29idGFpbl9tYnhfbG9ja192ZmA6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgIEZ1bmN0aW9uKioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCBgd3hfb2J0YWluX21ieF9sb2NrX3ZmYC4gVGhlIG5hbWUgaXRzZWxmIHNjcmVhbXMgbWFpbGJveCBsb2NraW5nLCBhbmQgdGhlICYjMzQ7dmYmIzM0OyBsaWtlbHkgaW5kaWNhdGVzIGEgdmlydHVhbCBmdW5jdGlvbiBvciBhIHZhcmlhbnQgb2Ygc29tZSBsb2NrIGFjcXVpc2l0aW9uIHJvdXRpbmUuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6IHdoYXQga2luZCBvZiBtYWlsYm94IGlzIGl0IGxvY2tpbmc/IElzIGl0IGEgaGFyZHdhcmUgbWFpbGJveCwgYSBzb2Z0d2FyZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGJlaW5nIGVtcGxveWVkIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZz8KCk15IGluaXRpYWwgcXVlc3Rpb25zIHdvdWxkIGNlbnRlciBhcm91bmQ6CgoqICAgKipDb25jdXJyZW5jeToqKiBIb3cgZG9lcyB0aGlzIGZ1bmN0aW9uIGhhbmRsZSBjb25jdXJyZW50IGFjY2VzcyB0byB0aGUgbWFpbGJveD8gQXJlIHRoZXJlIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgaWYgbXVsdGlwbGUgdGhyZWFkcy9wcm9jZXNzZXMgdHJ5IHRvIGFjY2VzcyB0aGUgbWFpbGJveCBzaW11bHRhbmVvdXNseT8KKiAgICoqQ29udGVudGlvbjoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlIGxvY2sgaXMgYWxyZWFkeSBoZWxkPyBEb2VzIGl0IHdhaXQsIGVycm9yIG91dCwgb3IgdHJ5IHNvbWUgb3RoZXIgc3RyYXRlZ3k/IFdoYXQgaXMgdGhlIGltcGFjdCBvZiBjb250ZW50aW9uIG9uIHN5c3RlbSBwZXJmb3JtYW5jZT8KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCYjMzk7cyB0aGUgZXJyb3IgaGFuZGxpbmcgbGlrZT8gRG9lcyBpdCByZXR1cm4gYSBzdGF0dXMgY29kZSwgdGhyb3cgYW4gZXhjZXB0aW9uLCBvciBzb21ldGhpbmcgZWxzZT8gSXMgdGhlcmUgZ3JhY2VmdWwgZGVncmFkYXRpb24gaWYgdGhlIGxvY2sgY2Fubm90IGJlIG9idGFpbmVkPwoqICAgKipDb250ZXh0OioqIFdoYXQgYXJlIHRoZSBjYWxsZXImIzM5O3MgcHJlLWNvbmRpdGlvbnMgYW5kIHBvc3QtY29uZGl0aW9ucz8gV2hhdCBwYXJ0IG9mIHRoZSBzeXN0ZW0gaXMgdGhlIGZ1bmN0aW9uIHVzZWQgaW4/IEFyZSB0aGVyZSBhbnkgaW1wb3J0YW50IGludmFyaWFudHMgdGhhdCBpdCB1cGhvbGRzPwoqICAgKipVc2UgQ2FzZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgdXNlLWNhc2VzLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMsIHRoYXQgYXJlIGtub3duIHRvIGJlIHBhcnRpY3VsYXJseSBjaGFsbGVuZ2luZz8KCkkmIzM5O2Qgd2FudCB0byBxdWlja2x5IHNjYW4gdGhlIGZ1bmN0aW9uJiMzOTtzIGltcGxlbWVudGF0aW9uIChvciBkZWNsYXJhdGlvbiBpZiBJIGhhdmUgYWNjZXNzIHRvIGl0KSBmb3IgYW55IGNsdWVzLiBUaGluZ3MgbGlrZSBgc3Bpbl9sb2NrYCwgYG11dGV4X2xvY2tgLCBgdHJ5X2xvY2tgLCBvciBgd2FpdGAgd291bGQgYmUgaW5zdGFudCBwb2ludGVycyB0b3dhcmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBhcmNoaXRlY3R1cmUgdG8gdW5kZXJzdGFuZCB3aHkgbWFpbGJveCBsb2NraW5nIG1pZ2h0IGJlIG5lY2Vzc2FyeSBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBGaW5hbGx5LCBJJiMzOTtkIGxvb2sgYXQgdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHJlbGVhc2UgdGhlIGxvY2sgYW5kIHRoaW5rIGFib3V0IGhvdyB0aG9zZSBjb3JyZWxhdGUgd2l0aCB3aGF0IEkgYW0gbG9va2luZyBhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyMDA6XHRzdGF0aWMgaW50IHd4X29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3Qgd3ggKnd4KVxuIDIwMTpcdHtcbiAyMDI6XHRcdGludCBjb3VudCA9IDUsIHJldDtcbiAyMDM6XHRcdHUzMiBtYWlsYm94O1xuIDIwNDpcdFxuIDIwNTpcdFx0cmV0ID0gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9tYWlsYm94X2dldF9sb2NrX3ZmLCB3eCwgbWFpbGJveCxcbiAyMDY6XHRcdFx0XHRcdFx0KG1haWxib3ggXHUwMDI2IFdYX1ZYTUFJTEJPWF9WRlUpLFxuIDIwNzpcdFx0XHRcdFx0XHQxLCBjb3VudCk7XG4gMjA4Olx0XHRpZiAocmV0KVxuIDIwOTpcdFx0XHR3eF9lcnIod3gsIFwmIzM0O0ZhaWxlZCB0byBvYnRhaW4gbWFpbGJveCBsb2NrIGZvciBWRi5cXG5cJiMzNDspO1xuIDIxMDpcdFxuIDIxMTpcdFx0cmV0dXJuIHJldDtcbiAyMTI6XHR9XG4gMjEzOlx0XG4gMjE0Olx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxuIDIxNTpcdHtcbiAyMTY6XHRcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XG4gMjE3Olx0XG4gMjE4Olx0XHR3eC1cdTAwM2VtYngubWFpbGJveCBcdTAwMjY9IH5tYXNrO1xuIDIxOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzgyMQoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDEzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWwgRnVuY3Rpb24gTWFpbGJveCBJbnRlcmFjdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgaWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgY29tcG9uZW50IHJlc3BvbnNpYmxlIGZvciB0aGlzIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94IGlzbiYjMzk7dCBwcmVzZW50LCB0aGUgYHd4X21haWxib3hfZ2V0X2xvY2tfdmZgIGZ1bmN0aW9uIGlzIGdvaW5nIHRvIHJldHVybiBgMHhmZmZmZmZmZmAuIEJlY2F1c2UgdGhlIGNvZGUgdGhlbiBjaGVja3MgYG1haWxib3ggJmFtcDsgV1hfVlhNQUlMQk9YX1ZGVWAsIHRoZSBmYWN0IHRoYXQgdGhlIGZpcnN0IGZ1bmN0aW9uIHJldHVybmVkIGAweGZmZmZmZmZmYCBpbmRpY2F0ZXMgdGhhdCB0aGUgcmVzdWx0IG9mIHRoYXQgYml0d2lzZSBBTkQgb3BlcmF0aW9uIHdpbGwgYmUgbm9uLXplcm8uIENvbnNlcXVlbnRseSwgdGhlIGByZWFkeF9wb2xsX3RpbWVvdXRfYXRvbWljYCBmdW5jdGlvbiB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiAwLiBUaGlzIGltcGxpZXMgbm8gd2FpdCB0aW1lLCBtZWFuaW5nIHRoZXJlJiMzOTtzIHNvbWUga2luZCBvZiBpbW1lZGlhdGUgZmFpbHVyZSBvciBubyBkYXRhIGF2YWlsYWJsZS4KCkZvbGxvd2luZyB0aGF0IHBhdGgsIGB3eF9yZWFkX21ieF92ZmAgd2lsbCB0aGVuIGF0dGVtcHQgdG8gcmVhZCB0aGF0IHBvdGVudGlhbGx5IGludmFsaWQgdmFsdWUsIGAweGZmZmZmZmZmYCwgaW50byB0aGUgYG1zZ2AgdmFyaWFibGUuIEFmdGVyIHRoYXQgaGFwcGVucywgd2hlbiBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCBpcyBjYWxsZWQsIGl0JiMzOTtzIHJldHVybmluZyAwLCBhbmQsIGZpbmFsbHksIHRoYXQgd2lsbCBhbHNvIGNhdXNlIGB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHlgIHRvIHJldHVybiAwLiBUaGUgZXhlY3V0aW9uIGZsb3cgdGhlbiByZXR1cm5zIHRvIGB3eF9yZXNldF9od192ZmAuLi4gc28gaXQgbG9va3MgbGlrZSB3ZSYjMzk7dmUgZ290IGEgaGFyZHdhcmUgbWlzc2luZyBjb25kaXRpb24gaGVyZSB3aGVyZSB0aGVyZSYjMzk7cyBubyBtYWlsYm94IHRvIHJlYWQgZnJvbS4gVGhlIGNvZGUgaGFuZGxlcyB0aGlzIHN0YXRlIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgY29kZSBwYXRoIHRvIHZlcmlmeSBmb3IgcG90ZW50aWFsIGZhdWx0IHRvbGVyYW5jZSBpbiB0aGUgZHJpdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTEyOlx0XHRyZXQgPSB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHkod3gsIG1zZ2J1ZiwgbXNnYnVmLFxuIDExMzpcdFx0XHRcdFx0XHQgIEFSUkFZX1NJWkUobXNnYnVmKSk7XG4gMTE0Olx0XHRpZiAocmV0KVxuIDExNTpcdFx0XHRyZXR1cm4gcmV0O1xuIDExNjpcdFxuIDExNzpcdFx0aWYgKG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykgXHUwMDI2XHUwMDI2XG4gMTE4Olx0XHQgICAgbXNnYnVmWzBdICE9IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfTkFDSykpXG4gMTE5Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDEyMDpcdFxuIDEyMTpcdFx0aWYgKG1zZ2J1ZlswXSA9PSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykpXG4gMTIyOlx0XHRcdGV0aGVyX2FkZHJfY29weSh3eC1cdTAwM2VtYWMucGVybV9hZGRyLCBhZGRyKTtcbiAxMjM6XHRcbiAxMjQ6XHRcdHd4LVx1MDAzZW1hYy5tY19maWx0ZXJfdHlwZSA9IG1zZ2J1ZlszXTtcbiAxMjU6XHRcbiAxMjY6XHRcdHJldHVybiAwO1xuIDEyNzpcdH1cbiAxMjg6XHRFWFBPUlRfU1lNQk9MKHd4X3Jlc2V0X2h3X3ZmKTtcbiAxMjk6XHRcbiAxMzA6XHQvKipcbiAxMzE6XHQgKiAgd3hfc3RvcF9hZGFwdGVyX3ZmIC0gR2VuZXJpYyBzdG9wIFR4L1J4IHVuaXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4NjQ2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRmFpbHVyZSBhbmQgRXhwbG9yaW5nIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIGBtc2didWZbMF1gIGJlaW5nIGAweGZmZmZmZmZmYCBpcyBrZXkuIFRoYXQgdHJpZ2dlcnMgYW4gYC1FSU5WQUxgIHJldHVybiBiZWNhdXNlIGl0IGRvZXNuJiMzOTt0IG1hdGNoIHRoZSBleHBlY3RlZCB2YWx1ZXMgZm9yIGEgcmVzZXQgb3IgYWNrbm93bGVkZ2UgbWVzc2FnZS4gVGhpcyBjYXNjYWRlcywgY2F1c2luZyBgd3hfcmVzZXRfaHdfdmZgLCBgdHhnYmV2Zl9zd19pbml0YCwgYW5kIGV2ZW50dWFsbHkgYHR4Z2JldmZfcHJvYmVgIHRvIGZhaWwsIGFuZCB1bHRpbWF0ZWx5LCB0aGUgbmV0ZGV2IGlzbiYjMzk7dCByZWdpc3RlcmVkLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgY2FuIHN5emthbGxlciBnZXQgYXJvdW5kIHRoaXMgc29tZWhvdz8KClRoZSBpbml0aWFsIHRob3VnaHQgaXMgdXNpbmcgc3l6a2FsbGVyJiMzOTtzIGBzeXpfcGNpX2RldmljZWAsIGFzc3VtaW5nIGl0IGNhbiBtb2NrIE1NSU8gcmVhZHMuIEJ1dCBubywgdGhhdCBqdXN0IGNyZWF0ZXMgYSB2aXJ0dWFsIGRldmljZS4gSG93ZXZlciwgdGhlcmUmIzM5O3MgdGhlIHBvc3NpYmlsaXR5IG9mIFBDSSBmdXp6aW5nIHN1cHBvcnQhIEkgcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IGdlbmVyaWMgUENJIGZ1enppbmcgaW50ZXJjZXB0aW5nIE1NSU8gcmVhZHMuIEl04oCZcyBpbXBvcnRhbnQgdG8gbm90ZSB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoYXQgYW5kIHVzaW5nIGBzeXpfa3ZtX3NldHVwX2NwdWAgd2hpY2ggaXMgS1ZNIHNwZWNpZmljLgoKTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoaXMgb25lPyBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBXYW5neHVuIGhhcmR3YXJlIGlzIGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSBiaXQgb2YgYSBodW5jaCBidXQgaXQmIzM5O3MgcmVhc29uYWJsZSB0byBjb25jbHVkZSBpdCYjMzk7cyB1bmxpa2VseS4gV2FuZ3h1biBpcyBhIHJlbGF0aXZlbHkgb2JzY3VyZSBDaGluZXNlIG5ldHdvcmsgY2FyZCAoTkdCRS9UWEdCRSksIHNvIHByb2JhYmx5IG5vdC4KCkhvd2V2ZXIsIEkgc2hvdWxkIGJlIGNhdXRpb3VzIGFuZCBhc3Nlc3MgYWxsIG9wdGlvbnMuIFN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBpcyB1c2VkIHRvIGZ1enogUENJIGRyaXZlcnMsIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGZ1enplZC4gSWRlYWxseSwgSSYjMzk7ZCBjaGVjayBzeXpib3QgcmVwb3J0cyBmb3IgYHR4Z2JldmZgIG9yIGBuZ2JldmZgLCBidXQsIHdpdGhvdXQgaW50ZXJuZXQgSSBjYW4mIzM5O3QuIEhvd2V2ZXIsIEkgY2FuIGxvb2sgZm9yIHN5emthbGxlciBkZXNjcmlwdGlvbnMgb2YgaXQsIHNvIHRoYXQmIzM5O3MgdGhlIG5leHQgc3RlcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0eGdiZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTY3MAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgU3l6a2FsbGVyIENvdmVyYWdlIG9mIE5ldHdvcmsgRHJpdmVycyoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBTb21ldGhpbmcgaXNuJiMzOTt0IHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGF0IGxlYXN0IGdlbmVyYWxseSwgd291bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYWNjZXNzaWJsZSBmb3IgZGlyZWN0IGluc3BlY3Rpb24uIEJ1dCB0aGUgZmFjdCBJIGRvbiYjMzk7dCByZWFkaWx5IGZpbmQgdGhlbSBtZWFucyBzb21ldGhpbmcgZGlmZmVyZW50IG1pZ2h0IGJlIGluIHBsYXkgZm9yIHRoaXMgc3BlY2lmaWMgdGFzay4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhleSBhcmUuCgpSaWdodCwgc28sIGlmIHRoZXkmIzM5O3JlIG5vdCBleHBsaWNpdGx5IGluIHRoZSBjb3JlIGtlcm5lbCBzb3VyY2Ugd2hlcmUgSSYjMzk7ZCBleHBlY3QsIEkgbmVlZCB0byB3aWRlbiB0aGUgc2VhcmNoLiBMZXQmIzM5O3Mgc3RhcnQgYnkgY2hlY2tpbmcgZm9yIGFueSBtZW50aW9ucyBvZiBgdHhnYmVgIG9yIGBuZ2JlYCB3aXRoaW4gdGhlIGBEb2N1bWVudGF0aW9uL2AgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdpdGggZG9jdW1lbnRhdGlvbiB0aGF0IG1pZ2h0IGNvbnRhaW4gc29tZSBpbmZvcm1hdGlvbiBvciBsaW5rcy4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCBhbmQgaG9wZWZ1bGx5LCB0aGF0IGhlbHBzLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHF1aWNrbHkgd2hldGhlciB0aGV5JiMzOTt2ZSBiZWVuIGRvY3VtZW50ZWQgYW55d2hlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3R4Z2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdD04PUNvbnRlbnRzOlxuLS1cbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0OjYwOiAgIHdhbmd4dW4vdHhnYmVcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q6NjE6ICAgd2FuZ3h1bi90eGdiZXZmXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTYyLSAgIHdhbmd4dW4vbmdiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDA2MgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyBXYW5neHVuIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKgoKT2theSwgc28gdGhlIGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCBXYW5neHVuIGlzIGEgcGh5c2ljYWwgZGV2aWNlLCBhbmQgdGhlcmVmb3JlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhhdCBzZWVtZWQgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSB3YXMgYWJvdXQgdG8gcmV0dXJuIGBmYWxzZWAuIEJ1dCB0aGVuIHRoZXJlJiMzOTtzIHRoYXQgY2F2ZWF0IGFib3V0IHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJdCBzcGFya2VkIGEgdGhvdWdodC4gSWYgc3l6a2FsbGVyLCBjYW4gZnV6eiBQQ0kgZHJpdmVycyBieSBpbnRlcmNlcHRpbmcgTU1JTyBhbmQgcHJvdmlkaW5nIGZ1enplZCB2YWx1ZXMsIHRoZW4gdGhlb3JldGljYWxseSwgaXQgKnNob3VsZCogYmUgcmVhY2hhYmxlLgoKVGhlIHF1ZXN0aW9uIHRoZW4gYmVjYW1lOiBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZG8qIHRoYXQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcyEgVGhlIFBDSSBmdXp6ZXIgdXRpbGl6ZXMgdGhlIG1hcHBpbmcgb2YgQkFScyB0byBtZW1vcnkgcmVnaW9ucywgdHJpZ2dlcmluZyBgdXNlcmZhdWx0ZmRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gVGhpcyBhbGxvd3MgaXQgdG8gcHJvdmlkZSBmdXp6ZWQgdmFsdWVzIGZvciBNTUlPIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBnYW1lIGNoYW5nZXIuIElmIHN5emthbGxlciBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHByb3ZpZGluZyBNTUlPIHJlYWRzLCB0aGVuIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgV2FuZ3h1biwgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoYXQgbG9naWNhbGx5IHNvdW5kPyBBYnNvbHV0ZWx5LiBTeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGVmZmVjdGl2ZWx5IGVuYWJsZXMgdGhpcyB0eXBlIG9mIGZ1enppbmcuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBlbmFibGUgZm9yIFdhbmd4dW4gaXRzZWxmLiBUaGUgcmVsZXZhbnQgb3B0aW9ucyBhcmUgYE5HQkVgLCBgVFhHQkVgLCBgVFhHQkVWRmAsIGFuZCBgTkdCRVZGYC4gSSBhbHNvIG5vdGljZWQgdGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlcyB3aXRoaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvYDogYHd4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF92Zl9jb21tb24uY2AsIGFuZCBgd3hfdmZfbGliLmNgLiBUaGlzIHN0cm9uZ2x5IHN1Z2dlc3RzIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB0aGUgYEtjb25maWdgIGZvciBgbGlid3hgIHRvIHByb3Blcmx5IGRldGVybWluZSB0aGUgY29uZGl0aW9ucyBmb3IgZW5hYmxpbmcgV2FuZ3h1biBlbXVsYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnd4JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS01LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19MSUJXWCkgJiM0Mzs9IGxpYnd4L1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9NYWtlZmlsZS03LW9iai0kKENPTkZJR19UWEdCRSkgJiM0Mzs9IHR4Z2JlL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTElCV1gpICYjNDM7PSBsaWJ3eC5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlLTYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjc6bGlid3gtb2JqcyA6PSB3eF9ody5vIHd4X2xpYi5vIHd4X2V0aHRvb2wubyB3eF9wdHAubyB3eF9tYngubyB3eF9zcmlvdi5vXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyAmIzQzOz0gd3hfdmYubyB3eF92Zl9saWIubyB3eF92Zl9jb21tb24ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy0xMi0jaW5jbHVkZSBcJiMzNDtuZ2JlX2V0aHRvb2wuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmM6OTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jLTEwLSNpbmNsdWRlIFwmIzM0O25nYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTEzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9zcmlvdi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAtI2luY2x1ZGUgXCYjMzQ7bmdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmMtOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYy0xMy0jaW5jbHVkZSBcJiMzNDtuZ2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjEzOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE0OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X21ieC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdmZfY29tbW9uLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTc6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfZXRodG9vbC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O25nYmV2Zl90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jLTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjExOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEyOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNC0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy03LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ldGh0b29sLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjk6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtMTEtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZmRpci5jOjg6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYy0xMS0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmMtMTAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTI6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jLTEzLSNpbmNsdWRlIFwmIzM0O3R4Z2JlX3R5cGUuaFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmMtNi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6NzojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6ODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9saWIuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjEwOiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2h3LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYy0xMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xNC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3R5cGUuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxODojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxOTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfc3Jpb3YuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmMtMjEtI2luY2x1ZGUgXCYjMzQ7dHhnYmVfdHlwZS5oXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0xNS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfdHlwZS5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2xpYi5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3B0cC5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3NyaW92LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbWJ4LmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfaHcuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcJiMzNDt0eGdiZV90eXBlLmhcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC05LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaDoxMDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfdHlwZS5oLTExLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF90eXBlLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9ody5oXCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTM6I2luY2x1ZGUgXCYjMzQ7Li4vbGlid3gvd3hfbGliLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF9tYnguaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE1OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X3ZmLmhcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNjojaW5jbHVkZSBcJiMzNDsuLi9saWJ3eC93eF92Zl9jb21tb24uaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFwmIzM0Oy4uL2xpYnd4L3d4X2V0aHRvb2wuaFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4LSNpbmNsdWRlIFwmIzM0O3R4Z2JldmZfdHlwZS5oXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MzMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlYWNoaW5nIFRoYXQgVkYgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGNvbmZpZ3MgaW52b2x2ZWQgYXJlIGBOR0JFYCwgYFRYR0JFYCwgYFRYR0JFVkZgLCBhbmQgYE5HQkVWRmAuIEkgc2VlIHRoZSBrZXkgYWRkaXRpb24gaXMgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFkZGVkIHRvIGB3eF9ldGh0b29sX29wc192ZmAsIHdoaWNoIGlzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLiBOb3csIGV0aHRvb2wgb3BzIGFyZSBlaXRoZXIgYWNjZXNzZWQgdmlhIGBpb2N0bChTSU9DRVRIVE9PTClgIG9yIG5ldGxpbmsuIFRoZSBjcnVjaWFsIHBvaW50IGlzOiBpZiB0aGUgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdlIGNhbiByZWFjaCBpdC4gSWYgdGhlcmUmIzM5O3Mgbm8gaGFyZHdhcmUgYW5kIHRoZSBkZXZpY2UgaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIHdlIGNhbiYjMzk7dC4KClRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIHN5emthbGxlciBoaXQgdGhpcz8gU3l6a2FsbGVyIGhhcyB0aGlzIGdlbmVyaWMgUENJIGZ1enplciB0aGF0IG1vY2tzIE1NSU8gcmVhZHMuIElmIHN5emthbGxlciBtb2NrcyB0aGVzZSByZWFkcywgdGhlbiBgdHhnYmV2Zl9wcm9iZWAgY2FuIHN1Y2NlZWQsIGV2ZW4gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUhIElmIGB0eGdiZXZmX3Byb2JlYCBzdWNjZWVkcywgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGNhbiBnZXQgY2FsbGVkIHZpYSBldGh0b29sLiBCaW5nbyEgU28sIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgY3JlYXRlcy4KCkJ1dCB3YWl0LCBkb2VzIHN5emthbGxlcuKAmXMgUENJIGZ1enplciAqYWN0dWFsbHkqIHdvcmsgZm9yIHRoaXMgZHJpdmVyPyBZZXMsIGl0JiMzOTtzIGdlbmVyaWMgYW5kIGJpbmRzIHRvIGFueSBQQ0kgZHJpdmVyIG1hdGNoaW5nIHRoZSBmdXp6ZWQgUENJIElEcy4gU28geWVzLCBpdCBjYW4gZGVmaW5pdGVseSByZWFjaCB0aGlzIGNvZGUuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGZsYWcgdGhpcyBhcyBgV29ydGhGdXp6aW5nPXRydWVgLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWdzLiBDbGVhcmx5LCBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIGFyZSBuZWVkZWQgYmVjYXVzZSB0aGV5JiMzOTtyZSBWRiBjb2RlLiBCdXQgaGFuZyBvbiwgdGhlIHBhdGNoIG1vZGlmaWVzIGBsaWJ3eGAsIHdoaWNoIGlzIHNoYXJlZCBieSBhbGwgb2YgdGhvc2UgY29uZmlnczogYE5HQkVgLCBgVFhHQkVgLCBgTkdCRVZGYCwgYFRYR0JFVkZgLiBIb3dldmVyLCB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zIGFkZGVkIGFyZSBmb3IgYHd4X2V0aHRvb2xfb3BzX3ZmYC4gYHd4X2V0aHRvb2xfb3BzX3ZmYCBpcyB1c2VkIHNwZWNpZmljYWxseSBieSBgbmdiZXZmYCBhbmQgYHR4Z2JldmZgLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBJIHNob3VsZCBlbmFibGUgKm9ubHkqIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAuIE5vdywgSSBzaG91bGQgZG91YmxlIGNoZWNrIHdoZXRoZXIgYExJQldYYCBpcyBhIHVzZXItc2VsZWN0YWJsZSBjb25maWcsIG9yIHNpbXBseSBzZWxlY3RlZCBhcyBhIGRlcGVuZGVuY3kgb2YgdGhlIG90aGVycy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExJQldYJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE3PWlmIE5FVF9WRU5ET1JfV0FOR1hVTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTE4LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU0MzIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBIaWRkZW4gQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyB0aGlzIGNvbmZpZ3VyYXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHRob3NlIGBOR0JFYCwgYFRYR0JFYCwgYE5HQkVWRmAsIGFuZCBgVFhHQkVWRmAgZmxhZ3MuIFNpbmNlIHRoaXMgaXMgYSBiaXQgb2YgYSBoaWRkZW4gY29udGV4dCwgSSBzaG91bGQgZXhwbGljaXRseSBtZW50aW9uIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgaW4gbXkgbm90ZXMsIHRvIG1ha2UgdGhlIGFzc29jaWF0aW9uIGNsZWFyLgoKUmlnaHQsIGxldCYjMzk7cyBpZGVudGlmeSB0aGUgZm9jYWwgcG9pbnRzIG9mIHRoaXMgcGF0Y2guIFNlZW1zIGxpa2UgaXQmIzM5O3MgaW50cm9kdWNpbmcgYHd4X3NldF9yaW5ncGFyYW1fdmZgLiBJdCBhbHNvIHRvdWNoZXMgYHd4X3NldF9jb2FsZXNjZWAgYnV0IHRoYXQgb25lIGFscmVhZHkgZXhpc3RzLiBUaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIHRvIGB3eF93cml0ZV9laXRyX3ZmYCwgYHd4X3NldF9yaW5nYCwgYW5kIHJlbW92aW5nIHRoZSBgc3RhdGljYCBrZXl3b3JkIGZyb20gYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYC4gU28sIGJhc2VkIG9uIHRoYXQsIHRoZSBrZXkgc3ltYm9scyBhcHBlYXIgdG8gYmU6CgoqICAgYHd4X3NldF9yaW5ncGFyYW1fdmZgCiogICBgd3hfd3JpdGVfZWl0cl92ZmAKKiAgIGB3eF9zZXRfcmluZ2AKCkkgc2hvdWxkIGp1c3QgZG91YmxlLWNoZWNrIHRoYXQgdGhvc2UgYXJlIHRoZSBleGFjdCBuYW1lcywganVzdCB0byBiZSBzdXJlLiBZZXAsIHRoZSBzaWduYXR1cmUgZm9yIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBpcyBgc3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIC4uLilgIGFuZCBgd3hfd3JpdGVfZWl0cl92ZmAgaXMgYWxzbyBtb2RpZmllZC4gSSBzZWUgdGhhdCBgd3hfc2V0X3JpbmdgIGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpdCBhcHBlYXJzIHRoZSByZXR1cm4gdHlwZSBoYXMgYmVlbiBjaGFuZ2VkIGZyb20gYHZvaWRgIHRvIGBpbnRgLgoKSGFuZyBvbiwgdGhlIGNoYW5nZXMgdG8gYHd4X3NldF9yaW5nYCBzdWdnZXN0IGl0JiMzOTtzIGxpa2VseSBleHBvcnRlZCBhbmQgaXMgdXNlZCBieSBib3RoIHRoZSBQRiBhbmQgdGhlIFZGLiBUaGlzIG9uZSB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBMZXQgbWUgdGFrZSBhIG1vbWVudCB0byByZXZpZXcgYHd4X3NldF9yaW5nYCBpbiBkZXRhaWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9NzY5PXN0YXRpYyBpbnQgd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzgyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6NzgzOnN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzg0LVx0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI1LVx0d3h2Zl9kb3duKHd4KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjgyNjpcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI3LVx0ICogcmV0dXJuaW5nIGFuIGVycm9yLiBUaGUgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGFsbFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgyOS1cdCAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6ODMwOlx0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODMxLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz04NDI9c3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NDgtXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4NDk6XHQuc2V0X3JpbmdwYXJhbVx0XHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NTAtXHQuZ2V0X21zZ2xldmVsXHRcdD0gd3hfZ2V0X21zZ2xldmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM9MzI0OT1FWFBPUlRfU1lNQk9MKHd4X2ZlYXR1cmVzX2NoZWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzI1MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM6MzI1MTppbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzI1Mi1cdFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jLTMzMTUtfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYzozMzE2OkVYUE9SVF9TWU1CT0wod3hfc2V0X3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYy0zMzE3LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3Qgd3hfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oLTM4LVx0XHRcdFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg6Mzk6aW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oLTQwLVx0XHR1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNTgtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6NTk6XHR3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNjAtXHRrdmZyZWUodGVtcF9yaW5nKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYz0zOT1zdGF0aWMgaW50IHR4Z2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy04Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjgzOlx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtODQtXHRrdmZyZWUodGVtcF9yaW5nKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzc0NzkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFJpbmcgQnVmZmVyIGFuZCBDb2FsZXNjZSBTZXR0aW5ncyoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGB3eF9zZXRfcmluZ2AgaXMgZGVmaW5pdGVseSB1c2VkIGJ5IGJvdGggdGhlIFBGIChQaHlzaWNhbCBGdW5jdGlvbikgYW5kIFZGIChWaXJ0dWFsIEZ1bmN0aW9uKSBjb21wb25lbnRzLiBUaGF0IG1lYW5zIG15IGluaXRpYWwgZm9jdXMgc3ltYm9scyBzaG91bGQgYmU6IGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCwgYHd4X3dyaXRlX2VpdHJfdmZgLCBhbmQgYHd4X3NldF9yaW5nYC4KCldhaXQgYSBtaW51dGUsIEkgYWxzbyBub3RpY2VkIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaGFzIGJlZW4gbW9kaWZpZWQuIEFscmlnaHQsIGxldCYjMzk7cyBpbmNsdWRlIGB3eF9zZXRfY29hbGVzY2VgIGluIHRoYXQgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJdCYjMzk7cyBpbXBvcnRhbnQgdG8gYmUgdGhvcm91Z2guCgpUaGVyZWZvcmUsIGZvciBjb25maWd1cmF0aW9ucywgSSBzaG91bGQgY29uc2lkZXIgYE5HQkVWRmAsIGBUWEdCRVZGYCwgYW5kIHRoZW4gc2luY2UgYHd4X3NldF9yaW5nYCBhbmQgbm93IGB3eF9zZXRfY29hbGVzY2VgIGFyZSAqYWxzbyogdXNlZCBieSB0aGUgUEYsIEkgbmVlZCB0byBpbmNsdWRlIGBOR0JFYCBhbmQgYFRYR0JFYCBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJiMzOTt0IG1pc3MgYW55dGhpbmcuCgpOb3csIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYHd4X3NldF9jb2FsZXNjZWAgKmlzKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBQRiBhcyB3ZWxsLiBKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O3ZlIGdvdCB0aGlzIGFsbCBzdHJhaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9MzY5PXN0YXRpYyB2b2lkIHd4X3VwZGF0ZV9yc2Moc3RydWN0IHd4ICp3eClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy00MDItXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo0MDM6aW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDA0LVx0XHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTUwMS19XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo1MDI6RVhQT1JUX1NZTUJPTCh3eF9zZXRfY29hbGVzY2UpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNTAzLVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jPTg0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHd4X2V0aHRvb2xfb3BzX3ZmID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTg1MS1cdC5nZXRfY29hbGVzY2VcdFx0PSB3eF9nZXRfY29hbGVzY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4NTI6XHQuc2V0X2NvYWxlc2NlXHRcdD0gd3hfc2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODUzLVx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuaD0zMz1pbnQgd3hfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmgtMzYtXHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmg6Mzc6aW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmgtMzgtXHRcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmdiZV9ldGh0b29sX29wcyA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtOTEtXHQuZ2V0X2NvYWxlc2NlXHRcdD0gd3hfZ2V0X2NvYWxlc2NlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjkyOlx0LnNldF9jb2FsZXNjZVx0XHQ9IHd4X3NldF9jb2FsZXNjZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy05My1cdC5nZXRfY2hhbm5lbHNcdFx0PSB3eF9nZXRfY2hhbm5lbHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM9NTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHhnYmVfZXRodG9vbF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTc0LVx0LmdldF9jb2FsZXNjZVx0XHQ9IHd4X2dldF9jb2FsZXNjZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjU3NTpcdC5zZXRfY29hbGVzY2VcdFx0PSB3eF9zZXRfY29hbGVzY2UsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy01NzYtXHQuZ2V0X2NoYW5uZWxzXHRcdD0gd3hfZ2V0X2NoYW5uZWxzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODkzMAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IGZ1enppbmcgc3RyYXRlZ3kuIEkgc2VlIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaXMgZGVmaW5pdGVseSB1c2VkIGJ5IGBuZ2JlYCwgYHR4Z2JlYCwgYW5kIGB2ZmAuIFRoYXQgbWVhbnMgSSBuZWVkIHRvIG1ha2Ugc3VyZSBteSBjb25maWdzIGNvdmVyIHRob3NlIGRyaXZlcnMuIFNvLCBJIHNob3VsZCBoYXZlIHRoZXNlIGNvbmZpZ3VyYXRpb25zIGluIG15IGxpc3Q6CgoqICAgYE5HQkVgCiogICBgVFhHQkVgCiogICBgTkdCRVZGYAoqICAgYFRYR0JFVkZgCgpGb3IgbXkgZm9jdXMgc3ltYm9scywgSSYjMzk7bSBnb2luZyB3aXRoOgoKKiAgIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYAoqICAgYHd4X3dyaXRlX2VpdHJfdmZgCiogICBgd3hfc2V0X3JpbmdgCiogICBgd3hfc2V0X2NvYWxlc2NlYAoKSSYjMzk7bSBub3RpbmcgdGhhdCBgd3h2Zl91cF9jb21wbGV0ZWAgYW5kIGB3eHZmX2Rvd25gIGhhdmUgYmVlbiBtb2RpZmllZCwgbWVhbmluZyB0aGV5IGFyZSBubyBsb25nZXIgc3RhdGljLiBIb3dldmVyLCB0aGV5JiMzOTtyZSBoZWxwZXIgZnVuY3Rpb25zLCBzbyBJIGRvbiYjMzk7dCB0aGluayB0aGV5JiMzOTtyZSB3b3J0aCB0aGUgZWZmb3J0IHRvIHB1dCB0aGVtIG9uIHRoZSBmb2N1cyBsaXN0LCBJIGRvbiYjMzk7dCB0aGluayBJIG5lZWQgdG8gZnV6eiB0aGVtLgoKSnVzdCB0byBiZSBzdXJlLCBsZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgb2J2aW91cyBpbiB0aGUgY29uZmlncy4gSSBrbm93IGBQQ0lgIGlzIHJlcXVpcmVkLCBidXQgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIHNwZWNpZnkgdGhhdC4gSSB3aWxsIG5lZWQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgdG8gZXZlbiBzZWUgdGhlIGRyaXZlciBjb25maWdzIGluIHRoZSBmaXJzdCBwbGFjZSwgYnV0IHNpbmNlIGl0JiMzOTtzIGp1c3QgYSBtZW51Y29uZmlnIG9yIGEgYm9vbCwgdGhhdCBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7V2FuZ3h1biBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjE3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5NjA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKgoKT2theSwgc28gSSYjMzk7bSBjb25maWd1cmluZyB0aGlzIG5ldHdvcmsgZHJpdmVyLCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgbmVlZHMgdG8gYmUgZW5hYmxlZC4gSSYjMzk7bGwgbWFrZSBhIG5vdGUgb2YgdGhhdCDigJMgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdGhlIGhhcmR3YXJlIHN1cHBvcnQsIHJpZ2h0PwoKQWxyaWdodCwgbGV0IG1lIG1ha2UgYSBsaXN0IG9mIHRoZSBzcGVjaWZpYyBvcHRpb25zIEkgbmVlZCB0byBsb29rIGF0OgotIGBORVRfVkVORE9SX1dBTkdYVU5gCi0gYE5HQkVgCi0gYFRYR0JFYAotIGBOR0JFVkZgCi0gYFRYR0JFVkZgCgpBaCwgd2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSB0aGF0IGBORVRfVkVORE9SX1dBTkdYVU5gIGlzIGEgYm9vbGVhbi4gSSBhbHNvIG5lZWQgdG8gYmUgY2VydGFpbiB0aGF0IEkgY29uc2lkZXIgdGhlIG90aGVyIG9wdGlvbnMgSSBoYXZlIGxpc3RlZCwgYW5kIGNoZWNrIGlmIHRoZXkgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzLiBUaGlzIGlzIGltcG9ydGFudCB0byBlbnN1cmUgZXZlcnl0aGluZyBpcyBzZXQgdXAgY29ycmVjdGx5IGFuZCBhbnkgbmVjZXNzYXJ5IG1vZHVsZXMgYXJlIGxvYWRlZCBwcm9wZXJseS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIwLVx0dHJpc3RhdGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMTpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMi1cdHNlbGVjdCBQQUdFX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozMDpcdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzE6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzItXHRzZWxlY3QgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtXYW5neHVuKFIpIDEwLzI1LzQwR2JFIFBDSSBFeHByZXNzIGFkYXB0ZXJzIHN1cHBvcnRcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0NTpcdGRlcGVuZHMgb24gUENJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDY6XHRkZXBlbmRzIG9uIENPTU1PTl9DTEtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0NzpcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo0ODpcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00OS1cdHNlbGVjdCBNQVJWRUxMXzEwR19QSFlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02OC1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjY5Olx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo3MDpcdGRlcGVuZHMgb24gUENJX01TSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjcxOlx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTcyLVx0c2VsZWN0IExJQldYXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTg1PWNvbmZpZyBOR0JFVkZcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04Ni1cdHRyaXN0YXRlIFwmIzM0O1dhbmd4dW4oUikgR2JFIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjg3Olx0ZGVwZW5kcyBvbiBQQ0lfTVNJXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODg6XHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctODktXHRzZWxlY3QgTElCV1hcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDA3MTAKCQkJCQkJCW91dHB1dDogMjI3CgkJCQkJCQl0aG91Z2h0czogODEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gVkYgRHJpdmVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHNlZSwgdGhpcyBwYXRjaCBwcmltYXJpbHkgZm9jdXNlcyBvbiBlbmhhbmNpbmcgdGhlIFdhbmd4dW4gVmlydHVhbCBGdW5jdGlvbiAoVkYpIGRyaXZlci4gVGhlIHVzdWFsIHN1c3BlY3RzLCBgUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxgLCBpcyBnZW5lcmFsbHkgZW5hYmxlZCwgYnV0IGl0JiMzOTtzIG5vdCB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQmIzM5O3Mgb2Z0ZW4gcmVxdWlyZWQgZm9yIGBUWEdCRWAgYnV0IGlzbiYjMzk7dCBkaXJlY3RseSByZWxhdGVkIHRvICp0aGlzKiBzcGVjaWZpYyBjaGFuZ2UuIEJ1dCBpdCYjMzk7cyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBzbyBJJiMzOTtsbCBpbmNsdWRlIGEgbm90ZSBhYm91dCBpdCwganVzdCBpbiBjYXNlLiBSZWdhcmRsZXNzLCBpZiBgVFhHQkVgIGZhaWxzLCBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIHdpbGwgc3RpbGwgZnVuY3Rpb24gYXMgZXhwZWN0ZWQuCgpJIG5lZWQgdG8gY29uZmlybSB0aGUgY2hhbmdlcyBhcmUgd2hhdCBJIHRoaW5rIHRoZXkgYXJlLiBGcm9tIHRoZSBsb29rcyBvZiBpdCwgaXQgdXBkYXRlcyBgd3hfc2V0X3JpbmdwYXJhbV92ZmAsIGB3eF93cml0ZV9laXRyX3ZmYCwgYHd4X3NldF9yaW5nYCBhbmQgYHd4X3NldF9jb2FsZXNjZWAuIE5vdyBsZXQmIzM5O3Mgc2VlLCBpdCBhbHNvIG1ha2VzIHRoZSBmdW5jdGlvbnMgYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYCBub24tc3RhdGljLgoKUmlnaHQsIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBpcyBpbiBsaW5lIHdpdGggdGhlIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2UuIGB3eF93cml0ZV9laXRyX3ZmYCBpcyBmaW5lLCBhcyBpcyBgd3hfc2V0X3JpbmdgLCBhbmQgYHd4X3NldF9jb2FsZXNjZWAuCgpTbywgdGhlIGNydXggaXMgc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCkgYW5kIG1vZGlmeWluZyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAoYHd4X3dyaXRlX2VpdHJfdmZgKS4gVGhlIHNoYXJlZCBgd3hfc2V0X3JpbmdgIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGFuIGVycm9yIGNvZGUsIHdoaWNoIGlzIGEgc2Vuc2libGUgY2hhbmdlLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBpbXByb3ZlbWVudHMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCBieSBQQ0kgZnV6emluZywgc28gaXQmIzM5O3Mgd29ydGggZnV6emluZy4KCkxldCBtZSBkb3VibGUgY2hlY2sgdGhhdCBgd3hfc2V0X3JpbmdwYXJhbV92ZmAgaXMsIGluIGZhY3QsIHJlYWNoYWJsZS4gSXQgaXMuIEl0JiMzOTtzIGFzc2lnbmVkIHRvIGAuc2V0X3JpbmdwYXJhbWAgaW4gYHd4X2V0aHRvb2xfb3BzX3ZmYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYG5ldGRldi0mZ3Q7ZXRodG9vbF9vcHNgIGluIGB3eF9zZXRfZXRodG9vbF9vcHNfdmZgLiBgd3hfc2V0X2V0aHRvb2xfb3BzX3ZmYCBpcyB0aGVuIGNhbGxlZCBpbiBgdHhnYmV2Zl9wcm9iZWAgYW5kIGBuZ2JldmZfcHJvYmVgLiBTbywgeWVzLCBpdCYjMzk7cyBhY2Nlc3NpYmxlLgoKT2theSwgSSYjMzk7bSBzYXRpc2ZpZWQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVF9WRU5ET1JfV0FOR1hVTiYjMzQ7LAogICAgJiMzNDtOR0JFJiMzNDssCiAgICAmIzM0O1RYR0JFJiMzNDssCiAgICAmIzM0O05HQkVWRiYjMzQ7LAogICAgJiMzNDtUWEdCRVZGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d3hfc2V0X3JpbmdwYXJhbV92ZiYjMzQ7LAogICAgJiMzNDt3eF93cml0ZV9laXRyX3ZmJiMzNDssCiAgICAmIzM0O3d4X3NldF9yaW5nJiMzNDssCiAgICAmIzM0O3d4X3NldF9jb2FsZXNjZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlciYjMzk7cyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkVUX1ZFTkRPUl9XQU5HWFVOJiMzNDssCiAgICAmIzM0O05HQkUmIzM0OywKICAgICYjMzQ7VFhHQkUmIzM0OywKICAgICYjMzQ7TkdCRVZGJiMzNDssCiAgICAmIzM0O1RYR0JFVkYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3eF9zZXRfcmluZ3BhcmFtX3ZmJiMzNDssCiAgICAmIzM0O3d4X3dyaXRlX2VpdHJfdmYmIzM0OywKICAgICYjMzQ7d3hfc2V0X3JpbmcmIzM0OywKICAgICYjMzQ7d3hfc2V0X2NvYWxlc2NlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJiMzOTtzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTQ6NTIuOTIxNDY1NTU1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU3Mzc4MzY1MjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfV0FOR1hVTlwiLFxuICAgIFwiTkdCRVwiLFxuICAgIFwiVFhHQkVcIixcbiAgICBcIk5HQkVWRlwiLFxuICAgIFwiVFhHQkVWRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInd4X3NldF9yaW5ncGFyYW1fdmZcIixcbiAgICBcInd4X3dyaXRlX2VpdHJfdmZcIixcbiAgICBcInd4X3NldF9yaW5nXCIsXG4gICAgXCJ3eF9zZXRfY29hbGVzY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlcidzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUyLjkyMTQ3MDQ4NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkzODIyNDk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZjc1NzQyMjRiNjcxODU1NGY2NGFjNzkyZDE4OTM4NjQwZGFjMzU1NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAxMCAyMzoxNDo1MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuaW5kZXggNWRmOTcxYWNhOWUzNWYuLjIyMDM3ZjAxNWRlZDE5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcXG5AQCAtOSw2ICs5LDggQEBcXG4gI2luY2x1ZGUgXFxcInd4X2V0aHRvb2wuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInd4X2h3LmhcXFwiXFxuICNpbmNsdWRlIFxcXCJ3eF9saWIuaFxcXCJcXG4rI2luY2x1ZGUgXFxcInd4X3ZmX2NvbW1vbi5oXFxcIlxcbisjaW5jbHVkZSBcXFwid3hfdmZfbGliLmhcXFwiXFxuIFxcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xcbiBcXHRjaGFyIHN0YXRfc3RyaW5nW0VUSF9HU1RSSU5HX0xFTl07XFxuQEAgLTQ4Nyw3ICs0ODksMTAgQEAgaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdC8qIHJ4IG9ubHkgb3IgbWl4ZWQgKi9cXG4gXFx0XFx0XFx0cV92ZWN0b3ItXFx1MDAzZWl0ciA9IHJ4X2l0cl9wYXJhbTtcXG4tXFx0XFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XFxuK1xcdFxcdGlmICh3eC1cXHUwMDNlcGRldi1cXHUwMDNlaXNfdmlydGZuKVxcbitcXHRcXHRcXHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHR3eF93cml0ZV9laXRyKHFfdmVjdG9yKTtcXG4gXFx0fVxcbiBcXG4gXFx0d3hfdXBkYXRlX3JzYyh3eCk7XFxuQEAgLTc3NSw2ICs3ODAsNjUgQEAgc3RhdGljIGludCB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGV0aHRvb2xfcmluZ3BhcmFtICpyaW5nLFxcbitcXHRcXHRcXHQgICAgICAgc3RydWN0IGtlcm5lbF9ldGh0b29sX3JpbmdwYXJhbSAqa2VybmVsX3JpbmcsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHUzMiBuZXdfcnhfY291bnQsIG5ld190eF9jb3VudDtcXG4rXFx0c3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZztcXG4rXFx0aW50IGksIGVyciA9IDA7XFxuK1xcbitcXHRuZXdfdHhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cXHUwMDNldHhfcGVuZGluZywgV1hfTUlOX1RYRCwgV1hfTUFYX1RYRCk7XFxuK1xcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xcbitcXG4rXFx0bmV3X3J4X2NvdW50ID0gY2xhbXBfdCh1MzIsIHJpbmctXFx1MDAzZXJ4X3BlbmRpbmcsIFdYX01JTl9SWEQsIFdYX01BWF9SWEQpO1xcbitcXHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcXG4rXFxuK1xcdGlmIChuZXdfdHhfY291bnQgPT0gd3gtXFx1MDAzZXR4X3JpbmdfY291bnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIG5ld19yeF9jb3VudCA9PSB3eC1cXHUwMDNlcnhfcmluZ19jb3VudClcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHNldF9iaXQoV1hfU1RBVEVfUkVTRVRUSU5HLCB3eC1cXHUwMDNlc3RhdGUpO1xcbitcXG4rXFx0aWYgKCFuZXRpZl9ydW5uaW5nKHd4LVxcdTAwM2VuZXRkZXYpKSB7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3R4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHR3eC1cXHUwMDNldHhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfdHhfY291bnQ7XFxuK1xcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyB3eC1cXHUwMDNlbnVtX3J4X3F1ZXVlczsgaSsrKVxcbitcXHRcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ1tpXS1cXHUwMDNlY291bnQgPSBuZXdfcnhfY291bnQ7XFxuK1xcdFxcdHd4LVxcdTAwM2V0eF9yaW5nX2NvdW50ID0gbmV3X3R4X2NvdW50O1xcbitcXHRcXHR3eC1cXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcXG4rXFxuK1xcdFxcdGdvdG8gY2xlYXJfcmVzZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cXG4rXFx0aSA9IG1heF90KGludCwgd3gtXFx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVxcdTAwM2VudW1fcnhfcXVldWVzKTtcXG4rXFx0dGVtcF9yaW5nID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgd3hfcmluZywgaSk7XFxuK1xcdGlmICghdGVtcF9yaW5nKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gY2xlYXJfcmVzZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdHd4dmZfZG93bih3eCk7XFxuK1xcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxcbitcXHQgKiByZXR1cm5pbmcgYW4gZXJyb3IuIFRoZSBlcnJvciBpbmRpY2F0ZXMgdGhhdCBub3QgYWxsXFxuK1xcdCAqIHJlcXVlc3RlZCByaW5nIHBhcmFtZXRlcnMgY291bGQgYmUgY29uZmlndXJlZC5cXG4rXFx0ICovXFxuK1xcdGVyciA9IHd4X3NldF9yaW5nKHd4LCBuZXdfdHhfY291bnQsIG5ld19yeF9jb3VudCwgdGVtcF9yaW5nKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0d3hfZXJyKHd4LCBcXFwiZmFpbGVkIHRvIHNldCByaW5nIHBhcmFtZXRlcnM6ICVkXFxcIiwgZXJyKTtcXG4rXFx0d3hfY29uZmlndXJlX3ZmKHd4KTtcXG4rXFx0d3h2Zl91cF9jb21wbGV0ZSh3eCk7XFxuK1xcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcbitjbGVhcl9yZXNldDpcXG4rXFx0Y2xlYXJfYml0KFdYX1NUQVRFX1JFU0VUVElORywgd3gtXFx1MDAzZXN0YXRlKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ3eC1cXHUwMDNlcmVzZXRfbG9jayk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuIFxcdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9VU0VDUyB8XFxuIFxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9DT0FMRVNDRV9UWF9NQVhfRlJBTUVTX0lSUSB8XFxuQEAgLTc4Miw4ICs4NDYsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3eF9ldGh0b29sX29wc192ZiA9IHtcXG4gXFx0LmdldF9kcnZpbmZvXFx0XFx0PSB3eF9nZXRfZHJ2aW5mbyxcXG4gXFx0LmdldF9saW5rXFx0XFx0PSBldGh0b29sX29wX2dldF9saW5rLFxcbiBcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gd3hfZ2V0X3JpbmdwYXJhbSxcXG4rXFx0LnNldF9yaW5ncGFyYW1cXHRcXHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXFxuIFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHd4X2dldF9tc2dsZXZlbCxcXG4gXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbitcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4gXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gd3hfZ2V0X2xpbmtfa3NldHRpbmdzX3ZmLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbmluZGV4IGQwNDI1NjdiODEyODRiLi4yZTVkYmE4OGQwNGExMyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xcbkBAIC0zMjQ4LDggKzMyNDgsOCBAQCBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xcbiBcXG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbi1cXHRcXHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcXG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuK1xcdFxcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXFxuIHtcXG4gXFx0aW50IGksIGVyciA9IDA7XFxuIFxcbkBAIC0zMjcxLDcgKzMyNzEsNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXFxuIFxcdFxcdFxcdFxcdFxcdGktLTtcXG4gXFx0XFx0XFx0XFx0XFx0d3hfZnJlZV90eF9yZXNvdXJjZXMoXFx1MDAyNnRlbXBfcmluZ1tpXSk7XFxuIFxcdFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTMyOTksNyArMzI5OSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG4gXFx0XFx0XFx0XFx0XFx0aS0tO1xcbiBcXHRcXHRcXHRcXHRcXHR3eF9mcmVlX3J4X3Jlc291cmNlcyhcXHUwMDI2dGVtcF9yaW5nW2ldKTtcXG4gXFx0XFx0XFx0XFx0fVxcbi1cXHRcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXG5AQCAtMzMxMSw2ICszMzExLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbiBcXG4gXFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XFxuIFxcdH1cXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaFxcbkBAIC0zNiw4ICszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBuZXRkZXZfZmVhdHVyZXNfdCB3eF9mZWF0dXJlc19jaGVjayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcXG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbi1cXHRcXHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XFxuK2ludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbitcXHRcXHR1MzIgbmV3X3J4X2NvdW50LCBzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nKTtcXG4gdm9pZCB3eF9zZXJ2aWNlX2V2ZW50X3NjaGVkdWxlKHN0cnVjdCB3eCAqd3gpO1xcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIHZvaWQgd3hfc2VydmljZV90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxcbmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcXG5AQCAtNDEsNyArNDEsNiBAQFxcbiAjZGVmaW5lIFdYX1ZGX01BWF9SWF9RVUVVRVMgICAgICA0XFxuIFxcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgKyAoNCAqIChpKSkpIC8qIGk9WzAsMV0gKi9cXG4tI2RlZmluZSBXWF9WWElUUl9NQVNLICAgICAgICAgICAgR0VOTUFTSyg4LCAwKVxcbiAjZGVmaW5lIFdYX1ZYSVRSX0NOVF9XRElTICAgICAgICBCSVQoMzEpXFxuICNkZWZpbmUgV1hfVlhJVkFSX01JU0MgICAgICAgICAgIDB4MjYwXFxuICNkZWZpbmUgV1hfVlhJVkFSKGkpICAgICAgICAgICAgICgweDI0MCArICg0ICogKGkpKSkgLyogaT1bMCwzXSAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xcbmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uY1xcbkBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXFxuIFxcdHdyMzIod3gsIFdYX1ZYSU1DLCB3eC1cXHUwMDNlZWltc19lbmFibGVfbWFzayk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcXG4rdm9pZCB3eHZmX3VwX2NvbXBsZXRlKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0LyogQWx3YXlzIHNldCB0aGUgY2FycmllciBvZmYgKi9cXG4gXFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXFx1MDAzZW5ldGRldik7XFxuQEAgLTMyNCw3ICszMjQsNyBAQCBpbnQgd3h2Zl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIH1cXG4gRVhQT1JUX1NZTUJPTCh3eHZmX29wZW4pO1xcbiBcXG4tc3RhdGljIHZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXFxuK3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHd4LVxcdTAwM2VuZXRkZXY7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaFxcbmluZGV4IGNiYmIxYjE3OGNiMmM1Li5kNDVkNWQ4YWMzYWJkYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uaFxcbkBAIC0xNSw3ICsxNSw5IEBAIHZvaWQgd3hfc2V0X3J4X21vZGVfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuIHZvaWQgd3hfY29uZmlndXJlX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgd3hfc2V0X21hY192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB2b2lkICpwKTtcXG4gdm9pZCB3eHZmX3dhdGNoZG9nX3VwZGF0ZV9saW5rKHN0cnVjdCB3eCAqd3gpO1xcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XFxuIGludCB3eHZmX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldik7XFxuK3ZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpO1xcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcXG4gdm9pZCB3eHZmX2luaXRfc2VydmljZShzdHJ1Y3Qgd3ggKnd4KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuaW5kZXggYWE4YmUwMzY5NTZjMGUuLjczMjViNDc1ZWUxMGNiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXFxuQEAgLTE2LDcgKzE2LDE4IEBAIHZvaWQgd3hfd3JpdGVfZWl0cl92ZihzdHJ1Y3Qgd3hfcV92ZWN0b3IgKnFfdmVjdG9yKVxcbiBcXHRpbnQgdl9pZHggPSBxX3ZlY3Rvci1cXHUwMDNldl9pZHg7XFxuIFxcdHUzMiBpdHJfcmVnO1xcbiBcXG4tXFx0aXRyX3JlZyA9IHFfdmVjdG9yLVxcdTAwM2VpdHIgXFx1MDAyNiBXWF9WWElUUl9NQVNLO1xcbitcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbitcXHRjYXNlIHd4X21hY19zcDpcXG4rXFx0XFx0aXRyX3JlZyA9IHFfdmVjdG9yLVxcdTAwM2VpdHIgXFx1MDAyNiBXWF9TUF9NQVhfRUlUUjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2Ugd3hfbWFjX2FtbDpcXG4rXFx0Y2FzZSB3eF9tYWNfYW1sNDA6XFxuK1xcdFxcdGl0cl9yZWcgPSAocV92ZWN0b3ItXFx1MDAzZWl0ciBcXHUwMDNlXFx1MDAzZSAzKSBcXHUwMDI2IFdYX0FNTF9NQVhfRUlUUjtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdGl0cl9yZWcgPSBxX3ZlY3Rvci1cXHUwMDNlaXRyIFxcdTAwMjYgV1hfRU1fTUFYX0VJVFI7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcbiBcXHQvKiBzZXQgdGhlIFdESVMgYml0IHRvIG5vdCBjbGVhciB0aGUgdGltZXIgYml0cyBhbmQgY2F1c2UgYW5cXG4gXFx0ICogaW1tZWRpYXRlIGFzc2VydGlvbiBvZiB0aGUgaW50ZXJydXB0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUzLjUxNjA5NzQ0M1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTU2NzgzNzIzNTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVF9WRU5ET1JfV0FOR1hVTlwiLFxuICAgIFwiTkdCRVwiLFxuICAgIFwiVFhHQkVcIixcbiAgICBcIk5HQkVWRlwiLFxuICAgIFwiVFhHQkVWRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInd4X3NldF9yaW5ncGFyYW1fdmZcIixcbiAgICBcInd4X3dyaXRlX2VpdHJfdmZcIixcbiAgICBcInd4X3NldF9yaW5nXCIsXG4gICAgXCJ3eF9zZXRfY29hbGVzY2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBXYW5neHVuIFZGIGRldmljZXMgdmlhIGV0aHRvb2wgKHd4X3NldF9yaW5ncGFyYW1fdmYpIGFuZCBtb2RpZmllcyB0aGUgY29hbGVzY2Ugc2V0dGluZyBsb2dpYyB0byBjb3JyZWN0bHkgaGFuZGxlIFZGcyAod3hfd3JpdGVfZWl0cl92ZikuIEl0IGFsc28gbW9kaWZpZXMgdGhlIHNoYXJlZCB3eF9zZXRfcmluZyBmdW5jdGlvbiB0byByZXR1cm4gYW4gZXJyb3IgY29kZSBpbnN0ZWFkIG9mIHZvaWQuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGRyaXZlcidzIGV0aHRvb2wgb3BlcmF0aW9ucyBhbmQgcmluZyBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgdmlhIGV0aHRvb2wgbmV0bGluay9pb2N0bCBpbnRlcmZhY2VzIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggY2FuIGJlIHNpbXVsYXRlZCBieSBzeXprYWxsZXIncyBQQ0kgZnV6emluZyBjYXBhYmlsaXRpZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjc1NzQyMjRiNjcxODU1NGY2NGFjNzkyZDE4OTM4NjQwZGFjMzU1NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjE0OjUxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY1xuaW5kZXggNWRmOTcxYWNhOWUzNWYuLjIyMDM3ZjAxNWRlZDE5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jXG5AQCAtOSw2ICs5LDggQEBcbiAjaW5jbHVkZSBcInd4X2V0aHRvb2wuaFwiXG4gI2luY2x1ZGUgXCJ3eF9ody5oXCJcbiAjaW5jbHVkZSBcInd4X2xpYi5oXCJcbisjaW5jbHVkZSBcInd4X3ZmX2NvbW1vbi5oXCJcbisjaW5jbHVkZSBcInd4X3ZmX2xpYi5oXCJcbiBcbiBzdHJ1Y3Qgd3hfc3RhdHMge1xuIFx0Y2hhciBzdGF0X3N0cmluZ1tFVEhfR1NUUklOR19MRU5dO1xuQEAgLTQ4Nyw3ICs0ODksMTAgQEAgaW50IHd4X3NldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRlbHNlXG4gXHRcdFx0Lyogcnggb25seSBvciBtaXhlZCAqL1xuIFx0XHRcdHFfdmVjdG9yLVx1MDAzZWl0ciA9IHJ4X2l0cl9wYXJhbTtcbi1cdFx0d3hfd3JpdGVfZWl0cihxX3ZlY3Rvcik7XG4rXHRcdGlmICh3eC1cdTAwM2VwZGV2LVx1MDAzZWlzX3ZpcnRmbilcbitcdFx0XHR3eF93cml0ZV9laXRyX3ZmKHFfdmVjdG9yKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHd4X3dyaXRlX2VpdHIocV92ZWN0b3IpO1xuIFx0fVxuIFxuIFx0d3hfdXBkYXRlX3JzYyh3eCk7XG5AQCAtNzc1LDYgKzc4MCw2NSBAQCBzdGF0aWMgaW50IHd4X2dldF9saW5rX2tzZXR0aW5nc192ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBrZXJuZWxfZXRodG9vbF9yaW5ncGFyYW0gKmtlcm5lbF9yaW5nLFxuK1x0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4re1xuK1x0c3RydWN0IHd4ICp3eCA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHR1MzIgbmV3X3J4X2NvdW50LCBuZXdfdHhfY291bnQ7XG4rXHRzdHJ1Y3Qgd3hfcmluZyAqdGVtcF9yaW5nO1xuK1x0aW50IGksIGVyciA9IDA7XG4rXG4rXHRuZXdfdHhfY291bnQgPSBjbGFtcF90KHUzMiwgcmluZy1cdTAwM2V0eF9wZW5kaW5nLCBXWF9NSU5fVFhELCBXWF9NQVhfVFhEKTtcbitcdG5ld190eF9jb3VudCA9IEFMSUdOKG5ld190eF9jb3VudCwgV1hfUkVRX1RYX0RFU0NSSVBUT1JfTVVMVElQTEUpO1xuK1xuK1x0bmV3X3J4X2NvdW50ID0gY2xhbXBfdCh1MzIsIHJpbmctXHUwMDNlcnhfcGVuZGluZywgV1hfTUlOX1JYRCwgV1hfTUFYX1JYRCk7XG4rXHRuZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFdYX1JFUV9SWF9ERVNDUklQVE9SX01VTFRJUExFKTtcbitcbitcdGlmIChuZXdfdHhfY291bnQgPT0gd3gtXHUwMDNldHhfcmluZ19jb3VudCBcdTAwMjZcdTAwMjZcbitcdCAgICBuZXdfcnhfY291bnQgPT0gd3gtXHUwMDNlcnhfcmluZ19jb3VudClcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnd4LVx1MDAzZXJlc2V0X2xvY2spO1xuK1x0c2V0X2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyh3eC1cdTAwM2VuZXRkZXYpKSB7XG4rXHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHd4LVx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcbitcdFx0XHR3eC1cdTAwM2V0eF9yaW5nW2ldLVx1MDAzZWNvdW50ID0gbmV3X3R4X2NvdW50O1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyB3eC1cdTAwM2VudW1fcnhfcXVldWVzOyBpKyspXG4rXHRcdFx0d3gtXHUwMDNlcnhfcmluZ1tpXS1cdTAwM2Vjb3VudCA9IG5ld19yeF9jb3VudDtcbitcdFx0d3gtXHUwMDNldHhfcmluZ19jb3VudCA9IG5ld190eF9jb3VudDtcbitcdFx0d3gtXHUwMDNlcnhfcmluZ19jb3VudCA9IG5ld19yeF9jb3VudDtcbitcbitcdFx0Z290byBjbGVhcl9yZXNldDtcbitcdH1cbitcbitcdC8qIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgdG8gc3RvcmUgcmluZ3MgaW4gKi9cbitcdGkgPSBtYXhfdChpbnQsIHd4LVx1MDAzZW51bV90eF9xdWV1ZXMsIHd4LVx1MDAzZW51bV9yeF9xdWV1ZXMpO1xuK1x0dGVtcF9yaW5nID0ga3ZtYWxsb2Nfb2JqcyhzdHJ1Y3Qgd3hfcmluZywgaSk7XG4rXHRpZiAoIXRlbXBfcmluZykge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIGNsZWFyX3Jlc2V0O1xuK1x0fVxuK1xuK1x0d3h2Zl9kb3duKHd4KTtcbitcdC8qIHd4X3NldF9yaW5nKCkgbWF5IHBhcnRpYWxseSBhcHBseSBjaGFuZ2VzIGJlZm9yZVxuK1x0ICogcmV0dXJuaW5nIGFuIGVycm9yLiBUaGUgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGFsbFxuK1x0ICogcmVxdWVzdGVkIHJpbmcgcGFyYW1ldGVycyBjb3VsZCBiZSBjb25maWd1cmVkLlxuK1x0ICovXG4rXHRlcnIgPSB3eF9zZXRfcmluZyh3eCwgbmV3X3R4X2NvdW50LCBuZXdfcnhfY291bnQsIHRlbXBfcmluZyk7XG4rXHRpZiAoZXJyKVxuK1x0XHR3eF9lcnIod3gsIFwiZmFpbGVkIHRvIHNldCByaW5nIHBhcmFtZXRlcnM6ICVkXCIsIGVycik7XG4rXHR3eF9jb25maWd1cmVfdmYod3gpO1xuK1x0d3h2Zl91cF9jb21wbGV0ZSh3eCk7XG4rXHRrdmZyZWUodGVtcF9yaW5nKTtcbitjbGVhcl9yZXNldDpcbitcdGNsZWFyX2JpdChXWF9TVEFURV9SRVNFVFRJTkcsIHd4LVx1MDAzZXN0YXRlKTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZ3eC1cdTAwM2VyZXNldF9sb2NrKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuc3VwcG9ydGVkX2NvYWxlc2NlX3BhcmFtcyA9IEVUSFRPT0xfQ09BTEVTQ0VfVVNFQ1MgfFxuIFx0XHRcdFx0ICAgICBFVEhUT09MX0NPQUxFU0NFX1RYX01BWF9GUkFNRVNfSVJRIHxcbkBAIC03ODIsOCArODQ2LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XG4gXHQuZ2V0X2RydmluZm9cdFx0PSB3eF9nZXRfZHJ2aW5mbyxcbiBcdC5nZXRfbGlua1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X2xpbmssXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHd4X2dldF9yaW5ncGFyYW0sXG4rXHQuc2V0X3JpbmdwYXJhbVx0XHQ9IHd4X3NldF9yaW5ncGFyYW1fdmYsXG4gXHQuZ2V0X21zZ2xldmVsXHRcdD0gd3hfZ2V0X21zZ2xldmVsLFxuIFx0LmdldF9jb2FsZXNjZVx0XHQ9IHd4X2dldF9jb2FsZXNjZSxcbitcdC5zZXRfY29hbGVzY2VcdFx0PSB3eF9zZXRfY29hbGVzY2UsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuIFx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYsXG4gfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuaW5kZXggZDA0MjU2N2I4MTI4NGIuLjJlNWRiYTg4ZDA0YTEzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuY1xuQEAgLTMyNDgsOCArMzI0OCw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIEVYUE9SVF9TWU1CT0wod3hfZmVhdHVyZXNfY2hlY2spO1xuIFxuLXZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbi1cdFx0IHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4rXHRcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpXG4ge1xuIFx0aW50IGksIGVyciA9IDA7XG4gXG5AQCAtMzI3MSw3ICszMjcxLDcgQEAgdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuIFx0XHRcdFx0XHRpLS07XG4gXHRcdFx0XHRcdHd4X2ZyZWVfdHhfcmVzb3VyY2VzKFx1MDAyNnRlbXBfcmluZ1tpXSk7XG4gXHRcdFx0XHR9XG4tXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHRcdH1cbiBcdFx0fVxuIFxuQEAgLTMyOTksNyArMzI5OSw3IEBAIHZvaWQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcbiBcdFx0XHRcdFx0aS0tO1xuIFx0XHRcdFx0XHR3eF9mcmVlX3J4X3Jlc291cmNlcyhcdTAwMjZ0ZW1wX3JpbmdbaV0pO1xuIFx0XHRcdFx0fVxuLVx0XHRcdFx0cmV0dXJuO1xuK1x0XHRcdFx0cmV0dXJuIGVycjtcbiBcdFx0XHR9XG4gXHRcdH1cbiBcbkBAIC0zMzExLDYgKzMzMTEsNyBAQCB2b2lkIHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4gXG4gXHRcdHd4LVx1MDAzZXJ4X3JpbmdfY291bnQgPSBuZXdfcnhfY291bnQ7XG4gXHR9XG4rXHRyZXR1cm4gMDtcbiB9XG4gRVhQT1JUX1NZTUJPTCh3eF9zZXRfcmluZyk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbmluZGV4IGFlZDZlYThjZjBkNjRhLi5iYzY3MTc4Njk3OGU1NCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmhcbkBAIC0zNiw4ICszNiw4IEBAIG5ldGRldl9mZWF0dXJlc190IHd4X2ZpeF9mZWF0dXJlcyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIG5ldGRldl9mZWF0dXJlc190IHd4X2ZlYXR1cmVzX2NoZWNrKHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICBuZXRkZXZfZmVhdHVyZXNfdCBmZWF0dXJlcyk7XG4tdm9pZCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxuLVx0XHQgdTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XG4raW50IHd4X3NldF9yaW5nKHN0cnVjdCB3eCAqd3gsIHUzMiBuZXdfdHhfY291bnQsXG4rXHRcdHUzMiBuZXdfcnhfY291bnQsIHN0cnVjdCB3eF9yaW5nICp0ZW1wX3JpbmcpO1xuIHZvaWQgd3hfc2VydmljZV9ldmVudF9zY2hlZHVsZShzdHJ1Y3Qgd3ggKnd4KTtcbiB2b2lkIHd4X3NlcnZpY2VfZXZlbnRfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gdm9pZCB3eF9zZXJ2aWNlX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmhcbmluZGV4IGViNmNhM2ZlNGU5N2I2Li5iNjRhNGRlMDg5ZjJiOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5oXG5AQCAtNDEsNyArNDEsNiBAQFxuICNkZWZpbmUgV1hfVkZfTUFYX1JYX1FVRVVFUyAgICAgIDRcbiBcbiAjZGVmaW5lIFdYX1ZYSVRSKGkpICAgICAgICAgICAgICAoMHgyMDAgKyAoNCAqIChpKSkpIC8qIGk9WzAsMV0gKi9cbi0jZGVmaW5lIFdYX1ZYSVRSX01BU0sgICAgICAgICAgICBHRU5NQVNLKDgsIDApXG4gI2RlZmluZSBXWF9WWElUUl9DTlRfV0RJUyAgICAgICAgQklUKDMxKVxuICNkZWZpbmUgV1hfVlhJVkFSX01JU0MgICAgICAgICAgIDB4MjYwXG4gI2RlZmluZSBXWF9WWElWQVIoaSkgICAgICAgICAgICAgKDB4MjQwICsgKDQgKiAoaSkpKSAvKiBpPVswLDNdICovXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbmluZGV4IDBkMmRiOGQzOGNkNTZjLi4yNmRlNzhlOWE2OWVmZiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmNcbkBAIC0yNjksNyArMjY5LDcgQEAgc3RhdGljIHZvaWQgd3h2Zl9pcnFfZW5hYmxlKHN0cnVjdCB3eCAqd3gpXG4gXHR3cjMyKHd4LCBXWF9WWElNQywgd3gtXHUwMDNlZWltc19lbmFibGVfbWFzayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eClcbiB7XG4gXHQvKiBBbHdheXMgc2V0IHRoZSBjYXJyaWVyIG9mZiAqL1xuIFx0bmV0aWZfY2Fycmllcl9vZmYod3gtXHUwMDNlbmV0ZGV2KTtcbkBAIC0zMjQsNyArMzI0LDcgQEAgaW50IHd4dmZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIH1cbiBFWFBPUlRfU1lNQk9MKHd4dmZfb3Blbik7XG4gXG4tc3RhdGljIHZvaWQgd3h2Zl9kb3duKHN0cnVjdCB3eCAqd3gpXG4rdm9pZCB3eHZmX2Rvd24oc3RydWN0IHd4ICp3eClcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gd3gtXHUwMDNlbmV0ZGV2O1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfY29tbW9uLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5pbmRleCBjYmJiMWIxNzhjYjJjNS4uZDQ1ZDVkOGFjM2FiZGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXG5AQCAtMTUsNyArMTUsOSBAQCB2b2lkIHd4X3NldF9yeF9tb2RlX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpO1xuIHZvaWQgd3hfY29uZmlndXJlX3ZmKHN0cnVjdCB3eCAqd3gpO1xuIGludCB3eF9zZXRfbWFjX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQgKnApO1xuIHZvaWQgd3h2Zl93YXRjaGRvZ191cGRhdGVfbGluayhzdHJ1Y3Qgd3ggKnd4KTtcbit2b2lkIHd4dmZfdXBfY29tcGxldGUoc3RydWN0IHd4ICp3eCk7XG4gaW50IHd4dmZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbit2b2lkIHd4dmZfZG93bihzdHJ1Y3Qgd3ggKnd4KTtcbiBpbnQgd3h2Zl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KTtcbiB2b2lkIHd4dmZfaW5pdF9zZXJ2aWNlKHN0cnVjdCB3eCAqd3gpO1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmZfbGliLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5pbmRleCBhYThiZTAzNjk1NmMwZS4uNzMyNWI0NzVlZTEwY2IgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2xpYi5jXG5AQCAtMTYsNyArMTYsMTggQEAgdm9pZCB3eF93cml0ZV9laXRyX3ZmKHN0cnVjdCB3eF9xX3ZlY3RvciAqcV92ZWN0b3IpXG4gXHRpbnQgdl9pZHggPSBxX3ZlY3Rvci1cdTAwM2V2X2lkeDtcbiBcdHUzMiBpdHJfcmVnO1xuIFxuLVx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfVlhJVFJfTUFTSztcbitcdHN3aXRjaCAod3gtXHUwMDNlbWFjLnR5cGUpIHtcbitcdGNhc2Ugd3hfbWFjX3NwOlxuK1x0XHRpdHJfcmVnID0gcV92ZWN0b3ItXHUwMDNlaXRyIFx1MDAyNiBXWF9TUF9NQVhfRUlUUjtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIHd4X21hY19hbWw6XG4rXHRjYXNlIHd4X21hY19hbWw0MDpcbitcdFx0aXRyX3JlZyA9IChxX3ZlY3Rvci1cdTAwM2VpdHIgXHUwMDNlXHUwMDNlIDMpIFx1MDAyNiBXWF9BTUxfTUFYX0VJVFI7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0aXRyX3JlZyA9IHFfdmVjdG9yLVx1MDAzZWl0ciBcdTAwMjYgV1hfRU1fTUFYX0VJVFI7XG4rXHRcdGJyZWFrO1xuK1x0fVxuIFxuIFx0Lyogc2V0IHRoZSBXRElTIGJpdCB0byBub3QgY2xlYXIgdGhlIHRpbWVyIGJpdHMgYW5kIGNhdXNlIGFuXG4gXHQgKiBpbW1lZGlhdGUgYXNzZXJ0aW9uIG9mIHRoZSBpbnRlcnJ1cHRcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjUzLjUxNjA5OTY3M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1Nzg4MzU0NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgV2FuZ3h1biBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdG91Y2hlcyBhIGJ1bmNoIG9mIGZpbGVzIHJlbGF0ZWQgdG8gdGhlIFdhbmd4dW4gRXRoZXJuZXQgZHJpdmVyLiBTcGVjaWZpY2FsbHksIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuY2AsIGB3eF9saWIuY2AsIGB3eF9saWIuaGAsIGB3eF92Zi5oYCwgYHd4X3ZmX2NvbW1vbi5jYCwgYHd4X3ZmX2NvbW1vbi5oYCwgYW5kIGB3eF92Zl9saWIuY2AuIFNlZW1zIGxpa2UgdGhleSdyZSBhZGRpbmcgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFuZCBtb2RpZnlpbmcgYHd4X3NldF9jb2FsZXNjZWAgdG8gaW52b2tlIGB3eF93cml0ZV9laXRyX3ZmYCBmb3IgVmlydHVhbCBGdW5jdGlvbnMgKFZGcykuIFRoZXkndmUgYWxzbyB0d2Vha2VkIGB3eF93cml0ZV9laXRyX3ZmYCBpbiBgd3hfdmZfbGliLmNgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBXYW5neHVuIEV0aGVybmV0IGRyaXZlciwgd2hpY2ggdHlwaWNhbGx5IG1lYW5zIGl0J3MgYSBwaHlzaWNhbCBuZXR3b3JrIGNhcmQsIGEgUENJZSBkZXZpY2UuIFRoZSBxdWVzdGlvbiB0aGF0IGltbWVkaWF0ZWx5IGNvbWVzIHRvIG1pbmQgaXMsIGhvdyBwcmV2YWxlbnQgaXMgdGhpcyBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IElzIGl0IGV2ZW4gcmVsZXZhbnQgaW4gdGhvc2UgZW52aXJvbm1lbnRzPyBBbmQsIG1vcmUgaW1wb3J0YW50bHksIGNhbiB0aGlzIGJlIGZ1enplZD9cblxuSSBrbm93IHN5emthbGxlciBjYW4gaGFuZGxlIGZ1enppbmcgUENJIGRyaXZlcnMsIGJ1dCBpdCdzIHVzdWFsbHkgZ2VhcmVkIHRvd2FyZCBzcGVjaWZpYyBkZXZpY2VzIG9yIG1vcmUgZ2VuZXJpYyBQQ0kgZnV6emluZy4gRm9yIFdhbmd4dW4gc3BlY2lmaWNhbGx5LCBpdCBkZXBlbmRzLCBhbmQgSSBzaG91bGQgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBmb3IgaXQuIEkgc2hvdWxkIHNlYXJjaCBLY29uZmlnIGZvciBgd2FuZ3h1bmAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUyNzksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNDo1OS4wOTQ5Mzc3MThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE4ODM3NDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2FuZ3h1blwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Mjg9Y29uZmlnIE5HQkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zNy1cXHQgIE1vcmUgc3BlY2lmaWMgaW5mb3JtYXRpb24gb24gY29uZmlndXJpbmcgdGhlIGRyaXZlciBpcyBpblxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzozODpcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC93YW5neHVuL25nYmUucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMzktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9NDM9Y29uZmlnIFRYR0JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjEtXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NjI6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy02My1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz02Nz1jb25maWcgVFhHQkVWRlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTc5LVxcdCAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlvbiBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjgwOlxcdCAgXFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi5yc3RcXHUwMDNlLlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz04NT1jb25maWcgTkdCRVZGXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTUtXFx0ICBNb3JlIHNwZWNpZmljIGluZm9ybWF0aW9uIG9uIGNvbmZpZ3VyaW5nIHRoZSBkcml2ZXIgaXMgaW5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6OTY6XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYucnN0XFx1MDAzZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctOTctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE0OjU5LjE1NjgyOTM4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDAzODQ2OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwgb2YgV2FuZ3h1biBEcml2ZXJzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2UgY29uZmlndXJhdGlvbnM6IE5HQkUsIFRYR0JFLCBUWEdCRVZGLCBOR0JFVkYuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBhcmUgdGhlc2UgV2FuZ3h1biBkcml2ZXJzIGV2ZW4gY292ZXJlZCBieSBzeXprYWxsZXIncyBmdXp6aW5nIGNhcGFiaWxpdGllcz8gSSBrbm93IHN5emthbGxlciBpc24ndCBleGFjdGx5IGJyaW1taW5nIHdpdGggc3BlY2lmaWMgZW11bGF0aW9uIGZvciBXYW5neHVuIGhhcmR3YXJlLiBUaGF0J3MgYSByZWQgZmxhZy4gQnV0IHdhaXQsIGxldCdzIGdvIGJhY2sgYW5kIGNhcmVmdWxseSByZXJlYWQgdGhlIGluc3RydWN0aW9ucy4gQWgsIGhlcmUgaXQgaXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLi4uXCIgVGhpcyBpcyBrZXkuXG5cblRoZSBxdWVzdGlvbiBub3cgYmVjb21lcywgaXMgV2FuZ3h1biBoYXJkd2FyZSAqZW11bGF0ZWQqIGluIFFFTVU/IFRoYXQncyB0aGUgY3J1eCBvZiBpdC4gSSBjYW4ndCBqdXN0IGFzc3VtZSBhbnl0aGluZyBoZXJlLiBJIGRvbid0IGhhdmUgZGlyZWN0IGFjY2VzcyB0byB0aGUgUUVNVSBzb3VyY2UgcmlnaHQgbm93LCBzbyBjaGVja2luZyBmb3IgbWVudGlvbnMgb2YgXCJ3YW5neHVuXCIgaW4gdGhlIGNvZGUgaXMgZGlmZmljdWx0LlxuXG5Ib2xkIG9uLCBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoLiBDYW4gYHd4X3NldF9yaW5ncGFyYW1fdmZgIGFjdHVhbGx5IGJlICpyZWFjaGVkKiB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJdCdzIGFuIGV0aHRvb2wgb3BlcmF0aW9uLCByaWdodD8gQW5kIGV0aHRvb2wgb3BzIGFyZSBjYWxsZWQgb24gbmV0ZGV2cy4gSWYgdGhlIG5ldGRldiBpc24ndCByZWdpc3RlcmVkLCBiZWNhdXNlIHRoZSBQQ0kgcHJvYmUgZmFpbGVkIOKAkyBtZWFuaW5nIG5vIGhhcmR3YXJlIGlzIHByZXNlbnQg4oCTIHRoZW4gdGhvc2UgZXRodG9vbCBvcHMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cblNvLCB0aGUgbmV4dCB0aGluZyBpcyB0byBzZWUgaWYgdGhlIGRyaXZlciBwcm92aWRlcyBhbnkga2luZCBvZiBzb2Z0d2FyZSBlbXVsYXRpb24gb3IgYSBkdW1teSBkZXZpY2UuIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZHJpdmVyJ3MgY29kZWJhc2UuIEknbGwgbmVlZCB0byBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ody5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCdzIHdoZXJlIGFueSBzdWNoIGFic3RyYWN0aW9uIHdvdWxkIGxpa2VseSBiZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NjM3NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTowNC43OTcyMTY0MjFaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA2MDAyMDksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBjaV9yZWdpc3Rlcl9kcml2ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjA0Ljg1NzgyOTYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgxMTEyODA4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKlVucGFja2luZyBEcml2ZXIgUmVnaXN0cmF0aW9uKipcblxuSG1tLCBob2xkIG9uIGEgc2Vjb25kLiBUaGlzIHdob2xlIHByb2Nlc3MgaGluZ2VzIG9uIGhvdyB0aGUgZHJpdmVyIGl0c2VsZiBpcyByZWdpc3RlcmVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGZ1bmRhbWVudGFsIG1lY2hhbmlzbSBmaXJzdC4gSXMgaXQgYSBzdGF0aWMgcmVnaXN0cmF0aW9uIHdpdGhpbiB0aGUgT1Mga2VybmVsPyBPciBpcyB0aGVyZSBzb21lIGR5bmFtaWMgZGlzY292ZXJ5IG1lY2hhbmlzbSBhdCBwbGF5PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGVhY2ggYXBwcm9hY2g/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHRhYmxlIGxvb2t1cCwgb3Igc29tZXRoaW5nIG1vcmUgY29tcGxleCB3aXRoIGRldmljZSBJRHMgYW5kIGRyaXZlciBwcm9iaW5nPyBUaGlzIFwicmVnaXN0cmF0aW9uXCIgc3RlcCBpcyB0aGUgbGluY2hwaW4uIElmIEkgY2FuJ3QgcGluIHRoYXQgZG93biwgSSdtIGdvaW5nIHRvIGhhdmUgYSBoYXJkIHRpbWUgdW5kZXJzdGFuZGluZyB0aGUgd2hvbGUgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdGhlIHNwZWNpZmljcyBvZiB0aGF0IHJlZ2lzdHJhdGlvbiEgVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLCBzbyBob3cgYXJlIHRoZSBkcml2ZXJzIGJlaW5nIGlkZW50aWZpZWQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjA3LjY2ODk1OTU1MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDkwOTAyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb2R1bGVfcGNpX2RyaXZlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM9OTA4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYy05MTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjkxOTptb2R1bGVfcGNpX2RyaXZlcihuZ2JlX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jLTkyMC1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM9MjUxPXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBuZ2JldmZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoyNjE6bW9kdWxlX3BjaV9kcml2ZXIobmdiZXZmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0yNjItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYz05NjU9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JlX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTk3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzo5NzQ6bW9kdWxlX3BjaV9kcml2ZXIodHhnYmVfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy05NzUtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MzE2PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciB0eGdiZXZmX2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjMyNjptb2R1bGVfcGNpX2RyaXZlcih0eGdiZXZmX2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMyNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MDcuNzI5ODc0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjIyNDYzMjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUENJIEV0aGVybmV0IERyaXZlciBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIHRoZXNlIGFyZSBkZWZpbml0ZWx5IFBDSSBkcml2ZXJzIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhlIGtleSBoZXJlIGlzIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLiBJZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCBgcHJvYmVgIHdvbid0IGV2ZW4gYmUgY2FsbGVkLCBhbmQgdGhlIG5ldHdvcmsgZGV2aWNlIHJlZ2lzdHJhdGlvbiB3aWxsIG5ldmVyIGhhcHBlbi4gTXkgcXVlc3Rpb24gaXMsIGNhbiB3ZSBzb21laG93IHJlYWNoIHRoaXMgY29kZSBwYXRoICp3aXRob3V0KiByZWFsIGhhcmR3YXJlP1xuXG5JJ3ZlIHNlZW4gU3l6a2FsbGVyIHV0aWxpemUgdmlydHVhbCBkZXZpY2VzIGZvciBvdGhlciBzdWJzeXN0ZW1zLiBJdCdzIGdvdCBgdmhjaWAgZm9yIEJsdWV0b290aCwgYGR1bW15YCBmb3IgbmV0d29ya2luZywgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGB2a21zYCBmb3IgRFJNLCBhbmQgYHNuZC1kdW1teWAgZm9yIEFMU0EuIEJ1dCBmb3IgUENJIGV0aGVybmV0IGRyaXZlcnMsIGl0J3MgdHlwaWNhbGx5IGEgZGVhZCBlbmQgdW5sZXNzIHRoZXJlJ3MgYSBjdXN0b20gUUVNVSBkZXZpY2Ugb3IgYSBzcGVjaWZpYyBTeXprYWxsZXIgcHNldWRvLWRldmljZS5cblxuV2FpdCwgSSBzZWVtIHRvIHJlY2FsbCBTeXprYWxsZXIgaGF2aW5nIHNvbWV0aGluZyBsaWtlIGBzeXpfcGNpX2RldmljZWAuLi4gYnV0IHRoYXQncyB2ZXJ5IGxpbWl0ZWQsIGlzbid0IGl0PyBJdCdzIHByaW1hcmlseSBnZWFyZWQgdG93YXJkcyBnZW5lcmljIFBDSSBmdXp6aW5nLCBub3QgdGhlIGludHJpY2F0ZSBzZXF1ZW5jZXMgb2YgTU1JTyByZWdpc3RlciByZWFkcyBhbmQgd3JpdGVzIHRoYXQgdGhlc2UgY29tcGxleCBldGhlcm5ldCBkcml2ZXJzIG5lZWQgZm9yIHByb3BlciBpbml0aWFsaXphdGlvbi4gU3BlY2lmaWNhbGx5LCByZWFkaW5nIHRoZSBNQUMgYWRkcmVzcywgY2hlY2tpbmcgdGhlIGxpbmsgc3RhdHVzLCBhbmQgY2hlY2tpbmcgdGhlIGhhcmR3YXJlIHZlcnNpb24gaXMgYSBuZWNlc3Nhcnkgc2VxdWVuY2UuXG5cbk1vc3QgZXRoZXJuZXQgZHJpdmVycyB3cml0dGVuIGZvciBzcGVjaWZpYyBoYXJkd2FyZSwgbGlrZSB0aGUgSW50ZWwgZTEwMDBlLCBpZ2IsIGl4Z2JlLCBvciB0aGUgV2FuZ3h1biBuZ2JlL3R4Z2JlIHZhcmlhbnRzLCB0ZW5kIHRvIGNob2tlIGluIHRoZWlyIGBwcm9iZWAgZnVuY3Rpb24gaWYgdGhleSBkb24ndCBnZXQgdGhlIGNvcnJlY3QgcmVzcG9uc2VzIGZyb20gTU1JTyByZWFkcy5cblxuSSB0aGluayBpdCdzIHRpbWUgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHByb2JlIGZ1bmN0aW9ucyBvZiBgbmdiZXZmYCBhbmQgYHR4Z2JldmZgLiBUaGF0J3Mgd2hlcmUgd2UnbGwgbGlrZWx5IGZpbmQgdGhlIHN0aWNraW5nIHBvaW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODcyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjEzLjk1NDUwODgzMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA0ODI2OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYz0xMDM9c3RhdGljIGludCB0eGdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xODItLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjE4MzogKiB0eGdiZXZmX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTg0LSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTE4OC0gKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxODk6ICogdHhnYmV2Zl9wcm9iZSBpbml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkwLSAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIGFkYXB0ZXIgcHJpdmF0ZSBzdHJ1Y3R1cmUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTkyLSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTkzOnN0YXRpYyBpbnQgdHhnYmV2Zl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTk0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCBfX2Fsd2F5c191bnVzZWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYz0zMTY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHR4Z2JldmZfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jLTMxOC1cXHQuaWRfdGFibGUgPSB0eGdiZXZmX3BjaV90YmwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjMxOTpcXHQucHJvYmUgICAgPSB0eGdiZXZmX3Byb2JlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0zMjAtXFx0LnJlbW92ZSAgID0gdHhnYmV2Zl9yZW1vdmUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjE0LjAxNDk5NzMwMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDIwMzc1ODU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gZXhhbWluaW5nIGB0eGdiZXZmX3Byb2JlYDpcblxuKipBbmFseXppbmcgYHR4Z2JldmZfcHJvYmVgKipcblxuQWxyaWdodCwgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IGdldHRpbmcgYSBoYW5kbGUgb24gYHR4Z2JldmZfcHJvYmVgLiBUaGlzIGlzIHdoZXJlIHRoZSBpbml0aWFsIGRyaXZlciBwcm9iaW5nIGhhcHBlbnMsIHNvIGl0J3MgdGhlIGNyaXRpY2FsIGZpcnN0IHN0ZXAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSAqZG9pbmcqIHRvIGRldGVybWluZSBpZiBhIHNwZWNpZmljIGhhcmR3YXJlIGRldmljZSBpcyBjb21wYXRpYmxlIGFuZCwgaWYgc28sIHByb3Blcmx5IGluaXRpYWxpemUgaXQuIFRoZSBuYW1lIHN1Z2dlc3RzIHRoaXMgaXMgZm9yIHNvbWUgdmFyaWF0aW9uIG9mIHRoZSBgdGdiZWAgZmFtaWx5LCBsaWtlbHkgdGhlIFZGIG9yIHZpcnR1YWwgZnVuY3Rpb24sIHNvIHRoZSBwcmltYXJ5IGNvbmNlcm4gaXMgZ29pbmcgdG8gYmUgYWJvdXQgY29ycmVjdGx5IGlkZW50aWZ5aW5nIHRoZSBoYXJkd2FyZSBhbmQgc2V0dGluZyB1cCB0aGUgdmlydHVhbCBpbnRlcmZhY2UuXG5cbkknbSBwcm9iYWJseSBnb2luZyB0byBiZSBsb29raW5nIGZvciBhIHNlcmllcyBvZiBjaGVja3MgaGVyZTogY2hlY2tzIGZvciB0aGUgZGV2aWNlIElELCB0aGUgUENJIHZlbmRvci9kZXZpY2UgSURzLCBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgcmV2aXNpb24gaW5mb3JtYXRpb24sIGFuZCBwb3NzaWJseSBldmVuIHRoZSBhdmFpbGFiaWxpdHkgb2Ygc3BlY2lmaWMgZmVhdHVyZXMgcmVsYXRlZCB0byB2aXJ0dWFsIGZ1bmN0aW9ucy4gSSBleHBlY3QgdGhlcmUgdG8gYmUgYSBmYWlyIGFtb3VudCBvZiBwbGF0Zm9ybS1zcGVjaWZpYyBjb2RlLCB3aGljaCBpcyBhbHdheXMgYSBoZWFkYWNoZSB0byBtYW5hZ2UuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhvc2UgZGV2aWNlLXNwZWNpZmljIGNoZWNrcyBhcmUuXG5cblRoZW4sIG9uY2UgdGhlIGRldmljZSBpcyBpZGVudGlmaWVkLCBJIGFudGljaXBhdGUgc2VlaW5nIHJlc291cmNlIGFsbG9jYXRpb246IG1lbW9yeSByZWdpb25zLCBpbnRlcnJ1cHQgdmVjdG9ycywgbWF5YmUgZXZlbiBETUEgY2hhbm5lbHMuIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXNlIHJlc291cmNlcyBhcmUgYWxsb2NhdGVkLCBlc3BlY2lhbGx5IGhvdyBjb25mbGljdHMgd2l0aCBvdGhlciBkZXZpY2VzIGFyZSBoYW5kbGVkLiBUaGUgbWVtb3J5IG1hcHBpbmcgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50LCBlbnN1cmluZyB0aGUgdmlydHVhbCBmdW5jdGlvbiBtZW1vcnkgc3BhY2UgaXMgcHJvcGVybHkgbWFwcGVkIGFuZCBhY2Nlc3NpYmxlLlxuXG5GaW5hbGx5LCBpbml0aWFsaXphdGlvbiBvZiB0aGUgZHJpdmVyLXNwZWNpZmljIHN0cnVjdHVyZXMgaXMgdml0YWwuIFRoaXMgaXMgd2hlcmUgdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGlzIGNvbmZpZ3VyZWQuIEkgYW50aWNpcGF0ZSBzZWVpbmcgdGhlIGFsbG9jYXRpb24gYW5kIHNldHVwIG9mIHRoZSBgbmV0X2RldmljZWAgc3RydWN0dXJlIGFuZCB0aGUgY29uZmlndXJhdGlvbiBvZiBhbnkgaW50ZXJuYWwgZHJpdmVyIGRhdGEgc3RydWN0dXJlcy4gSSdsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzcGVjaWZpYyBpbml0aWFsaXphdGlvbiBzdGVwcyByZWxhdGVkIHRvIHRoZSBWRidzIHZpcnR1YWwgZnVuY3Rpb25zIGFuZCByZXNvdXJjZXMuIEknbGwgd2FudCB0byBzZWUgaG93IGludGVycnVwdHMgYXJlIGhhbmRsZWQgYW5kIHdoZXRoZXIgdGhlcmUncyBhbnkgZGVmZXJyZWQgaW5pdGlhbGl6YXRpb24gdGhhdCBtaWdodCBoYXBwZW4gYWZ0ZXIgdGhlIHByb2JlIGNvbXBsZXRlcy4gSSBtaWdodCBldmVuIGZpbmQgc29tZSBoaW50cyBhYm91dCBlcnJvciBoYW5kbGluZyBpbiBjYXNlIG9mIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGEgZ29vZCBpbmRpY2F0b3Igb2YgaG93IHdlbGwgdGhpcyBkcml2ZXIgaGFuZGxlcyB0aGVzZSBjb3JlIHRhc2tzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTUwLCJPdXRwdXRUb2tlbnMiOjUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MTguNDM1Mzc1NjhaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxOTM6XFx0c3RhdGljIGludCB0eGdiZXZmX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbiAxOTQ6XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkIF9fYWx3YXlzX3VudXNlZCAqZW50KVxcbiAxOTU6XFx0e1xcbiAxOTY6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gMTk3OlxcdFxcdHN0cnVjdCB3eCAqd3ggPSBOVUxMO1xcbiAxOTg6XFx0XFx0aW50IGVycjtcXG4gMTk5OlxcdFxcbiAyMDA6XFx0XFx0ZXJyID0gcGNpX2VuYWJsZV9kZXZpY2VfbWVtKHBkZXYpO1xcbiAyMDE6XFx0XFx0aWYgKGVycilcXG4gMjAyOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDIwMzpcXHRcXG4gMjA0OlxcdFxcdGVyciA9IGRtYV9zZXRfbWFza19hbmRfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgRE1BX0JJVF9NQVNLKDY0KSk7XFxuIDIwNTpcXHRcXHRpZiAoZXJyKSB7XFxuIDIwNjpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIwNzpcXHRcXHRcXHRcXHRcXFwiTm8gdXNhYmxlIERNQSBjb25maWd1cmF0aW9uLCBhYm9ydGluZ1xcXFxuXFxcIik7XFxuIDIwODpcXHRcXHRcXHRnb3RvIGVycl9wY2lfZGlzYWJsZV9kZXY7XFxuIDIwOTpcXHRcXHR9XFxuIDIxMDpcXHRcXG4gMjExOlxcdFxcdGVyciA9IHBjaV9yZXF1ZXN0X3NlbGVjdGVkX3JlZ2lvbnMocGRldixcXG4gMjEyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIHBjaV9zZWxlY3RfYmFycyhwZGV2LCBJT1JFU09VUkNFX01FTSksXFxuIDIxMzpcXHRcXHRcXHRcXHRcXHRcXHQgICBkZXZfZHJpdmVyX3N0cmluZyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KSk7XFxuIDIxNDpcXHRcXHRpZiAoZXJyKSB7XFxuIDIxNTpcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIxNjpcXHRcXHRcXHRcXHRcXFwicGNpX3JlcXVlc3Rfc2VsZWN0ZWRfcmVnaW9ucyBmYWlsZWQgMHgleFxcXFxuXFxcIiwgZXJyKTtcXG4gMjE3OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9kaXNhYmxlX2RldjtcXG4gMjE4OlxcdFxcdH1cXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0cGNpX3NldF9tYXN0ZXIocGRldik7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdFxcdG5ldGRldiA9IGRldm1fYWxsb2NfZXRoZXJkZXZfbXFzKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDIyMzpcXHRcXHRcXHRcXHRcXHRcXHQgc2l6ZW9mKHN0cnVjdCB3eCksXFxuIDIyNDpcXHRcXHRcXHRcXHRcXHRcXHQgVFhHQkVWRl9NQVhfVFhfUVVFVUVTLFxcbiAyMjU6XFx0XFx0XFx0XFx0XFx0XFx0IFRYR0JFVkZfTUFYX1JYX1FVRVVFUyk7XFxuIDIyNjpcXHRcXHRpZiAoIW5ldGRldikge1xcbiAyMjc6XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjI4OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDIyOTpcXHRcXHR9XFxuIDIzMDpcXHRcXG4gMjMxOlxcdFxcdFNFVF9ORVRERVZfREVWKG5ldGRldiwgXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIDIzMjpcXHRcXG4gMjMzOlxcdFxcdHd4ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4gMjM0OlxcdFxcdHd4LVxcdTAwM2VuZXRkZXYgPSBuZXRkZXY7XFxuIDIzNTpcXHRcXHR3eC1cXHUwMDNlcGRldiA9IHBkZXY7XFxuIDIzNjpcXHRcXG4gMjM3OlxcdFxcdHd4LVxcdTAwM2Vtc2dfZW5hYmxlID0gbmV0aWZfbXNnX2luaXQoLTEsIE5FVElGX01TR19EUlYgfFxcbiAyMzg6XFx0XFx0XFx0XFx0XFx0XFx0TkVUSUZfTVNHX1BST0JFIHwgTkVUSUZfTVNHX0xJTkspO1xcbiAyMzk6XFx0XFx0d3gtXFx1MDAzZWh3X2FkZHIgPSBkZXZtX2lvcmVtYXAoXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMjQwOlxcdFxcdFxcdFxcdFxcdCAgIHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKSxcXG4gMjQxOlxcdFxcdFxcdFxcdFxcdCAgIHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCkpO1xcbiAyNDI6XFx0XFx0aWYgKCF3eC1cXHUwMDNlaHdfYWRkcikge1xcbiAyNDM6XFx0XFx0XFx0ZXJyID0gLUVJTztcXG4gMjQ0OlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDI0NTpcXHRcXHR9XFxuIDI0NjpcXHRcXG4gMjQ3OlxcdFxcdHd4LVxcdTAwM2ViNF9hZGRyID0gZGV2bV9pb3JlbWFwKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsXFxuIDI0ODpcXHRcXHRcXHRcXHRcXHQgICBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgNCksXFxuIDI0OTpcXHRcXHRcXHRcXHRcXHQgICBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDQpKTtcXG4gMjUwOlxcdFxcdGlmICghd3gtXFx1MDAzZWI0X2FkZHIpIHtcXG4gMjUxOlxcdFxcdFxcdGVyciA9IC1FSU87XFxuIDI1MjpcXHRcXHRcXHRnb3RvIGVycl9wY2lfcmVsZWFzZV9yZWdpb25zO1xcbiAyNTM6XFx0XFx0fVxcbiAyNTQ6XFx0XFxuIDI1NTpcXHRcXHR3eC1cXHUwMDNlZHJpdmVyX25hbWUgPSBLQlVJTERfTU9ETkFNRTtcXG4gMjU2OlxcdFxcdHd4X3NldF9ldGh0b29sX29wc192ZihuZXRkZXYpO1xcbiAyNTc6XFx0XFx0bmV0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnR4Z2JldmZfbmV0ZGV2X29wcztcXG4gMjU4OlxcdFxcbiAyNTk6XFx0XFx0Lyogc2V0dXAgdGhlIHByaXZhdGUgc3RydWN0dXJlICovXFxuIDI2MDpcXHRcXHRlcnIgPSB0eGdiZXZmX3N3X2luaXQod3gpO1xcbiAyNjE6XFx0XFx0aWYgKGVycilcXG4gMjYyOlxcdFxcdFxcdGdvdG8gZXJyX3BjaV9yZWxlYXNlX3JlZ2lvbnM7XFxuIDI2MzpcXHRcXG4gMjY0OlxcdFxcdG5ldGRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9ISUdIRE1BO1xcbiAyNjU6XFx0XFxuIDI2NjpcXHRcXHRldGhfaHdfYWRkcl9zZXQobmV0ZGV2LCB3eC1cXHUwMDNlbWFjLnBlcm1fYWRkcik7XFxuIDI2NzpcXHRcXHRldGhlcl9hZGRyX2NvcHkobmV0ZGV2LVxcdTAwM2VwZXJtX2FkZHIsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIDI2ODpcXHRcXG4gMjY5OlxcdFxcdHd4dmZfaW5pdF9zZXJ2aWNlKHd4KTtcXG4gMjcwOlxcdFxcdGVyciA9IHd4X2luaXRfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIDI3MTpcXHRcXHRpZiAoZXJyKVxcbiAyNzI6XFx0XFx0XFx0Z290byBlcnJfZnJlZV9zd19pbml0O1xcbiAyNzM6XFx0XFxuIDI3NDpcXHRcXHR3eF9nZXRfZndfdmVyc2lvbl92Zih3eCk7XFxuIDI3NTpcXHRcXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0ZGV2KTtcXG4gMjc2OlxcdFxcdGlmIChlcnIpXFxuIDI3NzpcXHRcXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4gMjc4OlxcdFxcbiAyNzk6XFx0XFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHd4KTtcXG4gMjgwOlxcdFxcdG5ldGlmX3R4X3N0b3BfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiAyODE6XFx0XFxuIDI4MjpcXHRcXHRyZXR1cm4gMDtcXG4gMjgzOlxcdFxcbiAyODQ6XFx0ZXJyX3JlZ2lzdGVyOlxcbiAyODU6XFx0XFx0d3hfY2xlYXJfaW50ZXJydXB0X3NjaGVtZSh3eCk7XFxuIDI4NjpcXHRlcnJfZnJlZV9zd19pbml0OlxcbiAyODc6XFx0XFx0dGltZXJfZGVsZXRlX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3RpbWVyKTtcXG4gMjg4OlxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnd4LVxcdTAwM2VzZXJ2aWNlX3Rhc2spO1xcbiAyODk6XFx0XFx0a2ZyZWUod3gtXFx1MDAzZXZmaW5mbyk7XFxuIDI5MDpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIDI5MTpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gMjkyOlxcdGVycl9wY2lfcmVsZWFzZV9yZWdpb25zOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToxOC40MzU0NjU5NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjc5NTA4OTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgSW5pdGlhbGl6YXRpb24gRmxvdyoqXG5cbk9rYXksIHNvIEkgc2VlIHRoZSBleGVjdXRpb24gaXMgaGl0dGluZyBgdHhnYmV2Zl9zd19pbml0YC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHNvZnR3YXJlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlIG9mIHRoZSBJbnRlbCBYNzEwL1hMNzEwIHZpcnR1YWwgZnVuY3Rpb24gZHJpdmVyLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhhdCBmdW5jdGlvbi4gTGV0J3Mgc2VlIHdoYXQgaXQncyBkb2luZyDigJMgd2hlcmUgdGhlIGtleSBzdHJ1Y3R1cmVzIGFyZSBhbGxvY2F0ZWQgYW5kIHBvcHVsYXRlZCwgd2hhdCBoYXJkd2FyZSByZWdpc3RlcnMgaXQncyB0b3VjaGluZywgYW5kIHdoYXQgcmVzb3VyY2UgbWFuYWdlbWVudCBzdHJhdGVnaWVzIGFyZSBiZWluZyBpbXBsZW1lbnRlZCBkdXJpbmcgdGhlIHNldHVwIHBoYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGRyaXZlciBzZXRzIHVwIHRoZSBzaGFyZWQgbWVtb3J5IHJlZ2lvbnMsIGluaXRpYWxpemVzIHRoZSBxdWV1ZXMsIGFuZCBjb25maWd1cmVzIHRoZSB2YXJpb3VzIGludGVycnVwdCB2ZWN0b3JzLiBTcGVjaWZpY2FsbHksIEknbSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUgdmlydHVhbCBmdW5jdGlvbiBhbmQgdGhlIHBoeXNpY2FsIGZ1bmN0aW9uLCBhbmQgaG93IHRoZSBkcml2ZXIgZW5zdXJlcyBwcm9wZXIgaXNvbGF0aW9uIGFuZCByZXNvdXJjZSBhbGxvY2F0aW9uLiBUaW1lIHRvIHN0ZXAgdGhyb3VnaCB0aGUgY29kZSBhbmQgZXhhbWluZSB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzIGFuZCByZWdpc3RlciBhY2Nlc3NlcyB3aXRoaW4gYHR4Z2JldmZfc3dfaW5pdGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMTk5LCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyMi4xMTQ5NzczMzVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEwMTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDMsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxMDM6XFx0c3RhdGljIGludCB0eGdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4gMTA0OlxcdHtcXG4gMTA1OlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSB3eC1cXHUwMDNlbmV0ZGV2O1xcbiAxMDY6XFx0XFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB3eC1cXHUwMDNlcGRldjtcXG4gMTA3OlxcdFxcdGludCBlcnI7XFxuIDEwODpcXHRcXG4gMTA5OlxcdFxcdC8qIEluaXRpYWxpemUgcGNpZSBpbmZvIGFuZCBjb21tb24gY2FwYWJpbGl0eSBmbGFncyAqL1xcbiAxMTA6XFx0XFx0ZXJyID0gd3hfc3dfaW5pdCh3eCk7XFxuIDExMTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMTEyOlxcdFxcdFxcdGdvdG8gZXJyX3d4X3N3X2luaXQ7XFxuIDExMzpcXHRcXG4gMTE0OlxcdFxcdC8qIEluaXRpYWxpemUgdGhlIG1haWxib3ggKi9cXG4gMTE1OlxcdFxcdGVyciA9IHd4X2luaXRfbWJ4X3BhcmFtc192Zih3eCk7XFxuIDExNjpcXHRcXHRpZiAoZXJyKVxcbiAxMTc6XFx0XFx0XFx0Z290byBlcnJfaW5pdF9tYnhfcGFyYW1zO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQvKiBtYXggcV92ZWN0b3JzICovXFxuIDEyMDpcXHRcXHR3eC1cXHUwMDNlbWFjLm1heF9tc2l4X3ZlY3RvcnMgPSBUWEdCRVZGX01BWF9NU0lYX1ZFQ1RPUlM7XFxuIDEyMTpcXHRcXHQvKiBJbml0aWFsaXplIHRoZSBkZXZpY2UgdHlwZSAqL1xcbiAxMjI6XFx0XFx0dHhnYmV2Zl9pbml0X3R5cGVfY29kZSh3eCk7XFxuIDEyMzpcXHRcXHQvKiBsb2NrIHRvIHByb3RlY3QgbWFpbGJveCBhY2Nlc3NlcyAqL1xcbiAxMjQ6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnd4LVxcdTAwM2VtYngubWJ4X2xvY2spO1xcbiAxMjU6XFx0XFxuIDEyNjpcXHRcXHRlcnIgPSB3eF9yZXNldF9od192Zih3eCk7XFxuIDEyNzpcXHRcXHRpZiAoZXJyKSB7XFxuIDEyODpcXHRcXHRcXHR3eF9lcnIod3gsIFxcXCJQRiBzdGlsbCBpbiByZXNldCBzdGF0ZS4gSXMgdGhlIFBGIGludGVyZmFjZSB1cD9cXFxcblxcXCIpO1xcbiAxMjk6XFx0XFx0XFx0Z290byBlcnJfcmVzZXRfaHc7XFxuIDEzMDpcXHRcXHR9XFxuIDEzMTpcXHRcXHR3eF9pbml0X2h3X3ZmKHd4KTtcXG4gMTMyOlxcdFxcdHd4X25lZ290aWF0ZV9hcGlfdmYod3gpO1xcbiAxMzM6XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcih3eC1cXHUwMDNlbWFjLmFkZHIpKVxcbiAxMzQ6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldixcXG4gMTM1OlxcdFxcdFxcdFxcdCBcXFwiTUFDIGFkZHJlc3Mgbm90IGFzc2lnbmVkIGJ5IGFkbWluaXN0cmF0b3IuXFxcXG5cXFwiKTtcXG4gMTM2OlxcdFxcdGV0aF9od19hZGRyX3NldChuZXRkZXYsIHd4LVxcdTAwM2VtYWMuYWRkcik7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtXFx1MDAzZWRldl9hZGRyKSkge1xcbiAxMzk6XFx0XFx0XFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIkFzc2lnbmluZyByYW5kb20gTUFDIGFkZHJlc3NcXFxcblxcXCIpO1xcbiAxNDA6XFx0XFx0XFx0ZXRoX2h3X2FkZHJfcmFuZG9tKG5ldGRldik7XFxuIDE0MTpcXHRcXHRcXHRldGhlcl9hZGRyX2NvcHkod3gtXFx1MDAzZW1hYy5hZGRyLCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4gMTQyOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weSh3eC1cXHUwMDNlbWFjLnBlcm1fYWRkciwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIDE0MzpcXHRcXHR9XFxuIDE0NDpcXHRcXG4gMTQ1OlxcdFxcdHd4LVxcdTAwM2VtYWMubWF4X3R4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1RYX1FVRVVFUztcXG4gMTQ2OlxcdFxcdHd4LVxcdTAwM2VtYWMubWF4X3J4X3F1ZXVlcyA9IFRYR0JFVkZfTUFYX1JYX1FVRVVFUztcXG4gMTQ3OlxcdFxcdC8qIEVuYWJsZSBkeW5hbWljIGludGVycnVwdCB0aHJvdHRsaW5nIHJhdGVzICovXFxuIDE0ODpcXHRcXHR3eC1cXHUwMDNlYWRhcHRpdmVfaXRyID0gdHJ1ZTtcXG4gMTQ5OlxcdFxcdHd4LVxcdTAwM2VyeF9pdHJfc2V0dGluZyA9IDE7XFxuIDE1MDpcXHRcXHR3eC1cXHUwMDNldHhfaXRyX3NldHRpbmcgPSAxO1xcbiAxNTE6XFx0XFx0Lyogc2V0IGRlZmF1bHQgcmluZyBzaXplcyAqL1xcbiAxNTI6XFx0XFx0d3gtXFx1MDAzZXR4X3JpbmdfY291bnQgPSBUWEdCRVZGX0RFRkFVTFRfVFhEO1xcbiAxNTM6XFx0XFx0d3gtXFx1MDAzZXJ4X3JpbmdfY291bnQgPSBUWEdCRVZGX0RFRkFVTFRfUlhEO1xcbiAxNTQ6XFx0XFx0Lyogc2V0IGRlZmF1bHQgd29yayBsaW1pdHMgKi9cXG4gMTU1OlxcdFxcdHd4LVxcdTAwM2V0eF93b3JrX2xpbWl0ID0gVFhHQkVWRl9ERUZBVUxUX1RYX1dPUks7XFxuIDE1NjpcXHRcXHR3eC1cXHUwMDNlcnhfd29ya19saW1pdCA9IFRYR0JFVkZfREVGQVVMVF9SWF9XT1JLO1xcbiAxNTc6XFx0XFxuIDE1ODpcXHRcXHR3eC1cXHUwMDNlc2V0X251bV9xdWV1ZXMgPSB0eGdiZXZmX3NldF9udW1fcXVldWVzO1xcbiAxNTk6XFx0XFxuIDE2MDpcXHRcXHRzd2l0Y2ggKHd4LVxcdTAwM2VtYWMudHlwZSkge1xcbiAxNjE6XFx0XFx0Y2FzZSB3eF9tYWNfc3A6XFxuIDE2MjpcXHRcXHRcXHRicmVhaztcXG4gMTYzOlxcdFxcdGNhc2Ugd3hfbWFjX2FtbDpcXG4gMTY0OlxcdFxcdGNhc2Ugd3hfbWFjX2FtbDQwOlxcbiAxNjU6XFx0XFx0XFx0c2V0X2JpdChXWF9GTEFHX1JYX01FUkdFX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIDE2NjpcXHRcXHRcXHRzZXRfYml0KFdYX0ZMQUdfVFhIRUFEX1dCX0VOQUJMRUQsIHd4LVxcdTAwM2VmbGFncyk7XFxuIDE2NzpcXHRcXHRcXHRicmVhaztcXG4gMTY4OlxcdFxcdGRlZmF1bHQ6XFxuIDE2OTpcXHRcXHRcXHRicmVhaztcXG4gMTcwOlxcdFxcdH1cXG4gMTcxOlxcdFxcbiAxNzI6XFx0XFx0cmV0dXJuIDA7XFxuIDE3MzpcXHRlcnJfcmVzZXRfaHc6XFxuIDE3NDpcXHRcXHRrZnJlZSh3eC1cXHUwMDNldmZpbmZvKTtcXG4gMTc1OlxcdGVycl9pbml0X21ieF9wYXJhbXM6XFxuIDE3NjpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlcnNzX2tleSk7XFxuIDE3NzpcXHRcXHRrZnJlZSh3eC1cXHUwMDNlbWFjX3RhYmxlKTtcXG4gMTc4OlxcdGVycl93eF9zd19pbml0OlxcbiAxNzk6XFx0XFx0cmV0dXJuIGVycjtcXG4gMTgwOlxcdH1cXG4gMTgxOlxcdFxcbiAxODI6XFx0LyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjIyLjExNTA4ODg1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDE2NTQ4ODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIGB3eF9yZXNldF9od192ZmAgZnVuY3Rpb24sIGRpc3RpbGxlZCB0byBpdHMgY29yZTpcblxuKipEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKipcblxuT2theSwgSSdtIGVuY291bnRlcmluZyBhIGNhbGwgdG8gYHd4X3Jlc2V0X2h3X3ZmYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCBcIlJpZ2h0LCBsZXQncyBkaXNzZWN0IHRoaXMgYW5kIHVuZGVyc3RhbmQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQuXCIgSSBuZWVkIHRvIGRldGVybWluZSB3aGF0IGl0IHJlc2V0cywgd2hpY2ggaGFyZHdhcmUgY29tcG9uZW50cyBpdCB0YXJnZXRzLCBhbmQsIGNydWNpYWxseSwgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlc2V0LiBJIG5lZWQgdG8ga25vdyB3aHkgdGhpcyByZXNldCBpcyBuZWNlc3Nhcnk6IGlzIGl0IGZvciBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSBjbGVhbnVwIGJlZm9yZSByZWNvbmZpZ3VyYXRpb24sIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBBIHF1aWNrIGRpdmUgaW50byB0aGUgY29kZSB3aWxsIHJldmVhbCB0aGUga2V5IGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3ODAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjI1LjUzMTY0MDM5NFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM3Mjk0MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcmVzZXRfaHdfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTQxPXN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy01My0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6NTQ6ICogIHd4X3Jlc2V0X2h3X3ZmIC0gUGVyZm9ybXMgaGFyZHdhcmUgcmVzZXRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTUtICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02MS0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jOjYyOmludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy02My17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMTI3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6MTI4OkVYUE9SVF9TWU1CT0wod3hfcmVzZXRfaHdfdmYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy0xMjktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg9MTExPXZvaWQgd3hfaW5pdF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmg6MTEyOmludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmgtMTEzLXZvaWQgd3hfZ2V0X21hY19hZGRyX3ZmKHN0cnVjdCB3eCAqd3gsIHU4ICptYWNfYWRkcik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jPTE0MD12b2lkIHd4X3Jlc2V0X3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jLTE0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmX2NvbW1vbi5jOjE0NTpcXHRyZXQgPSB3eF9yZXNldF9od192Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zl9jb21tb24uYy0xNDYtXFx0aWYgKCFyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jPTYwPXN0YXRpYyBpbnQgbmdiZXZmX3N3X2luaXQoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtODEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzo4MjpcXHRlcnIgPSB3eF9yZXNldF9od192Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy04My1cXHRpZiAoZXJyKSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM9MTAzPXN0YXRpYyBpbnQgdHhnYmV2Zl9zd19pbml0KHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmMtMTI1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxMjY6XFx0ZXJyID0gd3hfcmVzZXRfaHdfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMjctXFx0aWYgKGVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyNS41OTUzNzgyNTNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAzMzE1OTg3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggaGFyZHdhcmUgYW5kIGxpa2VseSBpbnZvbHZlZCBpbiBzb21lIGRlYnVnZ2luZyBvciBvcHRpbWl6YXRpb24uXG5cbioqSW5pdGlhbCBBc3Nlc3NtZW50OiBEaXZpbmcgaW50byBgd3hfcmVzZXRfaHdfdmZgKipcblxuQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogbGV0J3MgZ2V0IGludG8gdGhlIGNvZGUgZm9yIGB3eF9yZXNldF9od192ZmAuIEltbWVkaWF0ZWx5LCBJJ20gbWVudGFsbHkgcGFyc2luZyB0aGF0IGZ1bmN0aW9uIG5hbWUuIFwid3hcIiBsaWtlbHkgaGludHMgYXQgYSBzcGVjaWZpYyBmcmFtZXdvcmsgb3IgZHJpdmVyLCBwb3RlbnRpYWxseSByZWxhdGVkIHRvIGEgcGFydGljdWxhciB2ZW5kb3Igb3IgYSBsYXJnZXIgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIuIFwicmVzZXRfaHdcIiBpcyBzZWxmLWV4cGxhbmF0b3J5OyBpdCdzIGEgaGFyZHdhcmUgcmVzZXQgcm91dGluZS4gQW5kIFwidmZcIiDigJMgVmlydHVhbCBGdW5jdGlvbi4gVGhhdCBuYXJyb3dzIHRoaW5ncyBkb3duIHNpZ25pZmljYW50bHkuIFRoaXMgaXMgbGlrZWx5IGEgZnVuY3Rpb24gd2l0aGluIGEgdmlydHVhbGl6YXRpb24gY29udGV4dCwgcHJvYmFibHkgZGVhbGluZyB3aXRoIHJlc2V0dGluZyBhIFZpcnR1YWwgRnVuY3Rpb24gb2YgYSBoYXJkd2FyZSBkZXZpY2UuXG5cbk15IG1pbmQncyBhbHJlYWR5IHJhY2luZywgY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnM6XG5cbiogICAqKldoYXQga2luZCBvZiBoYXJkd2FyZT8qKiBJcyB0aGlzIG5ldHdvcmssIHN0b3JhZ2UsIGdyYXBoaWNzPyBUaGF0IHNoYXBlcyBteSBleHBlY3RhdGlvbnMgYWJvdXQgdGhlIHJlc2V0IHByb2NlZHVyZSdzIGNvbXBsZXhpdHkuXG4qICAgKipXaGF0IHRyaWdnZXJzIHRoaXMgcmVzZXQ/KiogSXMgdGhpcyBwYXJ0IG9mIGEgYm9vdCBwcm9jZXNzLCBhbiBlcnJvciByZWNvdmVyeSwgYSByZXNvdXJjZSByZWFsbG9jYXRpb24sIG9yIGEgaG90LXBsdWcgZXZlbnQ/IFRoZSB1c2UgY2FzZSBkaWN0YXRlcyBob3cgcm9idXN0IGFuZCB0aG9yb3VnaCB0aGUgcmVzZXQgbmVlZHMgdG8gYmUuXG4qICAgKipXaGF0IGFyZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cz8qKiBEcm9wcGVkIGNvbm5lY3Rpb25zLCBkYXRhIGxvc3MsIHRlbXBvcmFyeSBzZXJ2aWNlIGludGVycnVwdGlvbnM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb24gdGhlIHN5c3RlbS5cbiogICAqKldoYXQgaXMgdGhlIGN1cnJlbnQgc3RhdGU/KiogQmVmb3JlIHJlc2V0dGluZywgaXTigJlzIG5lY2Vzc2FyeSB0byB1bmRlcnN0YW5kIHRoZSBjdXJyZW50IGhhcmR3YXJlIHN0YXR1cy4gV2hhdCByZXNvdXJjZXMgaXMgaXQgaGFuZGxpbmc/XG5cbkVzc2VudGlhbGx5LCBJJ20gcHJpbWVkIHRvIGFuYWx5emUgdGhlIGNvZGUgd2l0aCBhIGtlZW4gYXdhcmVuZXNzIG9mIHZpcnR1YWxpemF0aW9uLCBoYXJkd2FyZSBjb250cm9sLCBhbmQgcG90ZW50aWFsIGZhaWx1cmUgcG9pbnRzLiBUaGlzIGlzbid0IGp1c3QgYSBnZW5lcmljIHJlc2V0IGZ1bmN0aW9uOyBpdCdzIGEgY3JpdGljYWwgY29tcG9uZW50IGluIGEgdmlydHVhbGl6ZWQgaGFyZHdhcmUgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODk1LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6MjkuNjI4NTQwNzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MixcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA2MjpcXHRpbnQgd3hfcmVzZXRfaHdfdmYoc3RydWN0IHd4ICp3eClcXG4gIDYzOlxcdHtcXG4gIDY0OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuICA2NTpcXHRcXHR1MzIgbXNnYnVmWzRdID0ge1dYX1ZGX1JFU0VUfTtcXG4gIDY2OlxcdFxcdHU4ICphZGRyID0gKHU4ICopKFxcdTAwMjZtc2didWZbMV0pO1xcbiAgNjc6XFx0XFx0dTMyIGI0X2J1ZlsxNl0gPSB7MH07XFxuICA2ODpcXHRcXHR1MzIgdGltZW91dCA9IDIwMDtcXG4gIDY5OlxcdFxcdGludCByZXQ7XFxuICA3MDpcXHRcXHR1MzIgaTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0LyogQ2FsbCB3eCBzdG9wIHRvIGRpc2FibGUgdHgvcnggYW5kIGNsZWFyIGludGVycnVwdHMgKi9cXG4gIDczOlxcdFxcdHd4X3N0b3BfYWRhcHRlcl92Zih3eCk7XFxuICA3NDpcXHRcXG4gIDc1OlxcdFxcdC8qIHJlc2V0IHRoZSBhcGkgdmVyc2lvbiAqL1xcbiAgNzY6XFx0XFx0d3gtXFx1MDAzZXZmaW5mby1cXHUwMDNldmZfYXBpID0gd3hfbWJveF9hcGlfbnVsbDtcXG4gIDc3OlxcdFxcbiAgNzg6XFx0XFx0LyogYmFja3VwIG1zaXggdmVjdG9ycyAqL1xcbiAgNzk6XFx0XFx0aWYgKHd4LVxcdTAwM2ViNF9hZGRyKSB7XFxuICA4MDpcXHRcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgMTY7IGkrKylcXG4gIDgxOlxcdFxcdFxcdFxcdGI0X2J1ZltpXSA9IHJlYWRsKHd4LVxcdTAwM2ViNF9hZGRyICsgaSAqIDQpO1xcbiAgODI6XFx0XFx0fVxcbiAgODM6XFx0XFxuICA4NDpcXHRcXHR3cjMybSh3eCwgV1hfVlhDVFJMLCBXWF9WWENUUkxfUlNULCBXWF9WWENUUkxfUlNUKTtcXG4gIDg1OlxcdFxcdHJkMzIod3gsIFdYX1ZYU1RBVFVTKTtcXG4gIDg2OlxcdFxcbiAgODc6XFx0XFx0Lyogd2UgY2Fubm90IHJlc2V0IHdoaWxlIHRoZSBSU1RJIC8gUlNURCBiaXRzIGFyZSBhc3NlcnRlZCAqL1xcbiAgODg6XFx0XFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0KSB7XFxuICA4OTpcXHRcXHRcXHR0aW1lb3V0LS07XFxuICA5MDpcXHRcXHRcXHR1ZGVsYXkoNSk7XFxuICA5MTpcXHRcXHR9XFxuICA5MjpcXHRcXG4gIDkzOlxcdFxcdC8qIHJlc3RvcmUgbXNpeCB2ZWN0b3JzICovXFxuICA5NDpcXHRcXHRpZiAod3gtXFx1MDAzZWI0X2FkZHIpIHtcXG4gIDk1OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxNjsgaSsrKVxcbiAgOTY6XFx0XFx0XFx0XFx0d3JpdGVsKGI0X2J1ZltpXSwgd3gtXFx1MDAzZWI0X2FkZHIgKyBpICogNCk7XFxuICA5NzpcXHRcXHR9XFxuICA5ODpcXHRcXG4gIDk5OlxcdFxcdC8qIGFtbGl0ZTogYm1lICovXFxuIDEwMDpcXHRcXHRpZiAod3gtXFx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWwgfHwgd3gtXFx1MDAzZW1hYy50eXBlID09IHd4X21hY19hbWw0MClcXG4gMTAxOlxcdFxcdFxcdHdyMzIod3gsIFdYX1ZYX1BGX0JNRSwgV1hfVkZfQk1FX0VOQUJMRSk7XFxuIDEwMjpcXHRcXG4gMTAzOlxcdFxcdGlmICghdGltZW91dClcXG4gMTA0OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDEwNTpcXHRcXG4gMTA2OlxcdFxcdC8qIFJlc2V0IFZGIHJlZ2lzdGVycyB0byBpbml0aWFsIHZhbHVlcyAqL1xcbiAxMDc6XFx0XFx0d3hfdmlydF9jbHJfcmVnKHd4KTtcXG4gMTA4OlxcdFxcbiAxMDk6XFx0XFx0LyogbWFpbGJveCB0aW1lb3V0IGNhbiBub3cgYmVjb21lIGFjdGl2ZSAqL1xcbiAxMTA6XFx0XFx0bWJ4LVxcdTAwM2V0aW1lb3V0ID0gMjAwMDtcXG4gMTExOlxcdFxcbiAxMTI6XFx0XFx0cmV0ID0gd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHd4LCBtc2didWYsIG1zZ2J1ZixcXG4gMTEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgQVJSQVlfU0laRShtc2didWYpKTtcXG4gMTE0OlxcdFxcdGlmIChyZXQpXFxuIDExNTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRpZiAobXNnYnVmWzBdICE9IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfQUNLKSBcXHUwMDI2XFx1MDAyNlxcbiAxMTg6XFx0XFx0ICAgIG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX05BQ0spKVxcbiAxMTk6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDEyMDpcXHRcXG4gMTIxOlxcdFxcdGlmIChtc2didWZbMF0gPT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9BQ0spKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNToyOS42Mjg3MDU3NVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2OTEwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVzZXQgVmVyaWZpY2F0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSByZXNldCB2ZXJpZmljYXRpb24gZmxvdy4gSXQgc3RhcnRzIGJ5IHJlYWRpbmcgZnJvbSB0aGUgaGFyZHdhcmUgcmVnaXN0ZXJzIHVzaW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmKHd4KWAuIE15IGluaXRpYWwgdGhvdWdodCBpcywgd2hhdCBhcmUgdGhlIHBvdGVudGlhbCBmYWlsdXJlIG1vZGVzPyBJZiB0aGF0IHJlZ2lzdGVyIGFjY2VzcyBmYWlscywgSSdkIGV4cGVjdCBpdCB0byByZXR1cm4gYC1FQlVTWWAsIHdoaWNoIG1ha2VzIHNlbnNlIGFzIGEgc2lnbmFsIHRoYXQgdGhlIHJlc291cmNlIGlzIHVuYXZhaWxhYmxlLlxuXG5OZXh0LCBJIHNlZSBhIG1haWxib3ggd3JpdGUgYW5kIHJlYWQgcmVwbHkuIFRoYXQgc3VnZ2VzdHMgYSBjb21tdW5pY2F0aW9uIGV4Y2hhbmdlIHdpdGggc29tZSBvdGhlciBjb21wb25lbnQgb3IgcHJvY2VzcyByZWxhdGVkIHRvIHRoZSByZXNldCBjaGVjay4gSSBuZWVkIHRvIGtlZXAgaW4gbWluZCB0aGUgcG90ZW50aWFsIGZvciBjb21tdW5pY2F0aW9uIGlzc3VlcyBoZXJlLlxuXG5Ob3csIGFuIGludGVyZXN0aW5nIHBvaW50IGlzIHRoYXQgaWYgdGhlcmUncyBubyBoYXJkd2FyZSBwcmVzZW50LCB0aGUgYHd4X2NoZWNrX2Zvcl9yc3RfdmZgIGZ1bmN0aW9uIG1pZ2h0IHJldHVybiAwIG9yIDEsIGRlcGVuZGluZyBvbiB3aGF0IGl0IHJlYWRzLiBTbywgdGhlIHJldHVybiB2YWx1ZSBpc24ndCBqdXN0IGEgc2ltcGxlIHN1Y2Nlc3MvZmFpbHVyZSBjb2RlOyBpdCBzZWVtcyB0byBpbmRpY2F0ZSBhIHN0YXRlLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgc3VzcGVjdCB0aGlzIHZhbHVlIHJlcHJlc2VudHMgc29tZSBoYXJkd2FyZS1zcGVjaWZpYyBzaWduYWxpbmcsIGFuZCBpdHMgaW50ZXJwcmV0YXRpb24gd291bGQgYmUgZGV2aWNlLWRlcGVuZGVudC4gVGhpcyBtZWFucyBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgd2hhdCBgd3hfY2hlY2tfZm9yX3JzdF92ZmAgaXMgYWN0dWFsbHkgZG9pbmcgaW4gdGhlIGNvbnRleHQgb2YgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGFuZCBkcml2ZXJzIGludm9sdmVkLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbi4gTGV0J3Mgc3RhcnQgd2l0aCBhIGNsb3NlciBsb29rIGF0IHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MjgzLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozMy40NTU2MTg1OTFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNjUwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X2NoZWNrX2Zvcl9yc3RfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yNDE9aW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjQ3LS8qKlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjQ4OiAqICB3eF9jaGVja19mb3JfcnN0X3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHJlc2V0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yNDktICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1Mi0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyNTM6aW50IHd4X2NoZWNrX2Zvcl9yc3RfdmYoc3RydWN0IHd4ICp3eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI1NC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oPTkyPWludCB3eF93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaDo5MzppbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTk0LWludCB3eF9jaGVja19mb3JfbXNnX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTYyPWludCB3eF9yZXNldF9od192ZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTg3LVxcdC8qIHdlIGNhbm5vdCByZXNldCB3aGlsZSB0aGUgUlNUSSAvIFJTVEQgYml0cyBhcmUgYXNzZXJ0ZWQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6ODg6XFx0d2hpbGUgKCF3eF9jaGVja19mb3JfcnN0X3ZmKHd4KSBcXHUwMDI2XFx1MDAyNiB0aW1lb3V0KSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTg5LVxcdFxcdHRpbWVvdXQtLTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYz01NDk9aW50IHd4X2NoZWNrX21hY19saW5rX3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtNTU3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NTg6XFx0d3hfY2hlY2tfZm9yX3JzdF92Zih3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1OS1cXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozMy41MTgyNzQ5NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDgyOTA2ODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gdGhpcyBmaWVsZCBhbmQgYXBwcm9hY2hpbmcgdGhpcyBsaW5lIG9mIGNvZGU6XG5cbioqQW5hbHl6aW5nIGB3eF9jaGVja19mb3JfcnN0X3ZmYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB3eF9jaGVja19mb3JfcnN0X3ZmYCBmdW5jdGlvbi4gUmlnaHQgYXdheSwgbXkgYnJhaW4gc3RhcnRzIHRvIHBhcnNlIHRoZSBuYW1pbmcgY29udmVudGlvbi4gVGhlIFwid3hcIiBsaWtlbHkgaW5kaWNhdGVzIGl0J3MgcmVsYXRlZCB0byB0aGUgd3hXaWRnZXRzIGxpYnJhcnksIHNvIHRoYXQncyBhIGtleSBjb250ZXh0dWFsIGNsdWUuIEkga25vdyB3eFdpZGdldHMgcXVpdGUgd2VsbCwgc28gSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgZGVzaWduZWQgdG8gaGFuZGxlIHNvbWUgc3BlY2lmaWMgY2hlY2sgb3IgdmFsaWRhdGlvbiB3aXRoaW4gdGhhdCBmcmFtZXdvcmsuIFRoZSBcInJzdFwiIHBhcnQgZGVmaW5pdGVseSBzcGFya3MgYSBtZW1vcnkg4oCTIGlzIHRoaXMgcmVsYXRlZCB0byByZVN0cnVjdHVyZWRUZXh0LCBvciBwZXJoYXBzIGEgcmVzZXQgZnVuY3Rpb25hbGl0eT8gXCJ2ZlwiIGNvdWxkIG1lYW4gdmlydHVhbCBmdW5jdGlvbiwgdmFsdWUgZnVuY3Rpb24sIG9yIGV2ZW4gdmFsaWRhdGlvbiBmdW5jdGlvbi4gR2l2ZW4gdGhlIG5hbWluZyBwYXR0ZXJuIG9mIGEgbG90IG9mIHd4V2lkZ2V0cyBjb2RlLCBpdCdzIHF1aXRlIHBvc3NpYmxlIGl0J3MgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gcmVTdHJ1Y3R1cmVkVGV4dCBmb3JtYXR0aW5nIGFuZCBpdHMgdXNhZ2UsIGJ1dCBJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgdG8gY29uZmlybS4gSSdsbCBuZWVkIHRvIGxvb2sgYXQgdGhlIGZ1bmN0aW9uJ3MgZGVmaW5pdGlvbiBhbmQgY29udGV4dCB3aXRoaW4gdGhlIGxhcmdlciBjb2RlIGJhc2UgdG8gdW5kZXJzdGFuZCBpdHMgZXhhY3QgcHVycG9zZSwgYnV0IG15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgaHlwb3RoZXNlcyBhYm91dCBpdHMgZnVuY3Rpb24uIE5vdyBJJ20gcmVhZHkgdG8gaW52ZXN0aWdhdGUgYW5kIGhvcGVmdWxseSBkaXNjb3ZlciB0aGUgYW5zd2VyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM5NSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjM3LjAwMTE4NDU4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1MyxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI1MzpcXHRpbnQgd3hfY2hlY2tfZm9yX3JzdF92ZihzdHJ1Y3Qgd3ggKnd4KVxcbiAyNTQ6XFx0e1xcbiAyNTU6XFx0XFx0LyogcmVhZCBjbGVhciB0aGUgcGYgcmVzZXQgZG9uZSBiaXQgKi9cXG4gMjU2OlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LFxcbiAyNTc6XFx0XFx0XFx0XFx0XFx0ICAgV1hfVlhNQUlMQk9YX1JTVEQgfFxcbiAyNTg6XFx0XFx0XFx0XFx0XFx0ICAgV1hfVlhNQUlMQk9YX1JTVEkpO1xcbiAyNTk6XFx0fVxcbiAyNjA6XFx0XFxuIDI2MTpcXHQvKipcXG4gMjYyOlxcdCAqICB3eF9wb2xsX2Zvcl9tc2cgLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvblxcbiAyNjM6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDI2NDpcXHQgKlxcbiAyNjU6XFx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFZGIGhhcyBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvblxcbiAyNjY6XFx0ICoqL1xcbiAyNjc6XFx0c3RhdGljIGludCB3eF9wb2xsX2Zvcl9tc2coc3RydWN0IHd4ICp3eClcXG4gMjY4OlxcdHtcXG4gMjY5OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuIDI3MDpcXHRcXHR1MzIgdmFsO1xcbiAyNzE6XFx0XFxuIDI3MjpcXHRcXHRyZXR1cm4gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9jaGVja19mb3JfbXNnX3ZmLCB3eCwgdmFsLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTozNy4wMDEyNjgwMjlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzMzkyNjgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhhcmR3YXJlIEludGVyYWN0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIGZyb20gYSBoYXJkd2FyZSBwZXJzcGVjdGl2ZS4gTXkgcHJpbWFyeSBjb25jZXJuIGhlcmUgaXMgaG93IHRoZSBjb2RlIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBjb21wb25lbnRzLCBzcGVjaWZpY2FsbHkgdGhlIHZpcnR1YWwgZnVuY3Rpb24gKFZGKSBtYWlsYm94ZXMuIEknbSBzZWVpbmcgYSBjb3JlIGFzc3VtcHRpb246IElmIHRoZSBoYXJkd2FyZSBpc24ndCBwcmVzZW50LCB0aGUgYHJlYWRsYCBmdW5jdGlvbiB3aWxsIGdyYWNlZnVsbHkgcmV0dXJuIGAweGZmZmZmZmZmYC4gVGhhdCdzIGEgY3JpdGljYWwgc2FmZXR5IG5ldC5cblxuTm93LCBsb29raW5nIGF0IGB3eF9jaGVja19mb3JfYml0X3ZmYCwgbXkgZWR1Y2F0ZWQgZ3Vlc3MgaXMgaXQncyBwZXJmb3JtaW5nIGEgYml0d2lzZSBBTkQgb3BlcmF0aW9uIG9uIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIHZpcnR1YWwgZnVuY3Rpb24gbWFpbGJveCBhZGRyZXNzIChgV1hfVlhNQUlMQk9YYCkgd2l0aCBhIHNwZWNpZmljIHJlc2V0IGZsYWcgKGBXWF9WWE1BSUxCT1hfUlNURGApLiAgSXQgd291bGQgYmUgaW50ZXJlc3RpbmcgdG8gc2VlIHRoaXMgZnVuY3Rpb24gaW4gbW9yZSBkZXRhaWwuXG5cbklmIHRoYXQgcmVhZCAqZG9lcyogcmV0dXJuIGAweGZmZmZmZmZmYCDigJMgZWZmZWN0aXZlbHkgcmVwcmVzZW50aW5nIGEgXCJoYXJkd2FyZSBub3QgcHJlc2VudFwiIHNjZW5hcmlvIOKAkyB0aGVuIHRoZSBiaXR3aXNlIEFORCwgZXZlbiB3aXRoIHRoZSByZXNldCBmbGFnLCB3aWxsIGFsc28gcmVzdWx0IGluIGAweGZmZmZmZmZmYCwgd2hpY2ggaXMgbm9uLXplcm8uICBUaGVyZWZvcmUsIGB3eF9jaGVja19mb3JfcnN0X3ZmYCB3b3VsZCBjb3JyZWN0bHkgZXZhbHVhdGUgdG8gYHRydWVgLiBUaGlzIFwiZXJyb3JcIiBjb25kaXRpb24gaXMgYmVpbmcgdXNlZCBhcyBhIHNpZ25hbCBmb3IgdGhlIGludGVuZGVkIG91dGNvbWUuXG5cblRoZSBiZWF1dHkgb2YgdGhpcyBpcyB0aGF0IGl0IGFsbG93cyB0aGUgY29kZSB0byBieXBhc3MgdGhlIGxvb3Agd2hlbiBubyBoYXJkd2FyZSBpcyBkZXRlY3RlZC4gVGhlbiB0aGUgY29kZSBwcm9jZWVkcyB0byB0cmlnZ2VyIHRoZSBgd3hfcmVzZXRfaHdfdmZgIGZ1bmN0aW9uIHdoaWNoIEkgYXNzdW1lIHdvdWxkIHBlcmZvcm0gdGhlIGFjdHVhbCByZXNldCBvcGVyYXRpb24uIEFmdGVyIHRoZSBjaGVjayBhbmQgcmVzZXQgcHJvY2VzcyBoYXMgYmVlbiB0cmlnZ2VyZWQsIHRoZSBjb2RlIG1vdmVzIG9uIHRvIGB3eF9tYnhfd3JpdGVfYW5kX3JlYWRfcmVwbHlgIHdoaWNoIEkgYXNzdW1lIHdvdWxkIGJlIHRoZSBjcml0aWNhbCBoYW5kc2hha2UgYW5kIGRhdGEgdHJhbnNmZXIgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwNDIsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0MS4yMzUxOTcxMjFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTc2NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQxOlxcdHN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4gIDQyOlxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgKnJlc3BfYnVmLCB1MTYgc2l6ZSlcXG4gIDQzOlxcdHtcXG4gIDQ0OlxcdFxcdGludCByZXQ7XFxuICA0NTpcXHRcXG4gIDQ2OlxcdFxcdHJldCA9IHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIHJlcV9idWYsIHNpemUpO1xcbiAgNDc6XFx0XFx0aWYgKHJldClcXG4gIDQ4OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA0OTpcXHRcXG4gIDUwOlxcdFxcdHJldHVybiB3eF9yZWFkX3Bvc3RlZF9tYngod3gsIHJlc3BfYnVmLCBzaXplKTtcXG4gIDUxOlxcdH1cXG4gIDUyOlxcdFxcbiAgNTM6XFx0LyoqXFxuICA1NDpcXHQgKiAgd3hfcmVzZXRfaHdfdmYgLSBQZXJmb3JtcyBoYXJkd2FyZSByZXNldFxcbiAgNTU6XFx0ICogIEB3eDogcG9pbnRlciB0byBoYXJkd2FyZSBzdHJ1Y3R1cmVcXG4gIDU2OlxcdCAqXFxuICA1NzpcXHQgKiAgUmVzZXRzIHRoZSBoYXJkd2FyZSBieSByZXNldHRpbmcgdGhlIHRyYW5zbWl0IGFuZCByZWNlaXZlIHVuaXRzLCBtYXNrcyBhbmRcXG4gIDU4OlxcdCAqICBjbGVhcnMgYWxsIGludGVycnVwdHMuXFxuICA1OTpcXHQgKlxcbiAgNjA6XFx0ICogIFJldHVybjogcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0MS4yMzUyOTYwNjFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY0Mjc1MjY2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDpcblxuKipBbmFseXppbmcgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIGFuZCBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBmdW5jdGlvbnMsIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBhbmQgYHd4X3JlYWRfcG9zdGVkX21ieGAuIEp1c3QgZnJvbSB0aGUgbmFtZXMsIEknbSBhbHJlYWR5IGZvcm1pbmcgc29tZSBhc3N1bXB0aW9ucy4gVGhlIFwid3hcIiBwcmVmaXggbGlrZWx5IHBvaW50cyB0byBhIHNwZWNpZmljIGVudmlyb25tZW50IG9yIGxpYnJhcnkg4oCTIHByb2JhYmx5IHNvbWUgd2luZG93aW5nIG9yIGVtYmVkZGVkIHN5c3RlbSBjb250ZXh0LCBnaXZlbiBteSBleHBlcmllbmNlLiBcIm1ieFwiIGFsbW9zdCBjZXJ0YWlubHkgc3RhbmRzIGZvciBtYWlsYm94LiBTbywgaW1tZWRpYXRlbHksIEknbSB0aGlua2luZyBtZXNzYWdlIHBhc3NpbmcsIHByb2JhYmx5IGFzeW5jaHJvbm91cyBjb21tdW5pY2F0aW9uIGJldHdlZW4gcHJvY2Vzc2VzIG9yIHRocmVhZHMuXG5cbmB3eF93cml0ZV9wb3N0ZWRfbWJ4YCDigJMgc28sIFwid3JpdGUgcG9zdGVkXCIg4oCTIGltcGxpZXMgYSBtZXNzYWdlIGlzIGJlaW5nIGFkZGVkIHRvIGEgbWFpbGJveCwgd2l0aCBhIHBvdGVudGlhbCBpbXBsaWNhdGlvbiB0aGF0IHRoZSBhY3Qgb2Ygd3JpdGluZyAqaXRzZWxmKiBjb3VsZCBcInBvc3RcIiB0aGUgYXZhaWxhYmlsaXR5IG9mIGEgbmV3IG1lc3NhZ2UuIFRoaXMgYWxzbyB0ZWxscyBtZSB0aGVyZSdzIGFuIGV4cGVjdGF0aW9uIHRoYXQgdGhlIHJlY2VpdmVyIHdpbGwgYmUgbm90aWZpZWQsIGVpdGhlciBleHBsaWNpdGx5IG9yIGltcGxpY2l0bHksIG9uY2UgYSBuZXcgbWVzc2FnZSBpcyBhdmFpbGFibGUgaW4gdGhlIG1haWxib3guIEl0J3MgYSBrZXkgZGV0YWlsIHRvIHdhdGNoIGZvcjogaXMgdGhlcmUgYSBjYWxsYmFjaywgYSBzZW1hcGhvcmUsIG9yIGp1c3QgcGVyaW9kaWMgcG9sbGluZz8gQW5kIGlzIHRoZSBcInBvc3RlZFwiIGFzcGVjdCB0aHJlYWQtc2FmZSBvciBwb3RlbnRpYWxseSBjcmVhdGluZyBjb25jdXJyZW5jeSBwcm9ibGVtcz9cblxuTm93LCB0aGUgY291bnRlcnBhcnQsIGB3eF9yZWFkX3Bvc3RlZF9tYnhgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSB0aGUgY29uc3VtZXIgb2YgdGhlc2UgbWVzc2FnZXMuIFRoZSB1c2Ugb2YgXCJwb3N0ZWRcIiBoaW50cyB0aGVyZSdzIGEgc3BlY2lmaWMgcmVhZCBtZWNoYW5pc20gZGVzaWduZWQgdG8gcmV0cmlldmUgbWVzc2FnZXMgdGhhdCBoYXZlICpqdXN0KiBiZWNvbWUgYXZhaWxhYmxlLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIG1pZ2h0IGJlIHNvbWUgZm9ybSBvZiBpbnRlcm5hbCBxdWV1ZSBtYW5hZ2VtZW50IG9yIHN0YXRlIHRvIGNoZWNrIHdoYXQgbWVzc2FnZXMgYXJlIHVucmVhZCBhbmQgcG9zc2libHkgcHJpb3JpdGl6ZS4gSXQgbmVlZHMgdG8gYmUgY2xlYXIgd2hldGhlciB0aGUgcmVhZCBvcGVyYXRpb24gaXMgYmxvY2tpbmcsIG5vbi1ibG9ja2luZywgb3IgdGltZWQuIEEgYmxvY2tpbmcgcmVhZCBjb3VsZCBiZSBwcm9ibGVtYXRpYyBpZiB0aGUgYXBwbGljYXRpb24gbmVlZHMgdG8gZG8gb3RoZXIgd29yaywgdW5sZXNzIHRoZSBkZXNpZ24gYWxsb3dzIGl0IHRvIHN1c3BlbmQgdG8gYW4gYXBwcm9wcmlhdGUgcG9pbnQuIFdoYXQgaGFwcGVucyBpZiB0aGUgbWFpbGJveCBpcyBlbXB0eT8gRG8gd2UgZ2V0IGFuIGVycm9yIGNvZGUsIHJldHVybiBOVUxMLCBvciBibG9jayBpbmRlZmluaXRlbHk/IFBlcmZvcm1hbmNlIGlzIGFsd2F5cyBhIGNvbnNpZGVyYXRpb24uIEknZCBuZWVkIHRvIGFzc2VzcyB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgdGhlIG1haWxib3ggdG8gdW5kZXJzdGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxvY2tpbmcsIG9yIG1lbW9yeSBhbGxvY2F0aW9uIG92ZXJoZWFkLlxuXG5TbywgaW4gc3VtbWFyeSwgSSBhbnRpY2lwYXRlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgcGFydCBvZiBhIG1lc3NhZ2UtcGFzc2luZyBzeXN0ZW0uIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCBpcyB0aGUgc2VuZGVyLCBhZGRpbmcgbWVzc2FnZXMgYW5kIHBvdGVudGlhbGx5IHRyaWdnZXJpbmcgYSBub3RpZmljYXRpb24uIGB3eF9yZWFkX3Bvc3RlZF9tYnhgIGlzIHRoZSByZWNlaXZlciwgZXh0cmFjdGluZyB0aG9zZSBtZXNzYWdlcy4gQSBkZWVwIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb25zIHdvdWxkIHRlbGwgdGhlIHN0b3J5IG9mIHRoZSBpbm5lciB3b3JraW5ncyBvZiBob3cgdGhlc2UgbWVzc2FnZXMgYXJlIGhhbmRsZWQ6IG1lbW9yeSBtYW5hZ2VtZW50LCBzeW5jaHJvbml6YXRpb24sIGFuZCBlcnJvciBoYW5kbGluZyBhcmUgbXkgcHJpbWFyeSBhcmVhcyBvZiBpbnRlcmVzdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4MjksIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE1OjQ1Ljg3ODA1MTczNloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk4NDg4NzEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X3dyaXRlX3Bvc3RlZF9tYnhcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMxMi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMxMzogKiAgd3hfd3JpdGVfcG9zdGVkX21ieCAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveCwgd2FpdCBmb3IgYWNrXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMyMC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMjE6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzIyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg9OTE9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTI6aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oLTkzLWludCB3eF9jaGVja19mb3JfcnN0X3ZmKHN0cnVjdCB3eCAqd3gpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jPTQxPXN0YXRpYyBpbnQgd3hfbWJ4X3dyaXRlX2FuZF9yZWFkX3JlcGx5KHN0cnVjdCB3eCAqd3gsIHUzMiAqcmVxX2J1ZixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYy00NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM6NDY6XFx0cmV0ID0gd3hfd3JpdGVfcG9zdGVkX21ieCh3eCwgcmVxX2J1Ziwgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTQ3LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9MjA3PWludCB3eF91cGRhdGVfbWNfYWRkcl9saXN0X3ZmKHN0cnVjdCB3eCAqd3gsIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMjI4LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzoyMjk6XFx0cmV0dXJuIHd4X3dyaXRlX3Bvc3RlZF9tYngod3gsIG1zZ2J1ZiwgQVJSQVlfU0laRShtc2didWYpKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmMtMjMwLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NDYuMjc2NTQ2NTI4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM0NTEyMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSdyZSBteSBvd246XG5cbioqQW5hbHl6aW5nIGB3eF93cml0ZV9wb3N0ZWRfbWJ4YCoqXG5cbkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgd3hfd3JpdGVfcG9zdGVkX21ieGAuIEkga25vdyB0aGlzIGZ1bmN0aW9uOyBpdCdzIGEga2V5IHBpZWNlIGluIG91ciBtZXNzYWdlIGJveCBoYW5kbGluZywgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciB3cml0aW5nIGEgbWVzc2FnZSB0aGF0J3MgYmVlbiBcInBvc3RlZC5cIiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IGRpc3NlY3Qgd2hhdCB0aGF0IGltcGxpZXMgd2l0aGluIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS4gXCJQb3N0ZWRcIiBzdWdnZXN0cyB0aGUgbWVzc2FnZSBoYXMgYWxyZWFkeSBiZWVuIHByb2Nlc3NlZCwgcGVyaGFwcyB2YWxpZGF0ZWQsIGFuZCBpcyBub3cgcmVhZHkgZm9yIHBlcnNpc3RlbnQgc3RvcmFnZSBvciBkZWxpdmVyeS4gSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBjb250ZXh0OiBpcyB0aGlzIGEgdXNlci1sZXZlbCBtZXNzYWdlLCBhbiBpbnRlci1wcm9jZXNzIGNvbW11bmljYXRpb24gKElQQykgbWVjaGFuaXNtLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGBtYnhgIHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIG1haWxib3ggc3RydWN0dXJlIG9yIGFic3RyYWN0aW9uLCBzbyBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgdGhlIGludGVybmFscyBvZiB0aGF0LiBJJ2xsIG5lZWQgdG8ga25vdzogd2hhdCBhcmUgdGhlIGxpa2VseSBwYXJhbWV0ZXJzPyBXaGF0IHNvcnQgb2YgY29uY3VycmVuY3kgc2FmZWd1YXJkcyBhcmUgZW1wbG95ZWQgaGVyZT8gSXMgdGhlcmUgcG90ZW50aWFsIGZvciBkYXRhIGNvcnJ1cHRpb24gaWYgbm90IGhhbmRsZWQgcHJvcGVybHk/IEFueSBhc3NvY2lhdGVkIGVycm9yIGNvZGVzIEkgc2hvdWxkIGJlIHdhdGNoaW5nIG91dCBmb3I/IEkgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MgLSB3aGF0IGhhcHBlbnMgaWYgdGhlIHdyaXRlIGZhaWxzPyBEb2VzIGl0IHJldHJ5LCBsb2csIG9yIGp1c3QgZGlzY2FyZCB0aGUgbWVzc2FnZT8gRG9lcyBpdCBibG9jayB0aGUgY2FsbGluZyBwcm9jZXNzPyBJIGFsc28gbmVlZCB0byBhc3Nlc3MgdGhlIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgZXNwZWNpYWxseSBpZiBhbnkgb2YgdGhlIG1lc3NhZ2UgZGF0YSBpcyBzZW5zaXRpdmUuIFRoZSBmdW5jdGlvbiBuYW1lIGltcGxpZXMgc29tZSBsZXZlbCBvZiBjb21wbGV4aXR5LiBUaW1lIHRvIHB1dCBvbiBteSBpbnZlc3RpZ2F0b3IncyBoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5MTY2LCJPdXRwdXRUb2tlbnMiOjQ4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NDkuOTcwMDAwMjcxWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzIxOlxcdGludCB3eF93cml0ZV9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzIyOlxcdHtcXG4gMzIzOlxcdFxcdGludCByZXQ7XFxuIDMyNDpcXHRcXG4gMzI1OlxcdFxcdC8qIHNlbmQgbXNnICovXFxuIDMyNjpcXHRcXHRyZXQgPSB3eF93cml0ZV9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XFxuIDMyNzpcXHRcXHQvKiBpZiBtc2cgc2VudCB3YWl0IHVudGlsIHdlIHJlY2VpdmUgYW4gYWNrICovXFxuIDMyODpcXHRcXHRpZiAocmV0KVxcbiAzMjk6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzMwOlxcdFxcbiAzMzE6XFx0XFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XFxuIDMzMjpcXHR9XFxuIDMzMzpcXHRcXG4gMzM0OlxcdC8qKlxcbiAzMzU6XFx0ICogIHd4X3dyaXRlX21ieF92ZiAtIFdyaXRlIGEgbWVzc2FnZSB0byB0aGUgbWFpbGJveFxcbiAzMzY6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDMzNzpcXHQgKiAgQG1zZzogVGhlIG1lc3NhZ2UgYnVmZmVyXFxuIDMzODpcXHQgKiAgQHNpemU6IExlbmd0aCBvZiBidWZmZXJcXG4gMzM5OlxcdCAqXFxuIDM0MDpcXHQgKiAgUmV0dXJuOiByZXR1cm5zIDAgaWYgaXQgc3VjY2Vzc2Z1bGx5IGNvcGllZCBtZXNzYWdlIGludG8gdGhlIGJ1ZmZlclxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo0OS45NzAwODk1NzFaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ0MDUxNDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIFwiTGV0J3Mgc2VlIGB3eF9wb2xsX2Zvcl9hY2tgLFwiIHJlZmxlY3RpbmcgYSB0aG91Z2h0IHByb2Nlc3MgeW91LCBhcyBhbiBleHBlcnQsIG1pZ2h0IGhhdmU6XG5cbioqQW5hbHl6aW5nIHRoZSBBY2tub3dsZWRnZW1lbnQgUG9sbGluZyBNZWNoYW5pc20qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gXCJMZXQncyBzZWUgYHd4X3BvbGxfZm9yX2Fja2AuXCIgIE15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYSBzcGVjaWZpYyBwb2xsaW5nIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGB3eGAgZnJhbWV3b3JrLCBsaWtlbHkgcmVsYXRlZCB0byBhY2tub3dsZWRnaW5nIGEgY29tbXVuaWNhdGlvbiBvciBldmVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gb3BlcmF0ZXMuIElzIGl0IGEgY2VudHJhbCBwb2ludCwgb3IgcGFydCBvZiBhIGxhcmdlciBzeXN0ZW0/IFdoYXQgYXJlIHRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zPyBXaGF0IGtpbmQgb2YgYWNrbm93bGVkZ2VtZW50IGlzIGl0IHdhaXRpbmcgZm9yPyBJcyBpdCBhIGhhcmR3YXJlIGxldmVsIGFjaywgYSBuZXR3b3JrIGFjaywgb3IgYSBoaWdoZXIgbGF5ZXIgYWNrPyBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGB3eGAgaW5kaWNhdGVzIGEgR1VJL3Rvb2xraXQgYmFja2dyb3VuZCAtIHdoaWNoIHN1Z2dlc3RzIGl0IGNvdWxkIGJlIHJlbGF0ZWQgdG8gZXZlbnQgaGFuZGxpbmcgb3IgYXN5bmNocm9ub3VzIG9wZXJhdGlvbnMuIElzIHRoaXMgYSBibG9ja2luZyBwb2xsLCBvciBkb2VzIGl0IHV0aWxpemUgc29tZSBmb3JtIG9mIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb24/IE15IGV4cGVyaWVuY2UgdGVsbHMgbWUgdGhlcmUgd2lsbCBiZSBjb21wbGV4aXRpZXMgYXJvdW5kIHRpbWVvdXRzLCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBhbmQgZXJyb3IgaGFuZGxpbmcuIEkgd29uZGVyIGhvdyBpdCBkZWFscyB3aXRoIGRyb3BwZWQgcGFja2V0cyBvciBkZWxheWVkIHJlc3BvbnNlcz8gSXMgaXQgcm9idXN0PyBJJ20gZ29pbmcgdG8gbmVlZCB0byBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLCBzdGFydGluZyB3aXRoIHRoZSBmdW5jdGlvbidzIHNpZ25hdHVyZSBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIHRvIGZvcm0gYSBtb3JlIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5ODI3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1My40MTA2MDYyMzFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjMzNzQzMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcG9sbF9mb3JfYWNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM9MjY3PXN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfbXNnKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI3Ni0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjI3NzogKiAgd3hfcG9sbF9mb3JfYWNrIC0gV2FpdCBmb3IgbWVzc2FnZSBhY2tub3dsZWRnbWVudFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjc4LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODEtICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjgyOnN0YXRpYyBpbnQgd3hfcG9sbF9mb3JfYWNrKHN0cnVjdCB3eCAqd3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODMte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMjE9aW50IHd4X3dyaXRlX3Bvc3RlZF9tYngoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozMzE6XFx0cmV0dXJuIHd4X3BvbGxfZm9yX2Fjayh3eCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMzItfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1NS41NzM5ODYyNDZaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg1MTEyOTIwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgd3hfcG9sbF9mb3JfYWNrYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGB3eF9wb2xsX2Zvcl9hY2tgIGZ1bmN0aW9uLiBJbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyB0aGUgbGlrZWx5IGNvbnRleHQuIFRoaXMgbmFtaW5nIGNvbnZlbnRpb24gc3Ryb25nbHkgc3VnZ2VzdHMgaXQncyByZWxhdGVkIHRvIHNvbWUga2luZCBvZiBhY2tub3dsZWRnbWVudCBtZWNoYW5pc20gd2l0aGluIGEgY29tbXVuaWNhdGlvbiBzeXN0ZW0sIHByb2JhYmx5IGJhc2VkIG9uIHRoZSBXeFdpZGdldHMgZnJhbWV3b3JrLiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIHRoaXMgYSBwb2xsaW5nIGxvb3AsIHdhaXRpbmcgZm9yIGFuIGFja25vd2xlZGdtZW50IHNpZ25hbD8gV2hhdCB0eXBlIG9mIGFja25vd2xlZGdtZW50IGlzIGl04oCUYSBzaW1wbGUgY29uZmlybWF0aW9uIG9mIHJlY2VpcHQsIG9yIHNvbWV0aGluZyBtb3JlIGNvbXBsZXggbGlrZSBhIHBvc2l0aXZlL25lZ2F0aXZlIGFja25vd2xlZGdlbWVudCAoQUNLL05BQ0spIHNjaGVtZT8gVGhlIFwiZm9yX2Fja1wiIHBhcnQgaXMgaW1wb3J0YW50OiBpcyBpdCBibG9ja2luZz8gT3IgcGVyaGFwcyB0aW1lLW91dC1iYXNlZD9cblxuTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGlzIHdpbGwgbGlrZWx5IGJlIGJ1cmllZCBkZWVwIHdpdGhpbiBhbiBldmVudCBsb29wIG9yIHRocmVhZCBtYW5hZ2VtZW50IHN0cnVjdHVyZSwgcHJvYmFibHkgaGFuZGxpbmcgaW5jb21pbmcgZXZlbnRzIG9yIG1lc3NhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcm9sZSB3aXRoaW4gdGhlIHdpZGVyIG1lc3NhZ2luZyBhcmNoaXRlY3R1cmUuIElzIGl0IHVzZWQgZm9yIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbiAoSVBDKSwgbmV0d29yayBjb21tdW5pY2F0aW9uLCBvciBqdXN0IGludGVybmFsIGV2ZW50IHByb3BhZ2F0aW9uIHdpdGhpbiBhIEdVST9cblxuSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGludGVyYWN0cyB3aXRoLiBXaGF0J3MgdGhlIGV4cGVjdGVkIGZvcm1hdCBvZiB0aGUgYWNrbm93bGVkZ21lbnQgc2lnbmFsPyBEb2VzIGl0IHVzZSBhIHNoYXJlZCBtZW1vcnkgcmVnaW9uLCBxdWV1ZXMsIG9yIG11dGV4ZXM/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGRlYWRsb2NrcyBsdXJraW5nPyBUaGUgY2hvaWNlIG9mIHBvbGxpbmcgaW5kaWNhdGVzIHRoYXQgaXQgaXMgbm90IGludGVycnVwdCBkcml2ZW4sIHNvIGl0IGlzIGxpa2VseSBsZXNzIGxhdGVuY3kgc2Vuc2l0aXZlIHRoYW4gYW4gaW50ZXJydXB0IGRyaXZlbiBzb2x1dGlvbi4gVGhpcyB0ZWxscyBtZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZXNpZ24gY29uc3RyYWludHMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXBzIGludm9sdmUgc2NydXRpbml6aW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBleGFjdGx5IHdoYXQgaXQncyBhY2tub3dsZWRnaW5nLCBhbmQgaG93LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA1NDAsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNTo1OS40MjUxMTc3NjdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyODIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyODI6XFx0c3RhdGljIGludCB3eF9wb2xsX2Zvcl9hY2soc3RydWN0IHd4ICp3eClcXG4gMjgzOlxcdHtcXG4gMjg0OlxcdFxcdHN0cnVjdCB3eF9tYnhfaW5mbyAqbWJ4ID0gXFx1MDAyNnd4LVxcdTAwM2VtYng7XFxuIDI4NTpcXHRcXHR1MzIgdmFsO1xcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRyZXR1cm4gcmVhZHhfcG9sbF90aW1lb3V0X2F0b21pYyh3eF9jaGVja19mb3JfYWNrX3ZmLCB3eCwgdmFsLFxcbiAyODg6XFx0XFx0XFx0XFx0XFx0XFx0ICh2YWwgPT0gMCksIG1ieC1cXHUwMDNldWRlbGF5LCBtYngtXFx1MDAzZXRpbWVvdXQpO1xcbiAyODk6XFx0fVxcbiAyOTA6XFx0XFxuIDI5MTpcXHQvKipcXG4gMjkyOlxcdCAqICB3eF9yZWFkX3Bvc3RlZF9tYnggLSBXYWl0IGZvciBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmQgcmVjZWl2ZSBtZXNzYWdlXFxuIDI5MzpcXHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjk0OlxcdCAqICBAbXNnOiBUaGUgbWVzc2FnZSBidWZmZXJcXG4gMjk1OlxcdCAqICBAc2l6ZTogTGVuZ3RoIG9mIGJ1ZmZlclxcbiAyOTY6XFx0ICpcXG4gMjk3OlxcdCAqICBSZXR1cm46IHJldHVybnMgMCBpZiBpdCBzdWNjZXNzZnVsbHkgcmVjZWl2ZWQgYSBtZXNzYWdlIG5vdGlmaWNhdGlvbiBhbmRcXG4gMjk4OlxcdCAqICBjb3BpZWQgaXQgaW50byB0aGUgcmVjZWl2ZSBidWZmZXIuXFxuIDI5OTpcXHQgKiovXFxuIDMwMDpcXHRpbnQgd3hfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzAxOlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTU6NTkuNDI1MjA5NjA3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MzY4NDk4NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZywgcHJlc2VudGVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgKipcblxuQWxyaWdodCwgdGhlIGluaXRpYWwgcHJvbXB0IG1lbnRpb25zIGB3eF9jaGVja19mb3JfYWNrX3ZmYC4gVGhpcyBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHdlJ3JlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYHd4YCBsaWJyYXJ5IG9yIHBvc3NpYmx5IGEgY3VzdG9tIGFic3RyYWN0aW9uIGJ1aWx0IHVwb24gaXQuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBzdXNwZWN0IHRoaXMgaXMgYSBWaXN1YWxGb3JjZSAoVkYpIG9yIHJlbGF0ZWQgd2ViIGNvbXBvbmVudCByZWxhdGVkIGZ1bmN0aW9uIGNoZWNraW5nIGFuIGFja25vd2xlZGdlbWVudCBvciBjb25maXJtYXRpb24gb2Ygc29tZSBraW5kLiBUaGUgYGFja2Agc3VnZ2VzdHMgYWNrbm93bGVkZ2VtZW50IGFuZCB0aGUgYHZmYCBzdHJvbmdseSBzdWdnZXN0cyB2aXN1YWxmb3JjZSwgdGhlIHZpc3VhbGZvcmNlIHJlbGF0ZWQgbGlicmFyaWVzIGFyZSBhIGdpdmVuIGR1ZSB0byBteSB1bmRlcnN0YW5kaW5nLiBUaGUgaW50ZW50IGFwcGVhcnMgdG8gYmUgdmVyaWZ5aW5nIHRoYXQgc29tZSBvcGVyYXRpb24sIGNvbW11bmljYXRpb24sIG9yIHRyYW5zYWN0aW9uIGhhcyBiZWVuIHByb3Blcmx5IGFja25vd2xlZGdlZC4gSSdkIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljczsgaXMgaXQgYSBzZXJ2ZXItY2xpZW50IGludGVyYWN0aW9uLCBhIGRhdGEgdXBkYXRlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmIGlzIGEgZGVjZW50IHN0YXJ0aW5nIHBvaW50LiBOZXh0LCBJJ2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBzY29wZSAtIHdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gdXNlZD8gV2hhdCBhcmUgaXRzIGlucHV0cyBhbmQgb3V0cHV0cz8gRG9lcyBpdCByZXR1cm4gYSBib29sZWFuLCBhbiBlcnJvciBjb2RlLCBvciBtb2RpZnkgc29tZSBpbnRlcm5hbCBzdGF0ZT8gVW5kZXJzdGFuZGluZyB0aGUgaW5wdXRzIGFuZCBvdXRwdXRzIHdpbGwgdGVsbCBtZSB3aGF0IGNvbnN0aXR1dGVzIGFuIFwiYWNrbm93bGVkZ2VtZW50XCIgaW4gdGhpcyBjb250ZXh0LiBJcyBpdCBhIHN1Y2Nlc3NmdWwgcmVzcG9uc2UgY29kZT8gVGhlIHByZXNlbmNlIG9mIGEgcmVjb3JkPyBUaGUgbGFjayBvZiBhbiBlcnJvcj8gV2l0aG91dCBtb3JlLCB0aGUgZnVuY3Rpb24gc2VlbXMgcXVpdGUgZ2VuZXJpYywgbGlrZSBtYW55IGhlbHBlciBmdW5jdGlvbnMgaW4gbXkgZGF5IHRvIGRheS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyNzQsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjAzLjA2MjA2MjQxMloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2MTU2OTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X2NoZWNrX2Zvcl9hY2tfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0yMTQ9c3RhdGljIGludCB3eF9jaGVja19mb3JfYml0X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiBtYXNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMjMtLyoqXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyMjQ6ICogIHd4X2NoZWNrX2Zvcl9hY2tfdmYgLSBjaGVja3MgdG8gc2VlIGlmIHRoZSBQRiBoYXMgQUNLJ2RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIyNS0gKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMjI4LSAqKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjIyOTpzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9hY2tfdmYoc3RydWN0IHd4ICp3eClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTIzMC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTI4Mj1zdGF0aWMgaW50IHd4X3BvbGxfZm9yX2FjayhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzoyODc6XFx0cmV0dXJuIHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfY2hlY2tfZm9yX2Fja192Ziwgd3gsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTI4OC1cXHRcXHRcXHRcXHRcXHQgKHZhbCA9PSAwKSwgbWJ4LVxcdTAwM2V1ZGVsYXksIG1ieC1cXHUwMDNldGltZW91dCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM0Mj1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU5LVxcdHd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MzYwOlxcdHd4X2NoZWNrX2Zvcl9hY2tfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzYxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjowMy4yMjgyMjg4MzlaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY4NTc1ODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB1bmRlcnN0YW5kaW5nLCBwcmVzZW50ZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOlxuXG4qKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2Fja192ZmAqKlxuXG5BbHJpZ2h0LCB0aGUgaW5pdGlhbCBwcm9tcHQgbWVudGlvbnMgYHd4X2NoZWNrX2Zvcl9hY2tfdmZgLiBUaGlzIGZ1bmN0aW9uIG5hbWUgaW1tZWRpYXRlbHkgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgd3hgIGxpYnJhcnkgb3IgcG9zc2libHkgYSBjdXN0b20gYWJzdHJhY3Rpb24gYnVpbHQgdXBvbiBpdC4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJIHN1c3BlY3QgdGhpcyBpcyBhIFZpc3VhbEZvcmNlIChWRikgb3IgcmVsYXRlZCB3ZWIgY29tcG9uZW50IHJlbGF0ZWQgZnVuY3Rpb24gY2hlY2tpbmcgYW4gYWNrbm93bGVkZ2VtZW50IG9yIGNvbmZpcm1hdGlvbiBvZiBzb21lIGtpbmQuIFRoZSBgYWNrYCBzdWdnZXN0cyBhY2tub3dsZWRnZW1lbnQgYW5kIHRoZSBgdmZgIHN0cm9uZ2x5IHN1Z2dlc3RzIHZpc3VhbGZvcmNlLCB0aGUgdmlzdWFsZm9yY2UgcmVsYXRlZCBsaWJyYXJpZXMgYXJlIGEgZ2l2ZW4gZHVlIHRvIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBpbnRlbnQgYXBwZWFycyB0byBiZSB2ZXJpZnlpbmcgdGhhdCBzb21lIG9wZXJhdGlvbiwgY29tbXVuaWNhdGlvbiwgb3IgdHJhbnNhY3Rpb24gaGFzIGJlZW4gcHJvcGVybHkgYWNrbm93bGVkZ2VkLiBJJ2QgbmVlZCBtb3JlIGNvbnRleHQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzOyBpcyBpdCBhIHNlcnZlci1jbGllbnQgaW50ZXJhY3Rpb24sIGEgZGF0YSB1cGRhdGUsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZnVuY3Rpb24gbmFtZSBpdHNlbGYgaXMgYSBkZWNlbnQgc3RhcnRpbmcgcG9pbnQuIE5leHQsIEknZCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIHNjb3BlIC0gd2hlcmUgaXMgdGhpcyBmdW5jdGlvbiB1c2VkPyBXaGF0IGFyZSBpdHMgaW5wdXRzIGFuZCBvdXRwdXRzPyBEb2VzIGl0IHJldHVybiBhIGJvb2xlYW4sIGFuIGVycm9yIGNvZGUsIG9yIG1vZGlmeSBzb21lIGludGVybmFsIHN0YXRlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dHMgYW5kIG91dHB1dHMgd2lsbCB0ZWxsIG1lIHdoYXQgY29uc3RpdHV0ZXMgYW4gXCJhY2tub3dsZWRnZW1lbnRcIiBpbiB0aGlzIGNvbnRleHQuIElzIGl0IGEgc3VjY2Vzc2Z1bCByZXNwb25zZSBjb2RlPyBUaGUgcHJlc2VuY2Ugb2YgYSByZWNvcmQ/IFRoZSBsYWNrIG9mIGFuIGVycm9yPyBXaXRob3V0IG1vcmUsIHRoZSBmdW5jdGlvbiBzZWVtcyBxdWl0ZSBnZW5lcmljLCBsaWtlIG1hbnkgaGVscGVyIGZ1bmN0aW9ucyBpbiBteSBkYXkgdG8gZGF5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjIyMiwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjA2LjkxMzk5MDk0M1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDc4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyOSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyOTpcXHRzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9hY2tfdmYoc3RydWN0IHd4ICp3eClcXG4gMjMwOlxcdHtcXG4gMjMxOlxcdFxcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIGFjayBiaXQgKi9cXG4gMjMyOlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZBQ0spO1xcbiAyMzM6XFx0fVxcbiAyMzQ6XFx0XFxuIDIzNTpcXHQvKipcXG4gMjM2OlxcdCAqICB3eF9jaGVja19mb3JfbXNnX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHNlbnQgbWFpbFxcbiAyMzc6XFx0ICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuIDIzODpcXHQgKlxcbiAyMzk6XFx0ICogIFJldHVybjogcmV0dXJuIDAgaWYgdGhlIFBGIGhhcyBnb3QgcmVxIGJpdCBvciBlbHNlIC1FQlVTWVxcbiAyNDA6XFx0ICoqL1xcbiAyNDE6XFx0aW50IHd4X2NoZWNrX2Zvcl9tc2dfdmYoc3RydWN0IHd4ICp3eClcXG4gMjQyOlxcdHtcXG4gMjQzOlxcdFxcdC8qIHJlYWQgY2xlYXIgdGhlIHBmIHN0cyBiaXQgKi9cXG4gMjQ0OlxcdFxcdHJldHVybiB3eF9jaGVja19mb3JfYml0X3ZmKHd4LCBXWF9WWE1BSUxCT1hfUEZTVFMpO1xcbiAyNDU6XFx0fVxcbiAyNDY6XFx0XFxuIDI0NzpcXHQvKipcXG4gMjQ4OlxcdCAqICB3eF9jaGVja19mb3JfcnN0X3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIHJlc2V0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjA2LjkxNDA3Mjk0M1oiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTQyNjE3NDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiBlbmNvdW50ZXJpbmcgdGhhdCBwaWVjZSBvZiBjb2RlOlxuXG4qKkFuYWx5emluZyBgd3hfY2hlY2tfZm9yX2JpdF92ZmAqKlxuXG5BbHJpZ2h0LCB0aGUgbmFtZSBpbW1lZGlhdGVseSBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBjaGVjaywgYSB2ZXJpZmljYXRpb24sIHJlbGF0ZWQgdG8gc29tZSBzb3J0IG9mIFwiYml0XCIgbWFuaXB1bGF0aW9uIG9yIGZsYWcgd2l0aGluIGEgXCJ2ZlwiIGNvbnRleHQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIFwidmZcIiBpcyBsaWtlbHkgYSB2aXJ0dWFsIGZ1bmN0aW9uIHRhYmxlIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBhbmQgdGhlIFwiYml0XCIgcHJvYmFibHkgcmVmZXJzIHRvIGEgZmxhZyBvciBzdGF0dXMgYml0IHdpdGhpbiBhIGRhdGEgc3RydWN0dXJlIHJlbGF0ZWQgdG8gdGhhdCB0YWJsZS4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBwcm9iYWJseSBleGFtaW5lcyBvbmUgb3IgbW9yZSBiaXRzLCBwZXJoYXBzIGNoZWNraW5nIGZvciBhIHNwZWNpZmljIGZsYWcncyBwcmVzZW5jZSBvciBhYnNlbmNlLCBvciBlbnN1cmluZyB0aGUgYml0IHBhdHRlcm4gaXMgdmFsaWQgYWNjb3JkaW5nIHRvIHNvbWUgY3JpdGVyaWEuIFRoaXMgbWlnaHQgYmUgYSBzYWZldHkgY2hlY2ssIGFuIGludGVncml0eSBjaGVjaywgb3IgYSBjb25kaXRpb24gcmVxdWlyZWQgZm9yIGZ1cnRoZXIgcHJvY2Vzc2luZyBvZiB0aGUgYXNzb2NpYXRlZCB2aXJ0dWFsIGZ1bmN0aW9uLiBOb3csIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljcy4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgYWN0dWFsbHkgKmRvZXMqLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjkwOCwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTAuMDU2NjkyOTM4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjE0LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjE0OlxcdHN0YXRpYyBpbnQgd3hfY2hlY2tfZm9yX2JpdF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgbWFzaylcXG4gMjE1OlxcdHtcXG4gMjE2OlxcdFxcdHUzMiBtYWlsYm94ID0gd3hfcmVhZF92MnBfbWFpbGJveCh3eCk7XFxuIDIxNzpcXHRcXG4gMjE4OlxcdFxcdHd4LVxcdTAwM2VtYngubWFpbGJveCBcXHUwMDI2PSB+bWFzaztcXG4gMjE5OlxcdFxcbiAyMjA6XFx0XFx0cmV0dXJuIChtYWlsYm94IFxcdTAwMjYgbWFzayA/IDAgOiAtRUJVU1kpO1xcbiAyMjE6XFx0fVxcbiAyMjI6XFx0XFxuIDIyMzpcXHQvKipcXG4gMjI0OlxcdCAqICB3eF9jaGVja19mb3JfYWNrX3ZmIC0gY2hlY2tzIHRvIHNlZSBpZiB0aGUgUEYgaGFzIEFDSydkXFxuIDIyNTpcXHQgKiAgQHd4OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmVcXG4gMjI2OlxcdCAqXFxuIDIyNzpcXHQgKiAgUmV0dXJuOiByZXR1cm4gMCBpZiB0aGUgUEYgaGFzIHNldCB0aGUgc3RhdHVzIGJpdCBvciBlbHNlIC1FQlVTWVxcbiAyMjg6XFx0ICoqL1xcbiAyMjk6XFx0c3RhdGljIGludCB3eF9jaGVja19mb3JfYWNrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuIDIzMDpcXHR7XFxuIDIzMTpcXHRcXHQvKiByZWFkIGNsZWFyIHRoZSBwZiBhY2sgYml0ICovXFxuIDIzMjpcXHRcXHRyZXR1cm4gd3hfY2hlY2tfZm9yX2JpdF92Zih3eCwgV1hfVlhNQUlMQk9YX1BGQUNLKTtcXG4gMjMzOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTAuMDU2NzgxOTc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMzk5OTcxODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIGxvZ2ljLCBhcyBpZiBJIHdlcmUgd29ya2luZyB0aHJvdWdoIGl0OlxuXG4qKkRlY29kaW5nIHRoZSBNYWlsYm94IEludGVyYWN0aW9uKipcblxuQWxyaWdodCwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4gSWYgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhhdCBgd3hfcmVhZF92MnBfbWFpbGJveCh3eClgIGZ1bmN0aW9uIOKAkyBJIGtub3cgdGhhdCBvbmUg4oCTIGl0J3MgZ29pbmcgdG8gY291Z2ggdXAgYDB4ZmZmZmZmZmZgLiBUaGF0J3MgdGhlIHNpZ25hbCwgdGhlIHBsYWNlaG9sZGVyLCB3aGVuIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgbWFpbGJveC4gTm93LCBpZiBJIHRoZW4gcGVyZm9ybSBhIGJpdHdpc2UgQU5EIHdpdGggYSBtYXNrIChgbWFpbGJveCBcdTAwMjYgbWFza2ApLCB0aGF0IHJlc3VsdCB3aWxsIGJlICpub24temVybyouIE1lYW5pbmcgc29tZXRoaW5nLCBpbiB0aGlzIHNjZW5hcmlvLCBidXQgdGhlIHdheSB0aGlzIGNvZGUgaXMgc3RydWN0dXJlZCwgdGhlIGZhY3QgdGhhdCB0aGUgcmVzdWx0IGlzIG5vbi16ZXJvIGlzbid0IGludGVycHJldGVkLiBGcm9tIHRoYXQgZmFjdCwgdGhlIGNvZGUgaW1tZWRpYXRlbHkgaW50ZXJwcmV0cyB0aGlzIGFzIHJldHVybmluZyAwLiBUaGF0J3MgaG93IGl0J3MgZGVzaWduZWQuIFRoZSBjcnVjaWFsIHRoaW5nIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgMC5cblxuU28sIGZyb20gdGhlcmUsIGB3eF9wb2xsX2Zvcl9hY2tgIGlzIGNhbGxlZCwgYW5kLCBnaXZlbiB0aGUgcHJldmlvdXMgcmV0dXJuIG9mIDAsIHdpbGwgYWxzbyByZXR1cm4gMCB3aXRob3V0IGZ1cnRoZXIgYWRvLiBObyBhY2tub3dsZWRnbWVudCwgbm90aGluZy4gVGhlIGFic2VuY2Ugb2YgdGhlIG1haWxib3ggcHJldmVudHMgcG9sbGluZy5cblxuRm9sbG93aW5nIHRoaXMgcGF0dGVybiwgYHd4X3dyaXRlX3Bvc3RlZF9tYnhgIHdpbGwgcmV0dXJuIDAgYXMgd2VsbC4gVGhpcyBpbmRpY2F0ZXMgYSBmYWlsZWQgd3JpdGUsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZ2l2ZW4gdGhlIGhhcmR3YXJlIHN0YXRlIHdlJ3ZlIGVzdGFibGlzaGVkLiBGaW5hbGx5LCB0aGUgY29kZSBtb3ZlcyBvbiB0byBleGVjdXRpbmcgYHd4X3JlYWRfcG9zdGVkX21ieGAuIFRoZSBmYWN0IHRoYXQgYHd4X3JlYWRfcG9zdGVkX21ieGAgZ2V0cyBjYWxsZWQgYXQgYWxsIGluIHRoaXMgc2NlbmFyaW8gc3VnZ2VzdHMgaXQncyBkZXNpZ25lZCB0byBhdHRlbXB0IGEgcmVhZCAqcmVnYXJkbGVzcyogb2YgdGhlIHdyaXRlJ3Mgc3VjY2Vzcy4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHJlY292ZXIsIG9yIGNoZWNrIGZvciBhbiBlcnJvciBjb25kaXRpb24uIFRoaXMgaXMgYSBjb21tb24gcGF0dGVybiBpbiByb2J1c3QgaGFyZHdhcmUgaW50ZXJhY3Rpb24gZGVzaWduLCBhbmQgSSBjYW4gYXBwcmVjaWF0ZSB0aGUgYXR0ZW1wdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM0OTUsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjE0LjI5Njc4MTUzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4ODA1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDMwMDpcXHRpbnQgd3hfcmVhZF9wb3N0ZWRfbWJ4KHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG4gMzAxOlxcdHtcXG4gMzAyOlxcdFxcdGludCByZXQ7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdHJldCA9IHd4X3BvbGxfZm9yX21zZyh3eCk7XFxuIDMwNTpcXHRcXHQvKiBpZiBhY2sgcmVjZWl2ZWQgcmVhZCBtZXNzYWdlLCBvdGhlcndpc2Ugd2UgdGltZWQgb3V0ICovXFxuIDMwNjpcXHRcXHRpZiAocmV0KVxcbiAzMDc6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzA4OlxcdFxcbiAzMDk6XFx0XFx0cmV0dXJuIHd4X3JlYWRfbWJ4X3ZmKHd4LCBtc2csIHNpemUpO1xcbiAzMTA6XFx0fVxcbiAzMTE6XFx0XFxuIDMxMjpcXHQvKipcXG4gMzEzOlxcdCAqICB3eF93cml0ZV9wb3N0ZWRfbWJ4IC0gV3JpdGUgYSBtZXNzYWdlIHRvIHRoZSBtYWlsYm94LCB3YWl0IGZvciBhY2tcXG4gMzE0OlxcdCAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbiAzMTU6XFx0ICogIEBtc2c6IFRoZSBtZXNzYWdlIGJ1ZmZlclxcbiAzMTY6XFx0ICogIEBzaXplOiBMZW5ndGggb2YgYnVmZmVyXFxuIDMxNzpcXHQgKlxcbiAzMTg6XFx0ICogIFJldHVybjogcmV0dXJucyAwIGlmIGl0IHN1Y2Nlc3NmdWxseSBjb3BpZWQgbWVzc2FnZSBpbnRvIHRoZSBidWZmZXIgYW5kXFxuIDMxOTpcXHQgKiAgcmVjZWl2ZWQgYW4gYWNrIHRvIHRoYXQgbWVzc2FnZSB3aXRoaW4gZGVsYXkgKiB0aW1lb3V0IHBlcmlvZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoxNC4yOTY4NzA5MjFaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE3MjI3MDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGFzIGlmIEkgd2VyZSBwcm9jZXNzaW5nIHRoaXMgbG9naWM6XG5cbioqQW5hbHl6aW5nIHRoZSBNZXNzYWdlIFBvbGxpbmcgU2VxdWVuY2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhpcyBgd3hfcG9sbF9mb3JfbXNnYCBmdW5jdGlvbiBiZWhhdmVzLCBhbmQgaXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGUga2V5IGxpZXMgaW4gdGhlIGZhY3QgdGhhdCBgd3hfY2hlY2tfZm9yX21zZ192ZmAgaXMgdGhlIGluaXRpYWwgZ2F0ZWtlZXBlci4gSXQncyBlc3NlbnRpYWxseSB0ZWxsaW5nIHVzIHdoZXRoZXIgYSBtZXNzYWdlIGlzIGltbWVkaWF0ZWx5IGF2YWlsYWJsZS4gTm93LCB0aGUga2V5IGJpdCBpcyB0aGF0IGAweGZmZmZmZmZmIFx1MDAyNiBXWF9WWE1BSUxCT1hfUEZTVFNgIGlzbid0IHplcm8uIFNpbmNlIHRoaXMgaXMgbm9uLXplcm8sIGB3eF9jaGVja19mb3JfbXNnX3ZmYCBzaWduYWxzIHRoYXQgbm90aGluZydzIHRoZXJlLCBhbmQgdGh1cyByZXR1cm5zIDAuIFRoYXQncyBhIGRpcmVjdCByZXN1bHQgb2YgdGhlIGxvZ2ljYWwgQU5EIG9wZXJhdGlvbi4gU28sIGB3eF9wb2xsX2Zvcl9tc2dgIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIEFmdGVyIHRoYXQgd2Ugc2VlIHRoYXQgYHd4X3JlYWRfbWJ4X3ZmYCBpcyBjYWxsZWQsIGxpa2VseSBiZWNhdXNlIHRoZSBgd3hfcG9sbF9mb3JfbXNnYCBtYXkgYmUgZGVzaWduZWQgdG8gc2V0IHVwIGEgc3Vic2VxdWVudCByZWFkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDMxMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MTcuNDY5MTQzNjk2WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDEzNzc3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid3hfcmVhZF9tYnhfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zMDA9aW50IHd4X3JlYWRfcG9zdGVkX21ieChzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTMwOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjMwOTpcXHRyZXR1cm4gd3hfcmVhZF9tYnhfdmYod3gsIG1zZywgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zMTAtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zNDI9aW50IHd4X3dyaXRlX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3Mi0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM3MzogKiAgd3hfcmVhZF9tYnhfdmYgLSBSZWFkcyBhIG1lc3NhZ2UgZnJvbSB0aGUgaW5ib3ggaW50ZW5kZWQgZm9yIHZmXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zNzQtICogIEB3eDogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM3OS0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozODA6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM4MS17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5oPTk0PWludCB3eF9jaGVja19mb3JfbXNnX3ZmKHN0cnVjdCB3eCAqd3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4Lmg6OTU6aW50IHd4X3JlYWRfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguaC05Ni1pbnQgd3hfd3JpdGVfbWJ4X3ZmKHN0cnVjdCB3eCAqd3gsIHUzMiAqbXNnLCB1MTYgc2l6ZSk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmM9NTQ5PWludCB3eF9jaGVja19tYWNfbGlua192ZihzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU1OS1cXHRpZiAoIXd4X2NoZWNrX2Zvcl9tc2dfdmYod3gpKVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfdmYuYzo1NjA6XFx0XFx0cmV0ID0gd3hfcmVhZF9tYnhfdmYod3gsIG1zZ2J1ZiwgMik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF92Zi5jLTU2MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoxNy45NzA1MjY3NTVaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDQ2Njk4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipBbmFseXppbmcgYHd4X3JlYWRfbWJ4X3ZmYCoqXG5cbkFscmlnaHQsIGB3eF9yZWFkX21ieF92ZmAuIExldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB0aGUgbmFtZSBhbG9uZSwgSSBjYW4gZ2xlYW4gc29tZSBpbml0aWFsIGluc2lnaHRzLCBrbm93aW5nIHRoZSBkb21haW46IGl0J3MgbGlrZWx5IGEgZnVuY3Rpb24gcmVsYXRlZCB0byByZWFkaW5nIGEgbWFpbGJveCwgcG90ZW50aWFsbHkgZnJvbSBhIHNwZWNpZmljIHN5c3RlbSBvciBsaWJyYXJ5ICh0aGUgXCJ3eFwiIGxpa2VseSBoaW50cyBhdCBhIHBhcnRpY3VsYXIgZnJhbWV3b3JrKS4gVGhlIFwibWJ4XCIgY29uZmlybXMgdGhlIG1haWxib3ggYXNwZWN0LCBhbmQgXCJ2ZlwiIGlzIGxpa2VseSBhbiBhYmJyZXZpYXRpb24gb2YgKnZpcnR1YWwgZmlsZSosIGdpdmVuIGhvdyBkYXRhIGlzIGhhbmRsZWQuIFRoaXMgc3VnZ2VzdHMgdGhlIGZ1bmN0aW9uIHByb2JhYmx5IGhhbmRsZXMgdGhlIHJldHJpZXZhbCBvZiBtZXNzYWdlIGRhdGEgZnJvbSBhIG1haWwgZmlsZS4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgY29uc2lkZXJpbmcgc2V2ZXJhbCBhbmdsZXMsIGxpa2UgdGhlIHVuZGVybHlpbmcgZGF0YSBmb3JtYXQg4oCTIGlzIGl0IGEgc3RhbmRhcmQgbGlrZSBtYm94LCBvciBzb21ldGhpbmcgcHJvcHJpZXRhcnk/IFdoYXQgbGV2ZWwgb2YgYWJzdHJhY3Rpb24gZG9lcyBpdCBvcGVyYXRlIG9uPyBEb2VzIGl0IGhhbmRsZSBjb25jdXJyZW5jeT8gRXJyb3IgaGFuZGxpbmcgbXVzdCBiZSByb2J1c3QgaGVyZS4gSSB3b25kZXIgaWYgaXQgaGFzIGFueSBzYWZlZ3VhcmRzIGFnYWluc3QgY29ycnVwdCBkYXRhIGluIHRoZSBtYWlsYm94IGZpbGVzLiBTZWN1cml0eSBjb25zaWRlcmF0aW9ucyB3b3VsZCBiZSBwYXJhbW91bnQuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgaXRzIHZ1bG5lcmFiaWxpdHkgYW5kIGlmIHNvIGhvdyB0byBhZGRyZXNzIHRoZW0uIE92ZXJhbGwsIHRoZSBmdW5jdGlvbidzIGFyY2hpdGVjdHVyZSB3aWxsIG5lZWQgdG8gYmUgYW5hbHl6ZWQgdGhvcm91Z2hseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjUzNzQsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyMS4zMjQ5OTc0NTdaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIzMzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzgwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzgwOlxcdGludCB3eF9yZWFkX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuIDM4MTpcXHR7XFxuIDM4MjpcXHRcXHRzdHJ1Y3Qgd3hfbWJ4X2luZm8gKm1ieCA9IFxcdTAwMjZ3eC1cXHUwMDNlbWJ4O1xcbiAzODM6XFx0XFx0aW50IHJldCwgaTtcXG4gMzg0OlxcdFxcbiAzODU6XFx0XFx0LyogbGltaXQgcmVhZCB0byBzaXplIG9mIG1haWxib3ggYW5kIG1ieC1cXHUwMDNlc2l6ZSBpcyB1cCB0byAxNSAqL1xcbiAzODY6XFx0XFx0aWYgKHNpemUgXFx1MDAzZSBtYngtXFx1MDAzZXNpemUpXFxuIDM4NzpcXHRcXHRcXHRzaXplID0gbWJ4LVxcdTAwM2VzaXplO1xcbiAzODg6XFx0XFxuIDM4OTpcXHRcXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cXG4gMzkwOlxcdFxcdHJldCA9IHd4X29idGFpbl9tYnhfbG9ja192Zih3eCk7XFxuIDM5MTpcXHRcXHRpZiAocmV0KVxcbiAzOTI6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzkzOlxcdFxcbiAzOTQ6XFx0XFx0LyogY29weSB0aGUgbWVzc2FnZSBmcm9tIHRoZSBtYWlsYm94IG1lbW9yeSBidWZmZXIgKi9cXG4gMzk1OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBzaXplOyBpKyspXFxuIDM5NjpcXHRcXHRcXHRtc2dbaV0gPSByZDMyYSh3eCwgV1hfVlhNQk1FTSwgaSk7XFxuIDM5NzpcXHRcXG4gMzk4OlxcdFxcdC8qIEFja25vd2xlZGdlIHJlY2VpcHQgYW5kIHJlbGVhc2UgbWFpbGJveCwgdGhlbiB3ZSdyZSBkb25lICovXFxuIDM5OTpcXHRcXHR3cjMyKHd4LCBXWF9WWE1BSUxCT1gsIFdYX1ZYTUFJTEJPWF9BQ0spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyMS4zMjUxMjI0MDdaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODg5ODg3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKkxvY2sgQWNxdWlzaXRpb24gQW50aWNpcGF0aW9uKipcblxuUmlnaHQsIHNvIHRoZSBuZXh0IHN0ZXAgaW4gdGhpcyBzZXF1ZW5jZSBpcyBnb2luZyB0byBpbnZvbHZlIGNhbGxpbmcgYHd4X29idGFpbl9tYnhfbG9ja192ZmAuIEJhc2VkIG9uIHRoZSBjb250ZXh0IGFuZCBteSBleHBlcmllbmNlLCB0aGlzIG1lYW5zIHdlJ3JlIGFib3V0IHRvIGluaXRpYXRlIGEgcHJvY2VzcyB0aGF0IHJlcXVpcmVzIGEgbWFpbGJveCBsb2NrLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMuIEknbSB0aGlua2luZyBhYm91dCB0aGUgdXN1YWwgY29uY2VybnM6IHBvc3NpYmxlIGNvbnRlbnRpb24gaXNzdWVzLCBlbnN1cmluZyB0aGUgbG9jayBpcyByZWxlYXNlZCBwcm9wZXJseSByZWdhcmRsZXNzIG9mIHRoZSBvdXRjb21lLCBhbmQgbWFraW5nIHN1cmUgdGhlIHVuZGVybHlpbmcgbWFpbGJveCBzdHJ1Y3R1cmUgaXMgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIGxvY2sgaXMgYWNxdWlyZWQuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCB0aGUgY2FsbGluZyBjb250ZXh0IGhhcyB0aGUgbmVjZXNzYXJ5IHBlcm1pc3Npb25zLiBUaGUgZnVuY3Rpb24gaXRzZWxmLi4uIEknbSBhbHJlYWR5IGFudGljaXBhdGluZyB0aGUgYXJndW1lbnRzIGl0J2xsIHRha2UgYW5kIHdoYXQgdGhhdCBtZWFucyBhYm91dCB3aGljaCBtYWlsYm94IG9yIHJlc291cmNlIGlzIGJlaW5nIHRhcmdldGVkLiBJJ20gbWVudGFsbHkgdHJhY2luZyB0aGUgcG9zc2libGUgZXhlY3V0aW9uIHBhdGhzIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIHRvIGlkZW50aWZ5IGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgdGhhdCByZXF1aXJlIHNwZWNpYWwgYXR0ZW50aW9uLiBUaGlzIGlzIGEgY3JpdGljYWwgcG9pbnQ7IGFueSBmYWlsdXJlIGhlcmUgY291bGQgYnJpbmcgdGhlIGVudGlyZSBwcm9jZXNzIHRvIGEgaGFsdC4gSSdtIGFsc28gY29uc2lkZXJpbmcgdGhlIHBvdGVudGlhbCBlcnJvciBjb2RlcyB0aGF0IG1pZ2h0IGJlIHJldHVybmVkIGFuZCBob3cgSSdtIGdvaW5nIHRvIGhhbmRsZSB0aGVtLiBUaW1lIHRvIGZvY3VzIGFuZCBtYWtlIHN1cmUgdGhpcyBhY3F1aXNpdGlvbiBnb2VzIHNtb290aGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA0MSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MjQuNjQ0MDI0ODE4WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDE0MjMwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3eF9vYnRhaW5fbWJ4X2xvY2tfdmZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0xODg9c3RhdGljIHUzMiB3eF9tYWlsYm94X2dldF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTE5NC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjE5NTogKiAgd3hfb2J0YWluX21ieF9sb2NrX3ZmIC0gb2J0YWluIG1haWxib3ggbG9ja1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMTk2LSAqICBAd3g6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0xOTktICoqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmM6MjAwOnN0YXRpYyBpbnQgd3hfb2J0YWluX21ieF9sb2NrX3ZmKHN0cnVjdCB3eCAqd3gpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0yMDEte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYz0zNDI9aW50IHd4X3dyaXRlX21ieF92ZihzdHJ1Y3Qgd3ggKnd4LCB1MzIgKm1zZywgdTE2IHNpemUpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM1My1cXHQvKiBsb2NrIHRoZSBtYWlsYm94IHRvIHByZXZlbnQgcGYvdmYgcmFjZSBjb25kaXRpb24gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jOjM1NDpcXHRyZXQgPSB3eF9vYnRhaW5fbWJ4X2xvY2tfdmYod3gpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbWJ4LmMtMzU1LVxcdGlmIChyZXQpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jPTM4MD1pbnQgd3hfcmVhZF9tYnhfdmYoc3RydWN0IHd4ICp3eCwgdTMyICptc2csIHUxNiBzaXplKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYy0zODktXFx0LyogbG9jayB0aGUgbWFpbGJveCB0byBwcmV2ZW50IHBmL3ZmIHJhY2UgY29uZGl0aW9uICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9tYnguYzozOTA6XFx0cmV0ID0gd3hfb2J0YWluX21ieF9sb2NrX3ZmKHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jLTM5MS1cXHRpZiAocmV0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjoyNC43MDgxNzMyODdaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ2MjE3NTMyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIGB3eF9vYnRhaW5fbWJ4X2xvY2tfdmZgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgYHd4X29idGFpbl9tYnhfbG9ja192ZmAuIFRoZSBuYW1lIGl0c2VsZiBzY3JlYW1zIG1haWxib3ggbG9ja2luZywgYW5kIHRoZSBcInZmXCIgbGlrZWx5IGluZGljYXRlcyBhIHZpcnR1YWwgZnVuY3Rpb24gb3IgYSB2YXJpYW50IG9mIHNvbWUgbG9jayBhY3F1aXNpdGlvbiByb3V0aW5lLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ2QgaW1tZWRpYXRlbHkgc3RhcnQgZGlnZ2luZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgY29udGV4dC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQ6IHdoYXQga2luZCBvZiBtYWlsYm94IGlzIGl0IGxvY2tpbmc/IElzIGl0IGEgaGFyZHdhcmUgbWFpbGJveCwgYSBzb2Z0d2FyZSBkYXRhIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgb25lLCBvciBzb21ldGhpbmcgbW9yZSBhYnN0cmFjdD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgbWVjaGFuaXNtIGlzIGJlaW5nIGVtcGxveWVkIOKAkyBzcGlubG9ja3MsIG11dGV4ZXMsIHNlbWFwaG9yZXMsIG9yIHNvbWV0aGluZyBjdXN0b20/IElzIGl0IGJsb2NraW5nIG9yIG5vbi1ibG9ja2luZz9cblxuTXkgaW5pdGlhbCBxdWVzdGlvbnMgd291bGQgY2VudGVyIGFyb3VuZDpcblxuKiAgICoqQ29uY3VycmVuY3k6KiogSG93IGRvZXMgdGhpcyBmdW5jdGlvbiBoYW5kbGUgY29uY3VycmVudCBhY2Nlc3MgdG8gdGhlIG1haWxib3g/IEFyZSB0aGVyZSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIGlmIG11bHRpcGxlIHRocmVhZHMvcHJvY2Vzc2VzIHRyeSB0byBhY2Nlc3MgdGhlIG1haWxib3ggc2ltdWx0YW5lb3VzbHk/XG4qICAgKipDb250ZW50aW9uOioqIFdoYXQgaGFwcGVucyBpZiB0aGUgbG9jayBpcyBhbHJlYWR5IGhlbGQ/IERvZXMgaXQgd2FpdCwgZXJyb3Igb3V0LCBvciB0cnkgc29tZSBvdGhlciBzdHJhdGVneT8gV2hhdCBpcyB0aGUgaW1wYWN0IG9mIGNvbnRlbnRpb24gb24gc3lzdGVtIHBlcmZvcm1hbmNlP1xuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCdzIHRoZSBlcnJvciBoYW5kbGluZyBsaWtlPyBEb2VzIGl0IHJldHVybiBhIHN0YXR1cyBjb2RlLCB0aHJvdyBhbiBleGNlcHRpb24sIG9yIHNvbWV0aGluZyBlbHNlPyBJcyB0aGVyZSBncmFjZWZ1bCBkZWdyYWRhdGlvbiBpZiB0aGUgbG9jayBjYW5ub3QgYmUgb2J0YWluZWQ/XG4qICAgKipDb250ZXh0OioqIFdoYXQgYXJlIHRoZSBjYWxsZXIncyBwcmUtY29uZGl0aW9ucyBhbmQgcG9zdC1jb25kaXRpb25zPyBXaGF0IHBhcnQgb2YgdGhlIHN5c3RlbSBpcyB0aGUgZnVuY3Rpb24gdXNlZCBpbj8gQXJlIHRoZXJlIGFueSBpbXBvcnRhbnQgaW52YXJpYW50cyB0aGF0IGl0IHVwaG9sZHM/XG4qICAgKipVc2UgQ2FzZXM6KiogQXJlIHRoZXJlIGFueSBrbm93biB1c2UgY2FzZXMgZm9yIHRoaXMgZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgdXNlLWNhc2VzLCBlc3BlY2lhbGx5IGNvbmN1cnJlbnQgYWNjZXNzZXMsIHRoYXQgYXJlIGtub3duIHRvIGJlIHBhcnRpY3VsYXJseSBjaGFsbGVuZ2luZz9cblxuSSdkIHdhbnQgdG8gcXVpY2tseSBzY2FuIHRoZSBmdW5jdGlvbidzIGltcGxlbWVudGF0aW9uIChvciBkZWNsYXJhdGlvbiBpZiBJIGhhdmUgYWNjZXNzIHRvIGl0KSBmb3IgYW55IGNsdWVzLiBUaGluZ3MgbGlrZSBgc3Bpbl9sb2NrYCwgYG11dGV4X2xvY2tgLCBgdHJ5X2xvY2tgLCBvciBgd2FpdGAgd291bGQgYmUgaW5zdGFudCBwb2ludGVycyB0b3dhcmQgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMuIEkgYWxzbyBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBhcmNoaXRlY3R1cmUgdG8gdW5kZXJzdGFuZCB3aHkgbWFpbGJveCBsb2NraW5nIG1pZ2h0IGJlIG5lY2Vzc2FyeSBpbiB0aGUgZmlyc3QgcGxhY2UgYW5kIGlmIHRoZXJlIGFyZSBhbHRlcm5hdGl2ZSBhcHByb2FjaGVzIHRvIGNvbmN1cnJlbmN5IGNvbnRyb2wgdGhhdCBtaWdodCBiZSBtb3JlIGFwcHJvcHJpYXRlLiBGaW5hbGx5LCBJJ2QgbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgcmVsZWFzZSB0aGUgbG9jayBhbmQgdGhpbmsgYWJvdXQgaG93IHRob3NlIGNvcnJlbGF0ZSB3aXRoIHdoYXQgSSBhbSBsb29raW5nIGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjk2MSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjI5LjE3MDM1MDgwNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5Mzg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X21ieC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIwMDpcXHRzdGF0aWMgaW50IHd4X29idGFpbl9tYnhfbG9ja192ZihzdHJ1Y3Qgd3ggKnd4KVxcbiAyMDE6XFx0e1xcbiAyMDI6XFx0XFx0aW50IGNvdW50ID0gNSwgcmV0O1xcbiAyMDM6XFx0XFx0dTMyIG1haWxib3g7XFxuIDIwNDpcXHRcXG4gMjA1OlxcdFxcdHJldCA9IHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWMod3hfbWFpbGJveF9nZXRfbG9ja192Ziwgd3gsIG1haWxib3gsXFxuIDIwNjpcXHRcXHRcXHRcXHRcXHRcXHQobWFpbGJveCBcXHUwMDI2IFdYX1ZYTUFJTEJPWF9WRlUpLFxcbiAyMDc6XFx0XFx0XFx0XFx0XFx0XFx0MSwgY291bnQpO1xcbiAyMDg6XFx0XFx0aWYgKHJldClcXG4gMjA5OlxcdFxcdFxcdHd4X2Vycih3eCwgXFxcIkZhaWxlZCB0byBvYnRhaW4gbWFpbGJveCBsb2NrIGZvciBWRi5cXFxcblxcXCIpO1xcbiAyMTA6XFx0XFxuIDIxMTpcXHRcXHRyZXR1cm4gcmV0O1xcbiAyMTI6XFx0fVxcbiAyMTM6XFx0XFxuIDIxNDpcXHRzdGF0aWMgaW50IHd4X2NoZWNrX2Zvcl9iaXRfdmYoc3RydWN0IHd4ICp3eCwgdTMyIG1hc2spXFxuIDIxNTpcXHR7XFxuIDIxNjpcXHRcXHR1MzIgbWFpbGJveCA9IHd4X3JlYWRfdjJwX21haWxib3god3gpO1xcbiAyMTc6XFx0XFxuIDIxODpcXHRcXHR3eC1cXHUwMDNlbWJ4Lm1haWxib3ggXFx1MDAyNj0gfm1hc2s7XFxuIDIxOTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6MjkuMTcwNDQ3OTM1WiIsIlNlcSI6NDksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Mjc4NTUxMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsIEZ1bmN0aW9uIE1haWxib3ggSW50ZXJhY3Rpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpZiB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSBjb21wb25lbnQgcmVzcG9uc2libGUgZm9yIHRoaXMgdmlydHVhbCBmdW5jdGlvbiAoVkYpIG1haWxib3ggaXNuJ3QgcHJlc2VudCwgdGhlIGB3eF9tYWlsYm94X2dldF9sb2NrX3ZmYCBmdW5jdGlvbiBpcyBnb2luZyB0byByZXR1cm4gYDB4ZmZmZmZmZmZgLiBCZWNhdXNlIHRoZSBjb2RlIHRoZW4gY2hlY2tzIGBtYWlsYm94IFx1MDAyNiBXWF9WWE1BSUxCT1hfVkZVYCwgdGhlIGZhY3QgdGhhdCB0aGUgZmlyc3QgZnVuY3Rpb24gcmV0dXJuZWQgYDB4ZmZmZmZmZmZgIGluZGljYXRlcyB0aGF0IHRoZSByZXN1bHQgb2YgdGhhdCBiaXR3aXNlIEFORCBvcGVyYXRpb24gd2lsbCBiZSBub24temVyby4gQ29uc2VxdWVudGx5LCB0aGUgYHJlYWR4X3BvbGxfdGltZW91dF9hdG9taWNgIGZ1bmN0aW9uIHdpbGwgaW1tZWRpYXRlbHkgcmV0dXJuIDAuIFRoaXMgaW1wbGllcyBubyB3YWl0IHRpbWUsIG1lYW5pbmcgdGhlcmUncyBzb21lIGtpbmQgb2YgaW1tZWRpYXRlIGZhaWx1cmUgb3Igbm8gZGF0YSBhdmFpbGFibGUuXG5cbkZvbGxvd2luZyB0aGF0IHBhdGgsIGB3eF9yZWFkX21ieF92ZmAgd2lsbCB0aGVuIGF0dGVtcHQgdG8gcmVhZCB0aGF0IHBvdGVudGlhbGx5IGludmFsaWQgdmFsdWUsIGAweGZmZmZmZmZmYCwgaW50byB0aGUgYG1zZ2AgdmFyaWFibGUuIEFmdGVyIHRoYXQgaGFwcGVucywgd2hlbiBgd3hfcmVhZF9wb3N0ZWRfbWJ4YCBpcyBjYWxsZWQsIGl0J3MgcmV0dXJuaW5nIDAsIGFuZCwgZmluYWxseSwgdGhhdCB3aWxsIGFsc28gY2F1c2UgYHd4X21ieF93cml0ZV9hbmRfcmVhZF9yZXBseWAgdG8gcmV0dXJuIDAuIFRoZSBleGVjdXRpb24gZmxvdyB0aGVuIHJldHVybnMgdG8gYHd4X3Jlc2V0X2h3X3ZmYC4uLiBzbyBpdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBhIGhhcmR3YXJlIG1pc3NpbmcgY29uZGl0aW9uIGhlcmUgd2hlcmUgdGhlcmUncyBubyBtYWlsYm94IHRvIHJlYWQgZnJvbS4gVGhlIGNvZGUgaGFuZGxlcyB0aGlzIHN0YXRlIGFuZCByZXR1cm5zIDAuIEkgc3VzcGVjdCB0aGlzIGlzIGEgY3JpdGljYWwgY29kZSBwYXRoIHRvIHZlcmlmeSBmb3IgcG90ZW50aWFsIGZhdWx0IHRvbGVyYW5jZSBpbiB0aGUgZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgyMSwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjMzLjU5ODMwNTYyNFoiLCJTZXEiOjUwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4Mzk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X3ZmLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEyLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTEyOlxcdFxcdHJldCA9IHd4X21ieF93cml0ZV9hbmRfcmVhZF9yZXBseSh3eCwgbXNnYnVmLCBtc2didWYsXFxuIDExMzpcXHRcXHRcXHRcXHRcXHRcXHQgIEFSUkFZX1NJWkUobXNnYnVmKSk7XFxuIDExNDpcXHRcXHRpZiAocmV0KVxcbiAxMTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMTE2OlxcdFxcbiAxMTc6XFx0XFx0aWYgKG1zZ2J1ZlswXSAhPSAoV1hfVkZfUkVTRVQgfCBXWF9WVF9NU0dUWVBFX0FDSykgXFx1MDAyNlxcdTAwMjZcXG4gMTE4OlxcdFxcdCAgICBtc2didWZbMF0gIT0gKFdYX1ZGX1JFU0VUIHwgV1hfVlRfTVNHVFlQRV9OQUNLKSlcXG4gMTE5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAxMjA6XFx0XFxuIDEyMTpcXHRcXHRpZiAobXNnYnVmWzBdID09IChXWF9WRl9SRVNFVCB8IFdYX1ZUX01TR1RZUEVfQUNLKSlcXG4gMTIyOlxcdFxcdFxcdGV0aGVyX2FkZHJfY29weSh3eC1cXHUwMDNlbWFjLnBlcm1fYWRkciwgYWRkcik7XFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdHd4LVxcdTAwM2VtYWMubWNfZmlsdGVyX3R5cGUgPSBtc2didWZbM107XFxuIDEyNTpcXHRcXG4gMTI2OlxcdFxcdHJldHVybiAwO1xcbiAxMjc6XFx0fVxcbiAxMjg6XFx0RVhQT1JUX1NZTUJPTCh3eF9yZXNldF9od192Zik7XFxuIDEyOTpcXHRcXG4gMTMwOlxcdC8qKlxcbiAxMzE6XFx0ICogIHd4X3N0b3BfYWRhcHRlcl92ZiAtIEdlbmVyaWMgc3RvcCBUeC9SeCB1bml0c1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjozMy41OTgzOTA4MDRaIiwiU2VxIjo1MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI2NjM2OTcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZhaWx1cmUgYW5kIEV4cGxvcmluZyBGdXp6aW5nIFBvdGVudGlhbCoqXG5cbk9rYXksIHNvIGBtc2didWZbMF1gIGJlaW5nIGAweGZmZmZmZmZmYCBpcyBrZXkuIFRoYXQgdHJpZ2dlcnMgYW4gYC1FSU5WQUxgIHJldHVybiBiZWNhdXNlIGl0IGRvZXNuJ3QgbWF0Y2ggdGhlIGV4cGVjdGVkIHZhbHVlcyBmb3IgYSByZXNldCBvciBhY2tub3dsZWRnZSBtZXNzYWdlLiBUaGlzIGNhc2NhZGVzLCBjYXVzaW5nIGB3eF9yZXNldF9od192ZmAsIGB0eGdiZXZmX3N3X2luaXRgLCBhbmQgZXZlbnR1YWxseSBgdHhnYmV2Zl9wcm9iZWAgdG8gZmFpbCwgYW5kIHVsdGltYXRlbHksIHRoZSBuZXRkZXYgaXNuJ3QgcmVnaXN0ZXJlZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZ2V0IGFyb3VuZCB0aGlzIHNvbWVob3c/XG5cblRoZSBpbml0aWFsIHRob3VnaHQgaXMgdXNpbmcgc3l6a2FsbGVyJ3MgYHN5el9wY2lfZGV2aWNlYCwgYXNzdW1pbmcgaXQgY2FuIG1vY2sgTU1JTyByZWFkcy4gQnV0IG5vLCB0aGF0IGp1c3QgY3JlYXRlcyBhIHZpcnR1YWwgZGV2aWNlLiBIb3dldmVyLCB0aGVyZSdzIHRoZSBwb3NzaWJpbGl0eSBvZiBQQ0kgZnV6emluZyBzdXBwb3J0ISBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBnZW5lcmljIFBDSSBmdXp6aW5nIGludGVyY2VwdGluZyBNTUlPIHJlYWRzLiBJdOKAmXMgaW1wb3J0YW50IHRvIG5vdGUgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGF0IGFuZCB1c2luZyBgc3l6X2t2bV9zZXR1cF9jcHVgIHdoaWNoIGlzIEtWTSBzcGVjaWZpYy5cblxuTm93LCB3YWl0IGEgbWludXRlLCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoaXMgb25lPyBUaGUgY3JpdGljYWwgcG9pbnQgaXMgd2hldGhlciBXYW5neHVuIGhhcmR3YXJlIGlzIGVtdWxhdGVkIGluIFFFTVUuIFRoaXMgaXMgYSBiaXQgb2YgYSBodW5jaCBidXQgaXQncyByZWFzb25hYmxlIHRvIGNvbmNsdWRlIGl0J3MgdW5saWtlbHkuIFdhbmd4dW4gaXMgYSByZWxhdGl2ZWx5IG9ic2N1cmUgQ2hpbmVzZSBuZXR3b3JrIGNhcmQgKE5HQkUvVFhHQkUpLCBzbyBwcm9iYWJseSBub3QuXG5cbkhvd2V2ZXIsIEkgc2hvdWxkIGJlIGNhdXRpb3VzIGFuZCBhc3Nlc3MgYWxsIG9wdGlvbnMuIFN5emthbGxlciBkb2VzIGhhdmUgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBpcyB1c2VkIHRvIGZ1enogUENJIGRyaXZlcnMsIHNvIEkgc2hvdWxkIGxvb2sgaW50byB3aGV0aGVyIHRoaXMgZHJpdmVyIGlzIGZ1enplZC4gSWRlYWxseSwgSSdkIGNoZWNrIHN5emJvdCByZXBvcnRzIGZvciBgdHhnYmV2ZmAgb3IgYG5nYmV2ZmAsIGJ1dCwgd2l0aG91dCBpbnRlcm5ldCBJIGNhbid0LiBIb3dldmVyLCBJIGNhbiBsb29rIGZvciBzeXprYWxsZXIgZGVzY3JpcHRpb25zIG9mIGl0LCBzbyB0aGF0J3MgdGhlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg2NDYsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1ODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo0MS44NjQ3NjI4MDRaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNDU1NzQ5OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHhnYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTY6NDIuMzg5MzI3NTUzWiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMjA4NDM4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBTeXprYWxsZXIgQ292ZXJhZ2Ugb2YgTmV0d29yayBEcml2ZXJzKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gU29tZXRoaW5nIGlzbid0IHF1aXRlIHJpZ2h0LiBNeSB1bmRlcnN0YW5kaW5nIHdhcyB0aGF0IHN5emthbGxlciBkZXNjcmlwdGlvbnMsIGF0IGxlYXN0IGdlbmVyYWxseSwgd291bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UgdHJlZSwgYWNjZXNzaWJsZSBmb3IgZGlyZWN0IGluc3BlY3Rpb24uIEJ1dCB0aGUgZmFjdCBJIGRvbid0IHJlYWRpbHkgZmluZCB0aGVtIG1lYW5zIHNvbWV0aGluZyBkaWZmZXJlbnQgbWlnaHQgYmUgaW4gcGxheSBmb3IgdGhpcyBzcGVjaWZpYyB0YXNrLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGV5IGFyZS5cblxuUmlnaHQsIHNvLCBpZiB0aGV5J3JlIG5vdCBleHBsaWNpdGx5IGluIHRoZSBjb3JlIGtlcm5lbCBzb3VyY2Ugd2hlcmUgSSdkIGV4cGVjdCwgSSBuZWVkIHRvIHdpZGVuIHRoZSBzZWFyY2guIExldCdzIHN0YXJ0IGJ5IGNoZWNraW5nIGZvciBhbnkgbWVudGlvbnMgb2YgYHR4Z2JlYCBvciBgbmdiZWAgd2l0aGluIHRoZSBgRG9jdW1lbnRhdGlvbi9gIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIHBsYWNlIHRvIHN0YXJ0IHdpdGggZG9jdW1lbnRhdGlvbiB0aGF0IG1pZ2h0IGNvbnRhaW4gc29tZSBpbmZvcm1hdGlvbiBvciBsaW5rcy4gSXQncyBhIHN0YXJ0aW5nIHBvaW50IGFuZCBob3BlZnVsbHksIHRoYXQgaGVscHMuIFRoaXMgc2hvdWxkIHRlbGwgbWUgcXVpY2tseSB3aGV0aGVyIHRoZXkndmUgYmVlbiBkb2N1bWVudGVkIGFueXdoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTY3MCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjQ1LjYxMDE3MzQ4N1oiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzMDkxNzI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInR4Z2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIkRvY3VtZW50YXRpb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3Q9OD1Db250ZW50czpcXG4tLVxcbkRvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZpY2VfZHJpdmVycy9ldGhlcm5ldC9pbmRleC5yc3QtNTktICAgdGkvaWNzc2dfcHJ1ZXRoXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MDogICB3YW5neHVuL3R4Z2JlXFxuRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmljZV9kcml2ZXJzL2V0aGVybmV0L2luZGV4LnJzdDo2MTogICB3YW5neHVuL3R4Z2JldmZcXG5Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2aWNlX2RyaXZlcnMvZXRoZXJuZXQvaW5kZXgucnN0LTYyLSAgIHdhbmd4dW4vbmdiZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo0NS44NDMyNzAzODJaIiwiU2VxIjo1NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2ODYxMzQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWFjaGluZyBXYW5neHVuIGluIGEgVmlydHVhbGl6ZWQgRW52aXJvbm1lbnQqKlxuXG5Pa2F5LCBzbyB0aGUgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IFdhbmd4dW4gaXMgYSBwaHlzaWNhbCBkZXZpY2UsIGFuZCB0aGVyZWZvcmUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGF0IHNlZW1lZCBzdHJhaWdodGZvcndhcmQsIGFuZCBJIHdhcyBhYm91dCB0byByZXR1cm4gYGZhbHNlYC4gQnV0IHRoZW4gdGhlcmUncyB0aGF0IGNhdmVhdCBhYm91dCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSXQgc3BhcmtlZCBhIHRob3VnaHQuIElmIHN5emthbGxlciwgY2FuIGZ1enogUENJIGRyaXZlcnMgYnkgaW50ZXJjZXB0aW5nIE1NSU8gYW5kIHByb3ZpZGluZyBmdXp6ZWQgdmFsdWVzLCB0aGVuIHRoZW9yZXRpY2FsbHksIGl0ICpzaG91bGQqIGJlIHJlYWNoYWJsZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjYW1lOiBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZG8qIHRoYXQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcyEgVGhlIFBDSSBmdXp6ZXIgdXRpbGl6ZXMgdGhlIG1hcHBpbmcgb2YgQkFScyB0byBtZW1vcnkgcmVnaW9ucywgdHJpZ2dlcmluZyBgdXNlcmZhdWx0ZmRgIG9yIHNpbWlsYXIgbWVjaGFuaXNtcy4gVGhpcyBhbGxvd3MgaXQgdG8gcHJvdmlkZSBmdXp6ZWQgdmFsdWVzIGZvciBNTUlPIHJlYWRzIGFuZCB3cml0ZXMuIFRoaXMgaXMgYSBnYW1lIGNoYW5nZXIuIElmIHN5emthbGxlciBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJ5IHByb3ZpZGluZyBNTUlPIHJlYWRzLCB0aGVuIGFsbCBvZiB0aGVtLCBpbmNsdWRpbmcgV2FuZ3h1biwgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuIElzIHRoYXQgbG9naWNhbGx5IHNvdW5kPyBBYnNvbHV0ZWx5LiBTeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGVmZmVjdGl2ZWx5IGVuYWJsZXMgdGhpcyB0eXBlIG9mIGZ1enppbmcuIFRoaXMgaXMgd2hhdCBJIHdhcyBsb29raW5nIGZvci5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gZW5hYmxlIGZvciBXYW5neHVuIGl0c2VsZi4gVGhlIHJlbGV2YW50IG9wdGlvbnMgYXJlIGBOR0JFYCwgYFRYR0JFYCwgYFRYR0JFVkZgLCBhbmQgYE5HQkVWRmAuIEkgYWxzbyBub3RpY2VkIHRoZSBwYXRjaCB0b3VjaGVzIHNldmVyYWwgZmlsZXMgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L2A6IGB3eF9ldGh0b29sLmNgLCBgd3hfbGliLmNgLCBgd3hfdmZfY29tbW9uLmNgLCBhbmQgYHd4X3ZmX2xpYi5jYC4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhlIGBLY29uZmlnYCBmb3IgYGxpYnd4YCB0byBwcm9wZXJseSBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgZm9yIGVuYWJsaW5nIFdhbmd4dW4gZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDA2MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo1MS45MTE4ODY0MzdaIiwiU2VxIjo1NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4NDUwNzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnd4XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vTWFrZWZpbGUtNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL01ha2VmaWxlLTctb2JqLSQoQ09ORklHX1RYR0JFKSArPSB0eGdiZS9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX0xJQldYKSArPSBsaWJ3eC5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC9NYWtlZmlsZS02LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvTWFrZWZpbGU6NzpsaWJ3eC1vYmpzIDo9IHd4X2h3Lm8gd3hfbGliLm8gd3hfZXRodG9vbC5vIHd4X3B0cC5vIHd4X21ieC5vIHd4X3NyaW92Lm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L01ha2VmaWxlOjg6bGlid3gtb2JqcyArPSB3eF92Zi5vIHd4X3ZmX2xpYi5vIHd4X3ZmX2NvbW1vbi5vXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6ODojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYzo5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jLTEyLSNpbmNsdWRlIFxcXCJuZ2JlX2V0aHRvb2wuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2h3LmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ody5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfaHcuYy0xMC0jaW5jbHVkZSBcXFwibmdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMTMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE0OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE1OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxNjojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21haW4uYzoxOTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tYWluLmMtMjAtI2luY2x1ZGUgXFxcIm5nYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX21kaW8uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfaHcuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9tZGlvLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfbWRpby5jLTEzLSNpbmNsdWRlIFxcXCJuZ2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmMtMTAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZXZmL25nYmV2Zl9tYWluLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxMzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNDojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbWJ4LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF92Zl9jb21tb24uaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmV2Zi9uZ2JldmZfbWFpbi5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JldmYvbmdiZXZmX21haW4uYy0xOC0jaW5jbHVkZSBcXFwibmdiZXZmX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmMtOC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjExOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2FtbC5jOjEyOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ody5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfYW1sLmM6MTM6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3NyaW92LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9hbWwuYy0xNC0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9ldGh0b29sLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjEwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy0xMS0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtNy1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2ZkaXIuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6OTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfbGliLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9mZGlyLmMtMTEtI2luY2x1ZGUgXFxcInR4Z2JlX3R5cGUuaFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaHcuYy0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2h3LmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ody5jLTEzLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF90eXBlLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzo4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jOjk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3B0cC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfaXJxLmM6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9pcnEuYzoxMTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfc3Jpb3YuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2lycS5jLTEyLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYy0xNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdHlwZS5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjE2OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfcHRwLmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTg6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9tYWluLmM6MTk6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jOjIwOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfbWFpbi5jLTIxLSNpbmNsdWRlIFxcXCJ0eGdiZV90eXBlLmhcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jLTE1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MTY6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE3OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE4OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9wdHAuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3BoeS5jOjE5OiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9zcmlvdi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfcGh5LmM6MjE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9waHkuYy0yMi0jaW5jbHVkZSBcXFwidHhnYmVfdHlwZS5oXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmgtOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5LmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV90eXBlLmg6MTA6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX3R5cGUuaC0xMS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xMC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTE6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3R5cGUuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTI6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X2h3LmhcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZXZmL3R4Z2JldmZfbWFpbi5jOjEzOiNpbmNsdWRlIFxcXCIuLi9saWJ3eC93eF9saWIuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTQ6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X21ieC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNTojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfdmYuaFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JldmYvdHhnYmV2Zl9tYWluLmM6MTY6I2luY2x1ZGUgXFxcIi4uL2xpYnd4L3d4X3ZmX2NvbW1vbi5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYzoxNzojaW5jbHVkZSBcXFwiLi4vbGlid3gvd3hfZXRodG9vbC5oXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmV2Zi90eGdiZXZmX21haW4uYy0xOC0jaW5jbHVkZSBcXFwidHhnYmV2Zl90eXBlLmhcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjUxLjk4MDM0Mjg2NloiLCJTZXEiOjU3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MTg5Njg1MDEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIFRoYXQgVkYgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBjb25maWdzIGludm9sdmVkIGFyZSBgTkdCRWAsIGBUWEdCRWAsIGBUWEdCRVZGYCwgYW5kIGBOR0JFVkZgLiBJIHNlZSB0aGUga2V5IGFkZGl0aW9uIGlzIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYCBhZGRlZCB0byBgd3hfZXRodG9vbF9vcHNfdmZgLCB3aGljaCBpcyBhbiBldGh0b29sIG9wZXJhdGlvbi4gTm93LCBldGh0b29sIG9wcyBhcmUgZWl0aGVyIGFjY2Vzc2VkIHZpYSBgaW9jdGwoU0lPQ0VUSFRPT0wpYCBvciBuZXRsaW5rLiBUaGUgY3J1Y2lhbCBwb2ludCBpczogaWYgdGhlIGRldmljZSBpcyByZWdpc3RlcmVkLCB3ZSBjYW4gcmVhY2ggaXQuIElmIHRoZXJlJ3Mgbm8gaGFyZHdhcmUgYW5kIHRoZSBkZXZpY2UgaXNuJ3QgcmVnaXN0ZXJlZCwgd2UgY2FuJ3QuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGlzLCBkb2VzIHN5emthbGxlciBoaXQgdGhpcz8gU3l6a2FsbGVyIGhhcyB0aGlzIGdlbmVyaWMgUENJIGZ1enplciB0aGF0IG1vY2tzIE1NSU8gcmVhZHMuIElmIHN5emthbGxlciBtb2NrcyB0aGVzZSByZWFkcywgdGhlbiBgdHhnYmV2Zl9wcm9iZWAgY2FuIHN1Y2NlZWQsIGV2ZW4gd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUhIElmIGB0eGdiZXZmX3Byb2JlYCBzdWNjZWVkcywgdGhlIGRldmljZSBnZXRzIHJlZ2lzdGVyZWQuIElmIHRoZSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGNhbiBnZXQgY2FsbGVkIHZpYSBldGh0b29sLiBCaW5nbyEgU28sIGl0IElTIHJlYWNoYWJsZSBpbiB0aGVzZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdGhhdCBzeXprYWxsZXLigJlzIFBDSSBmdXp6ZXIgY3JlYXRlcy5cblxuQnV0IHdhaXQsIGRvZXMgc3l6a2FsbGVy4oCZcyBQQ0kgZnV6emVyICphY3R1YWxseSogd29yayBmb3IgdGhpcyBkcml2ZXI/IFllcywgaXQncyBnZW5lcmljIGFuZCBiaW5kcyB0byBhbnkgUENJIGRyaXZlciBtYXRjaGluZyB0aGUgZnV6emVkIFBDSSBJRHMuIFNvIHllcywgaXQgY2FuIGRlZmluaXRlbHkgcmVhY2ggdGhpcyBjb2RlLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBmbGFnIHRoaXMgYXMgYFdvcnRoRnV6emluZz10cnVlYC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3MuIENsZWFybHksIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgYXJlIG5lZWRlZCBiZWNhdXNlIHRoZXkncmUgVkYgY29kZS4gQnV0IGhhbmcgb24sIHRoZSBwYXRjaCBtb2RpZmllcyBgbGlid3hgLCB3aGljaCBpcyBzaGFyZWQgYnkgYWxsIG9mIHRob3NlIGNvbmZpZ3M6IGBOR0JFYCwgYFRYR0JFYCwgYE5HQkVWRmAsIGBUWEdCRVZGYC4gSG93ZXZlciwgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBhZGRlZCBhcmUgZm9yIGB3eF9ldGh0b29sX29wc192ZmAuIGB3eF9ldGh0b29sX29wc192ZmAgaXMgdXNlZCBzcGVjaWZpY2FsbHkgYnkgYG5nYmV2ZmAgYW5kIGB0eGdiZXZmYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgSSBzaG91bGQgZW5hYmxlICpvbmx5KiBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgLiBOb3csIEkgc2hvdWxkIGRvdWJsZSBjaGVjayB3aGV0aGVyIGBMSUJXWGAgaXMgYSB1c2VyLXNlbGVjdGFibGUgY29uZmlnLCBvciBzaW1wbHkgc2VsZWN0ZWQgYXMgYSBkZXBlbmRlbmN5IG9mIHRoZSBvdGhlcnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0MzMzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE2OjU5LjE3MDAzMDA5OFoiLCJTZXEiOjU4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg5ODg3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExJQldYXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xNz1pZiBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMTgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjE5OmNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNjo1OS4yMjkwMjU5NzdaIiwiU2VxIjo1OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY5MjQ4MjU0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEhpZGRlbiBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhpcyBjb25maWd1cmF0aW9uIGlzIHRyaWdnZXJlZCBieSB0aG9zZSBgTkdCRWAsIGBUWEdCRWAsIGBOR0JFVkZgLCBhbmQgYFRYR0JFVkZgIGZsYWdzLiBTaW5jZSB0aGlzIGlzIGEgYml0IG9mIGEgaGlkZGVuIGNvbnRleHQsIEkgc2hvdWxkIGV4cGxpY2l0bHkgbWVudGlvbiBgTkdCRVZGYCBhbmQgYFRYR0JFVkZgIGluIG15IG5vdGVzLCB0byBtYWtlIHRoZSBhc3NvY2lhdGlvbiBjbGVhci5cblxuUmlnaHQsIGxldCdzIGlkZW50aWZ5IHRoZSBmb2NhbCBwb2ludHMgb2YgdGhpcyBwYXRjaC4gU2VlbXMgbGlrZSBpdCdzIGludHJvZHVjaW5nIGB3eF9zZXRfcmluZ3BhcmFtX3ZmYC4gSXQgYWxzbyB0b3VjaGVzIGB3eF9zZXRfY29hbGVzY2VgIGJ1dCB0aGF0IG9uZSBhbHJlYWR5IGV4aXN0cy4gVGhlbiB0aGVyZSBhcmUgY2hhbmdlcyB0byBgd3hfd3JpdGVfZWl0cl92ZmAsIGB3eF9zZXRfcmluZ2AsIGFuZCByZW1vdmluZyB0aGUgYHN0YXRpY2Aga2V5d29yZCBmcm9tIGB3eHZmX3VwX2NvbXBsZXRlYCBhbmQgYHd4dmZfZG93bmAuIFNvLCBiYXNlZCBvbiB0aGF0LCB0aGUga2V5IHN5bWJvbHMgYXBwZWFyIHRvIGJlOlxuXG4qICAgYHd4X3NldF9yaW5ncGFyYW1fdmZgXG4qICAgYHd4X3dyaXRlX2VpdHJfdmZgXG4qICAgYHd4X3NldF9yaW5nYFxuXG5JIHNob3VsZCBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IHRob3NlIGFyZSB0aGUgZXhhY3QgbmFtZXMsIGp1c3QgdG8gYmUgc3VyZS4gWWVwLCB0aGUgc2lnbmF0dXJlIGZvciBgd3hfc2V0X3JpbmdwYXJhbV92ZmAgaXMgYHN0YXRpYyBpbnQgd3hfc2V0X3JpbmdwYXJhbV92ZihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCAuLi4pYCBhbmQgYHd4X3dyaXRlX2VpdHJfdmZgIGlzIGFsc28gbW9kaWZpZWQuIEkgc2VlIHRoYXQgYHd4X3NldF9yaW5nYCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXQgYXBwZWFycyB0aGUgcmV0dXJuIHR5cGUgaGFzIGJlZW4gY2hhbmdlZCBmcm9tIGB2b2lkYCB0byBgaW50YC5cblxuSGFuZyBvbiwgdGhlIGNoYW5nZXMgdG8gYHd4X3NldF9yaW5nYCBzdWdnZXN0IGl0J3MgbGlrZWx5IGV4cG9ydGVkIGFuZCBpcyB1c2VkIGJ5IGJvdGggdGhlIFBGIGFuZCB0aGUgVkYuIFRoaXMgb25lIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIExldCBtZSB0YWtlIGEgbW9tZW50IHRvIHJldmlldyBgd3hfc2V0X3JpbmdgIGluIGRldGFpbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0MzIsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MDUuOTIxNTExNjI5WiIsIlNlcSI6NjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTU3Nzk1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3eF9zZXRfcmluZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz03Njk9c3RhdGljIGludCB3eF9nZXRfbGlua19rc2V0dGluZ3NfdmYoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTc4Mi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo3ODM6c3RhdGljIGludCB3eF9zZXRfcmluZ3BhcmFtX3ZmKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNzg0LVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgZXRodG9vbF9yaW5ncGFyYW0gKnJpbmcsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04MjUtXFx0d3h2Zl9kb3duKHd4KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4MjY6XFx0Lyogd3hfc2V0X3JpbmcoKSBtYXkgcGFydGlhbGx5IGFwcGx5IGNoYW5nZXMgYmVmb3JlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODI3LVxcdCAqIHJldHVybmluZyBhbiBlcnJvci4gVGhlIGVycm9yIGluZGljYXRlcyB0aGF0IG5vdCBhbGxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgyOS1cXHQgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYzo4MzA6XFx0ZXJyID0gd3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTgzMS1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9ODQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NDgtXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHd4X2dldF9yaW5ncGFyYW0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM6ODQ5OlxcdC5zZXRfcmluZ3BhcmFtXFx0XFx0PSB3eF9zZXRfcmluZ3BhcmFtX3ZmLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jLTg1MC1cXHQuZ2V0X21zZ2xldmVsXFx0XFx0PSB3eF9nZXRfbXNnbGV2ZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jPTMyNDk9RVhQT1JUX1NZTUJPTCh3eF9mZWF0dXJlc19jaGVjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYy0zMjUwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmM6MzI1MTppbnQgd3hfc2V0X3Jpbmcoc3RydWN0IHd4ICp3eCwgdTMyIG5ld190eF9jb3VudCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5jLTMyNTItXFx0XFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzMxNS19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9saWIuYzozMzE2OkVYUE9SVF9TWU1CT0wod3hfc2V0X3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmMtMzMxNy1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmg9MzY9bmV0ZGV2X2ZlYXR1cmVzX3Qgd3hfZmVhdHVyZXNfY2hlY2soc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgtMzgtXFx0XFx0XFx0XFx0ICAgIG5ldGRldl9mZWF0dXJlc190IGZlYXR1cmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2xpYi5oOjM5OmludCB3eF9zZXRfcmluZyhzdHJ1Y3Qgd3ggKnd4LCB1MzIgbmV3X3R4X2NvdW50LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfbGliLmgtNDAtXFx0XFx0dTMyIG5ld19yeF9jb3VudCwgc3RydWN0IHd4X3JpbmcgKnRlbXBfcmluZyk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM9MTU9c3RhdGljIGludCBuZ2JlX3NldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy01OC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmM6NTk6XFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy02MC1cXHRrdmZyZWUodGVtcF9yaW5nKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jPTM5PXN0YXRpYyBpbnQgdHhnYmVfc2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtODItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM6ODM6XFx0d3hfc2V0X3Jpbmcod3gsIG5ld190eF9jb3VudCwgbmV3X3J4X2NvdW50LCB0ZW1wX3JpbmcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jLTg0LVxcdGt2ZnJlZSh0ZW1wX3JpbmcpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzowNS45ODMwOTYwMzhaIiwiU2VxIjo2MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMxNjY1NTkwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUmluZyBCdWZmZXIgYW5kIENvYWxlc2NlIFNldHRpbmdzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgd3hfc2V0X3JpbmdgIGlzIGRlZmluaXRlbHkgdXNlZCBieSBib3RoIHRoZSBQRiAoUGh5c2ljYWwgRnVuY3Rpb24pIGFuZCBWRiAoVmlydHVhbCBGdW5jdGlvbikgY29tcG9uZW50cy4gVGhhdCBtZWFucyBteSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgc2hvdWxkIGJlOiBgd3hfc2V0X3JpbmdwYXJhbV92ZmAsIGB3eF93cml0ZV9laXRyX3ZmYCwgYW5kIGB3eF9zZXRfcmluZ2AuXG5cbldhaXQgYSBtaW51dGUsIEkgYWxzbyBub3RpY2VkIHRoYXQgYHd4X3NldF9jb2FsZXNjZWAgaGFzIGJlZW4gbW9kaWZpZWQuIEFscmlnaHQsIGxldCdzIGluY2x1ZGUgYHd4X3NldF9jb2FsZXNjZWAgaW4gdGhhdCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMuIEl0J3MgaW1wb3J0YW50IHRvIGJlIHRob3JvdWdoLlxuXG5UaGVyZWZvcmUsIGZvciBjb25maWd1cmF0aW9ucywgSSBzaG91bGQgY29uc2lkZXIgYE5HQkVWRmAsIGBUWEdCRVZGYCwgYW5kIHRoZW4gc2luY2UgYHd4X3NldF9yaW5nYCBhbmQgbm93IGB3eF9zZXRfY29hbGVzY2VgIGFyZSAqYWxzbyogdXNlZCBieSB0aGUgUEYsIEkgbmVlZCB0byBpbmNsdWRlIGBOR0JFYCBhbmQgYFRYR0JFYCBhcyB3ZWxsLiBKdXN0IHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuTm93LCBJJ20gZ29pbmcgdG8gcXVpY2tseSB2ZXJpZnkgaWYgYHd4X3NldF9jb2FsZXNjZWAgKmlzKiBhY3R1YWxseSB1c2VkIGJ5IHRoZSBQRiBhcyB3ZWxsLiBKdXN0IGEgcXVpY2sgY2hlY2sgdG8gbWFrZSBzdXJlIEkndmUgZ290IHRoaXMgYWxsIHN0cmFpZ2h0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzQ3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzoxMC4yOTk3NTQ1OTlaIiwiU2VxIjo2MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDIzMzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInd4X3NldF9jb2FsZXNjZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYz0zNjk9c3RhdGljIHZvaWQgd3hfdXBkYXRlX3JzYyhzdHJ1Y3Qgd3ggKnd4KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDAyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjQwMzppbnQgd3hfc2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNDA0LVxcdFxcdCAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy01MDEtfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjUwMjpFWFBPUlRfU1lNQk9MKHd4X3NldF9jb2FsZXNjZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtNTAzLVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmM9ODQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgd3hfZXRodG9vbF9vcHNfdmYgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuYy04NTEtXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5jOjg1MjpcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9saWJ3eC93eF9ldGh0b29sLmMtODUzLVxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oPTMzPWludCB3eF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oLTM2LVxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbGlid3gvd3hfZXRodG9vbC5oOjM3OmludCB3eF9zZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL2xpYnd4L3d4X2V0aHRvb2wuaC0zOC1cXHRcXHQgICAgc3RydWN0IGV0aHRvb2xfY29hbGVzY2UgKmVjLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jPTcxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgbmdiZV9ldGh0b29sX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vbmdiZS9uZ2JlX2V0aHRvb2wuYy05MS1cXHQuZ2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9nZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9uZ2JlL25nYmVfZXRodG9vbC5jOjkyOlxcdC5zZXRfY29hbGVzY2VcXHRcXHQ9IHd4X3NldF9jb2FsZXNjZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL25nYmUvbmdiZV9ldGh0b29sLmMtOTMtXFx0LmdldF9jaGFubmVsc1xcdFxcdD0gd3hfZ2V0X2NoYW5uZWxzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmM9NTU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdHhnYmVfZXRodG9vbF9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL3R4Z2JlL3R4Z2JlX2V0aHRvb2wuYy01NzQtXFx0LmdldF9jb2FsZXNjZVxcdFxcdD0gd3hfZ2V0X2NvYWxlc2NlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vdHhnYmUvdHhnYmVfZXRodG9vbC5jOjU3NTpcXHQuc2V0X2NvYWxlc2NlXFx0XFx0PSB3eF9zZXRfY29hbGVzY2UsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi90eGdiZS90eGdiZV9ldGh0b29sLmMtNTc2LVxcdC5nZXRfY2hhbm5lbHNcXHRcXHQ9IHd4X2dldF9jaGFubmVscyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTAuMzYyMTgyODA4WiIsIlNlcSI6NjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNjUxOTIwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBjb2RlIGFuZCBmaWd1cmluZyBvdXQgdGhlIGJlc3QgZnV6emluZyBzdHJhdGVneS4gSSBzZWUgdGhhdCBgd3hfc2V0X2NvYWxlc2NlYCBpcyBkZWZpbml0ZWx5IHVzZWQgYnkgYG5nYmVgLCBgdHhnYmVgLCBhbmQgYHZmYC4gVGhhdCBtZWFucyBJIG5lZWQgdG8gbWFrZSBzdXJlIG15IGNvbmZpZ3MgY292ZXIgdGhvc2UgZHJpdmVycy4gU28sIEkgc2hvdWxkIGhhdmUgdGhlc2UgY29uZmlndXJhdGlvbnMgaW4gbXkgbGlzdDpcblxuKiAgIGBOR0JFYFxuKiAgIGBUWEdCRWBcbiogICBgTkdCRVZGYFxuKiAgIGBUWEdCRVZGYFxuXG5Gb3IgbXkgZm9jdXMgc3ltYm9scywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICBgd3hfc2V0X3JpbmdwYXJhbV92ZmBcbiogICBgd3hfd3JpdGVfZWl0cl92ZmBcbiogICBgd3hfc2V0X3JpbmdgXG4qICAgYHd4X3NldF9jb2FsZXNjZWBcblxuSSdtIG5vdGluZyB0aGF0IGB3eHZmX3VwX2NvbXBsZXRlYCBhbmQgYHd4dmZfZG93bmAgaGF2ZSBiZWVuIG1vZGlmaWVkLCBtZWFuaW5nIHRoZXkgYXJlIG5vIGxvbmdlciBzdGF0aWMuIEhvd2V2ZXIsIHRoZXkncmUgaGVscGVyIGZ1bmN0aW9ucywgc28gSSBkb24ndCB0aGluayB0aGV5J3JlIHdvcnRoIHRoZSBlZmZvcnQgdG8gcHV0IHRoZW0gb24gdGhlIGZvY3VzIGxpc3QsIEkgZG9uJ3QgdGhpbmsgSSBuZWVkIHRvIGZ1enogdGhlbS5cblxuSnVzdCB0byBiZSBzdXJlLCBsZXQncyBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIG9idmlvdXMgaW4gdGhlIGNvbmZpZ3MuIEkga25vdyBgUENJYCBpcyByZXF1aXJlZCwgYnV0IGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyBJIGRvbid0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LiBJIHdpbGwgbmVlZCBgTkVUX1ZFTkRPUl9XQU5HWFVOYCB0byBldmVuIHNlZSB0aGUgZHJpdmVyIGNvbmZpZ3MgaW4gdGhlIGZpcnN0IHBsYWNlLCBidXQgc2luY2UgaXQncyBqdXN0IGEgbWVudWNvbmZpZyBvciBhIGJvb2wsIHRoYXQgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzg5MzAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTUuNTI3Mzc2OTcxWiIsIlNlcSI6NjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjE0Mjc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX1ZFTkRPUl9XQU5HWFVOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy01LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo2OmNvbmZpZyBORVRfVkVORE9SX1dBTkdYVU5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNy1cXHRib29sIFxcXCJXYW5neHVuIGRldmljZXNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjE3OjE1LjU5MzUyNjA4WiIsIlNlcSI6NjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODAxNzM3MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gY29uZmlndXJpbmcgdGhpcyBuZXR3b3JrIGRyaXZlciwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IGBORVRfVkVORE9SX1dBTkdYVU5gIG5lZWRzIHRvIGJlIGVuYWJsZWQuIEknbGwgbWFrZSBhIG5vdGUgb2YgdGhhdCDigJMgaXQncyBjcnVjaWFsIGZvciB0aGUgaGFyZHdhcmUgc3VwcG9ydCwgcmlnaHQ/XG5cbkFscmlnaHQsIGxldCBtZSBtYWtlIGEgbGlzdCBvZiB0aGUgc3BlY2lmaWMgb3B0aW9ucyBJIG5lZWQgdG8gbG9vayBhdDpcbi0gYE5FVF9WRU5ET1JfV0FOR1hVTmBcbi0gYE5HQkVgXG4tIGBUWEdCRWBcbi0gYE5HQkVWRmBcbi0gYFRYR0JFVkZgXG5cbkFoLCB3YWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRoYXQgYE5FVF9WRU5ET1JfV0FOR1hVTmAgaXMgYSBib29sZWFuLiBJIGFsc28gbmVlZCB0byBiZSBjZXJ0YWluIHRoYXQgSSBjb25zaWRlciB0aGUgb3RoZXIgb3B0aW9ucyBJIGhhdmUgbGlzdGVkLCBhbmQgY2hlY2sgaWYgdGhleSBoYXZlIGFueSBkZXBlbmRlbmNpZXMuIFRoaXMgaXMgaW1wb3J0YW50IHRvIGVuc3VyZSBldmVyeXRoaW5nIGlzIHNldCB1cCBjb3JyZWN0bHkgYW5kIGFueSBuZWNlc3NhcnkgbW9kdWxlcyBhcmUgbG9hZGVkIHByb3Blcmx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk2MDcsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzoxOS4xNzM3MDM2NDdaIiwiU2VxIjo2NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTc0NTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRlcGVuZHMgb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnPTE5PWNvbmZpZyBMSUJXWFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yMC1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMTpcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIyLVxcdHNlbGVjdCBQQUdFX1BPT0xcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0yOD1jb25maWcgTkdCRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0yOS1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzA6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MzE6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy0zMi1cXHRzZWxlY3QgTElCV1hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz00Mz1jb25maWcgVFhHQkVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHYkUgUENJIEV4cHJlc3MgYWRhcHRlcnMgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDU6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDY6XFx0ZGVwZW5kcyBvbiBDT01NT05fQ0xLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjQ3OlxcdGRlcGVuZHMgb24gSTJDX0RFU0lHTldBUkVfUExBVEZPUk1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NDg6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy00OS1cXHRzZWxlY3QgTUFSVkVMTF8xMEdfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9Njc9Y29uZmlnIFRYR0JFVkZcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNjgtXFx0dHJpc3RhdGUgXFxcIldhbmd4dW4oUikgMTAvMjUvNDBHIFZpcnR1YWwgRnVuY3Rpb24gRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6Njk6XFx0ZGVwZW5kcyBvbiBQQ0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6NzA6XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnOjcxOlxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctNzItXFx0c2VsZWN0IExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9ODU9Y29uZmlnIE5HQkVWRlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04Ni1cXHR0cmlzdGF0ZSBcXFwiV2FuZ3h1bihSKSBHYkUgVmlydHVhbCBGdW5jdGlvbiBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzo4NzpcXHRkZXBlbmRzIG9uIFBDSV9NU0lcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6ODg6XFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZy04OS1cXHRzZWxlY3QgTElCV1hcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTc6MTkuMjMxNjg0MDI1WiIsIlNlcSI6NjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg0MjkwNzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFdhbmd4dW4gVkYgRHJpdmVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSBzZWUsIHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGZvY3VzZXMgb24gZW5oYW5jaW5nIHRoZSBXYW5neHVuIFZpcnR1YWwgRnVuY3Rpb24gKFZGKSBkcml2ZXIuIFRoZSB1c3VhbCBzdXNwZWN0cywgYFBUUF8xNTg4X0NMT0NLX09QVElPTkFMYCwgaXMgZ2VuZXJhbGx5IGVuYWJsZWQsIGJ1dCBpdCdzIG5vdCB0aGUgY29yZSBvZiB0aGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBJMkNfREVTSUdOV0FSRV9QTEFURk9STWAgaXMgZW5hYmxlZC4gSXQncyBvZnRlbiByZXF1aXJlZCBmb3IgYFRYR0JFYCBidXQgaXNuJ3QgZGlyZWN0bHkgcmVsYXRlZCB0byAqdGhpcyogc3BlY2lmaWMgY2hhbmdlLiBCdXQgaXQncyBiZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5LCBzbyBJJ2xsIGluY2x1ZGUgYSBub3RlIGFib3V0IGl0LCBqdXN0IGluIGNhc2UuIFJlZ2FyZGxlc3MsIGlmIGBUWEdCRWAgZmFpbHMsIGBOR0JFVkZgIGFuZCBgVFhHQkVWRmAgd2lsbCBzdGlsbCBmdW5jdGlvbiBhcyBleHBlY3RlZC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGNoYW5nZXMgYXJlIHdoYXQgSSB0aGluayB0aGV5IGFyZS4gRnJvbSB0aGUgbG9va3Mgb2YgaXQsIGl0IHVwZGF0ZXMgYHd4X3NldF9yaW5ncGFyYW1fdmZgLCBgd3hfd3JpdGVfZWl0cl92ZmAsIGB3eF9zZXRfcmluZ2AgYW5kIGB3eF9zZXRfY29hbGVzY2VgLiBOb3cgbGV0J3Mgc2VlLCBpdCBhbHNvIG1ha2VzIHRoZSBmdW5jdGlvbnMgYHd4dmZfdXBfY29tcGxldGVgIGFuZCBgd3h2Zl9kb3duYCBub24tc3RhdGljLlxuXG5SaWdodCwgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGlzIGluIGxpbmUgd2l0aCB0aGUgZXRodG9vbCBuZXRsaW5rL2lvY3RsIGludGVyZmFjZS4gYHd4X3dyaXRlX2VpdHJfdmZgIGlzIGZpbmUsIGFzIGlzIGB3eF9zZXRfcmluZ2AsIGFuZCBgd3hfc2V0X2NvYWxlc2NlYC5cblxuU28sIHRoZSBjcnV4IGlzIHNldHRpbmcgcmluZyBwYXJhbWV0ZXJzIGZvciBWRiBkZXZpY2VzIHZpYSBldGh0b29sIChgd3hfc2V0X3JpbmdwYXJhbV92ZmApIGFuZCBtb2RpZnlpbmcgdGhlIGNvYWxlc2NlIHNldHRpbmcgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBWRnMgKGB3eF93cml0ZV9laXRyX3ZmYCkuIFRoZSBzaGFyZWQgYHd4X3NldF9yaW5nYCBmdW5jdGlvbiBub3cgcmV0dXJucyBhbiBlcnJvciBjb2RlLCB3aGljaCBpcyBhIHNlbnNpYmxlIGNoYW5nZS4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRvIHRoZSBkcml2ZXIncyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgdHJpZ2dlcmVkIHdoZW4gdGhlIFBDSSBkZXZpY2UgaXMgcmVnaXN0ZXJlZCBhbmQgY2FuIGJlIGV4ZXJjaXNlZCBieSBQQ0kgZnV6emluZywgc28gaXQncyB3b3J0aCBmdXp6aW5nLlxuXG5MZXQgbWUgZG91YmxlIGNoZWNrIHRoYXQgYHd4X3NldF9yaW5ncGFyYW1fdmZgIGlzLCBpbiBmYWN0LCByZWFjaGFibGUuIEl0IGlzLiBJdCdzIGFzc2lnbmVkIHRvIGAuc2V0X3JpbmdwYXJhbWAgaW4gYHd4X2V0aHRvb2xfb3BzX3ZmYCwgd2hpY2ggaXMgYXNzaWduZWQgdG8gYG5ldGRldi1cdTAwM2VldGh0b29sX29wc2AgaW4gYHd4X3NldF9ldGh0b29sX29wc192ZmAuIGB3eF9zZXRfZXRodG9vbF9vcHNfdmZgIGlzIHRoZW4gY2FsbGVkIGluIGB0eGdiZXZmX3Byb2JlYCBhbmQgYG5nYmV2Zl9wcm9iZWAuIFNvLCB5ZXMsIGl0J3MgYWNjZXNzaWJsZS5cblxuT2theSwgSSdtIHNhdGlzZmllZC4gSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzEwLCJPdXRwdXRUb2tlbnMiOjIyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxNzozMC4yMTU5NzcxMzlaIiwiU2VxIjo2OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzgzOTYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkVUX1ZFTkRPUl9XQU5HWFVOXCIsXG4gICAgXCJOR0JFXCIsXG4gICAgXCJUWEdCRVwiLFxuICAgIFwiTkdCRVZGXCIsXG4gICAgXCJUWEdCRVZGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid3hfc2V0X3JpbmdwYXJhbV92ZlwiLFxuICAgIFwid3hfd3JpdGVfZWl0cl92ZlwiLFxuICAgIFwid3hfc2V0X3JpbmdcIixcbiAgICBcInd4X3NldF9jb2FsZXNjZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3Igc2V0dGluZyByaW5nIHBhcmFtZXRlcnMgZm9yIFdhbmd4dW4gVkYgZGV2aWNlcyB2aWEgZXRodG9vbCAod3hfc2V0X3JpbmdwYXJhbV92ZikgYW5kIG1vZGlmaWVzIHRoZSBjb2FsZXNjZSBzZXR0aW5nIGxvZ2ljIHRvIGNvcnJlY3RseSBoYW5kbGUgVkZzICh3eF93cml0ZV9laXRyX3ZmKS4gSXQgYWxzbyBtb2RpZmllcyB0aGUgc2hhcmVkIHd4X3NldF9yaW5nIGZ1bmN0aW9uIHRvIHJldHVybiBhbiBlcnJvciBjb2RlIGluc3RlYWQgb2Ygdm9pZC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgZHJpdmVyJ3MgZXRodG9vbCBvcGVyYXRpb25zIGFuZCByaW5nIG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB2aWEgZXRodG9vbCBuZXRsaW5rL2lvY3RsIGludGVyZmFjZXMgd2hlbiB0aGUgUENJIGRldmljZSBpcyByZWdpc3RlcmVkLCB3aGljaCBjYW4gYmUgc2ltdWxhdGVkIGJ5IHN5emthbGxlcidzIFBDSSBmdXp6aW5nIGNhcGFiaWxpdGllcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRfVkVORE9SX1dBTkdYVU5cIixcbiAgICBcIk5HQkVcIixcbiAgICBcIlRYR0JFXCIsXG4gICAgXCJOR0JFVkZcIixcbiAgICBcIlRYR0JFVkZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3eF9zZXRfcmluZ3BhcmFtX3ZmXCIsXG4gICAgXCJ3eF93cml0ZV9laXRyX3ZmXCIsXG4gICAgXCJ3eF9zZXRfcmluZ1wiLFxuICAgIFwid3hfc2V0X2NvYWxlc2NlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBzZXR0aW5nIHJpbmcgcGFyYW1ldGVycyBmb3IgV2FuZ3h1biBWRiBkZXZpY2VzIHZpYSBldGh0b29sICh3eF9zZXRfcmluZ3BhcmFtX3ZmKSBhbmQgbW9kaWZpZXMgdGhlIGNvYWxlc2NlIHNldHRpbmcgbG9naWMgdG8gY29ycmVjdGx5IGhhbmRsZSBWRnMgKHd4X3dyaXRlX2VpdHJfdmYpLiBJdCBhbHNvIG1vZGlmaWVzIHRoZSBzaGFyZWQgd3hfc2V0X3JpbmcgZnVuY3Rpb24gdG8gcmV0dXJuIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiB2b2lkLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBkcml2ZXIncyBldGh0b29sIG9wZXJhdGlvbnMgYW5kIHJpbmcgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHZpYSBldGh0b29sIG5ldGxpbmsvaW9jdGwgaW50ZXJmYWNlcyB3aGVuIHRoZSBQQ0kgZGV2aWNlIGlzIHJlZ2lzdGVyZWQsIHdoaWNoIGNhbiBiZSBzaW11bGF0ZWQgYnkgc3l6a2FsbGVyJ3MgUENJIGZ1enppbmcgY2FwYWJpbGl0aWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[1] Phase: Succeeded StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-10 23:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-10 23:17:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2] Phase: Succeeded StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-10 23:17:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-10 23:17:41 +0000 UTC FinishedAt: 2026-07-10 23:17:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-convert-artifact-1625862873/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-10 23:17:51 +0000 UTC FinishedAt: 2026-07-11 00:04:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-10 23:17:51 +0000 UTC FinishedAt: 2026-07-11 00:04:42 +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:*45cdec56-a52b-4057-90ca-0e54ccfc2aba,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-workflow5l9pv/series-workflow5l9pv-convert-artifact-1625862873/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": "718ba9c1-e1bb-4708-ae48-aae28662bb94", "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-workflow5l9pv/series-workflow5l9pv-build-action-2623329143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-10 23:17:51 +0000 UTC FinishedAt: 2026-07-11 00:04:31 +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:*45cdec56-a52b-4057-90ca-0e54ccfc2aba,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-workflow5l9pv/series-workflow5l9pv-convert-artifact-1625862873/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": "718ba9c1-e1bb-4708-ae48-aae28662bb94", "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-workflow5l9pv/series-workflow5l9pv-build-action-2623329143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-11 00:04:42 +0000 UTC FinishedAt: 2026-07-11 00:04:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-11 00:04:42 +0000 UTC FinishedAt: 2026-07-11 00:04:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-11 00:04:42 +0000 UTC FinishedAt: 2026-07-11 00:04:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-11 00:04:42 +0000 UTC FinishedAt: 2026-07-11 00:04:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-convert-artifact-3032062892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-11 00:04:52 +0000 UTC FinishedAt: 2026-07-11 00:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-11 00:04:52 +0000 UTC FinishedAt: 2026-07-11 00:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*718ba9c1-e1bb-4708-ae48-aae28662bb94,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-workflow5l9pv/series-workflow5l9pv-build-action-2623329143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-11 00:06:58 +0000 UTC FinishedAt: 2026-07-11 00:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-11 00:06:58 +0000 UTC FinishedAt: 2026-07-11 00:06:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-11 00:06:58 +0000 UTC FinishedAt: 2026-07-11 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-11 00:06:58 +0000 UTC FinishedAt: 2026-07-11 00:57:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*45cdec56-a52b-4057-90ca-0e54ccfc2aba,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-workflow5l9pv/series-workflow5l9pv-convert-artifact-3032062892/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": "cc29fce8-5cce-4c21-86c5-2a29e867e54b", "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-workflow5l9pv/series-workflow5l9pv-build-action-568009288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-11 00:06:58 +0000 UTC FinishedAt: 2026-07-11 00:56:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*45cdec56-a52b-4057-90ca-0e54ccfc2aba,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-workflow5l9pv/series-workflow5l9pv-convert-artifact-3032062892/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": "cc29fce8-5cce-4c21-86c5-2a29e867e54b", "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-workflow5l9pv/series-workflow5l9pv-build-action-568009288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-11 00:57:04 +0000 UTC FinishedAt: 2026-07-11 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-11 00:57:04 +0000 UTC FinishedAt: 2026-07-11 00:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-11 00:57:04 +0000 UTC FinishedAt: 2026-07-11 00:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-11 00:57:04 +0000 UTC FinishedAt: 2026-07-11 00:58:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc29fce8-5cce-4c21-86c5-2a29e867e54b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-build-action-568009288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*718ba9c1-e1bb-4708-ae48-aae28662bb94,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc29fce8-5cce-4c21-86c5-2a29e867e54b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-build-action-2623329143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-build-action-568009288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 00:59:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 00:59:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-convert-artifact-3874818965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 00:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 00:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-11 00:59:02 +0000 UTC FinishedAt: 2026-07-11 00:59:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-11 00:59:12 +0000 UTC FinishedAt: 2026-07-11 01:50:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5l9pv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["wx_set_ringparam_vf","wx_write_eitr_vf","wx_set_ring","wx_set_coalesce"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"acb138b8235c63564aa1bcd2666fdc9707e2f1e0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET_VENDOR_WANGXUN","NGBE","TXGBE","NGBEVF","TXGBEVF"],"series_id":"984dcb89-2ad4-4bbe-9f6a-634bb37a1d29","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-11 00:59:12 +0000 UTC FinishedAt: 2026-07-11 01:49:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*718ba9c1-e1bb-4708-ae48-aae28662bb94,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*cc29fce8-5cce-4c21-86c5-2a29e867e54b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-build-action-2623329143/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-build-action-568009288/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5l9pv/series-workflow5l9pv-convert-artifact-3874818965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}