Name: series-workflow8dddz Phase: Succeeded StartedAt: 2026-08-18 09:45:36 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[0] Phase: Succeeded StartedAt: 2026-08-18 09:45:36 +0000 UTC FinishedAt: 2026-08-18 10:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[0].run-triage Phase: Succeeded StartedAt: 2026-08-18 09:45:36 +0000 UTC FinishedAt: 2026-08-18 10:29:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6664f2b33db9b6811eb4cec109f06cb2b4f458d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_RESERVED_MEM", "OF_EARLY_FLATTREE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6664f2b33db9b6811eb4cec109f06cb2b4f458d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_RESERVED_MEM", "OF_EARLY_FLATTREE" ], "series_id": "dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fdt_scan_reserved_mem", "fdt_scan_reserved_mem_late", "memblock_overlaps_nomap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX1JFU0VSVkVEX01FTSYjMzQ7LAogICAgJiMzNDtPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7LAogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGxvZ2ljLCBhZGRpbmcgdHJhY2tpbmcgZm9yIGZhaWxlZCByZXNlcnZhdGlvbnMgYW5kIGNoZWNraW5nIGZvciBvdmVybGFwcyB3aXRoIG5vbWFwIHJlZ2lvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwYjViZWViMWExM2JhM2Q4MWYxNjdkNWU0NjBmODRkY2ZmZWQ4YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDoyNzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7XG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XG4gc3RhdGljIGludCByZXNlcnZlZF9tZW1fY291bnQ7XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNbTUFYX1JFU0VSVkVEX1JFR0lPTlNdIF9faW5pdGRhdGE7XG4mIzQzO3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250IF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoaW50IG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7dG9vIG1hbnkgZmFpbGVkIHJlZ2lvbnMsICYjMzk7JXMmIzM5OyByZXNlcnZhdGlvbiBmYWlsZWRcXG5cJiMzNDssIHVuYW1lKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCYjNDM7JiM0MztdID0gbm9kZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX3Jlc2VydmVkX21lbW9yeV9hcmNoKHBoeXNfYWRkcl90IHNpemUsXG4gXHRwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCxcbiBcdHBoeXNfYWRkcl90ICpyZXNfYmFzZSlcbkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuJiM0MztcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGR5bmFtaWMpO1xuIHN0YXRpYyBpbnQgZmR0X3ZhbGlkYXRlX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbiBcdFx0XHRcdFx0ICBwaHlzX2FkZHJfdCAqYWxpZ24pO1xuIHN0YXRpYyBpbnQgZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuIFx0XHQgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC5cbiBcdFx0ICovXG4gXHRcdGlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSlcbiYjNDM7XHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG4mIzQzO1x0XHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRyZXR1cm4gbWVtYmxvY2tfbWFya19ub21hcChiYXNlLCBzaXplKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuJiM0MztcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0cmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG4gfVxuIFxuQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuICAqIGZpcnN0IGVudHJ5IGluICYjMzk7cmVnJiMzOTsgcHJvcGVydHlcbiAgKi9cbiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUpXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKVxuIHtcbiBcdHBoeXNfYWRkcl90IGJhc2UsIHNpemU7XG4gXHRpbnQgbGVuLCBlcnI7XG5AQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRib29sIG5vbWFwO1xuIFx0dTY0IGIsIHM7XG4gXG4mIzQzO1x0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSBmYWxzZTtcbiYjNDM7XG4gXHRwcm9wID0gb2ZfZmxhdF9kdF9nZXRfYWRkcl9zaXplX3Byb3Aobm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZsZW4pO1xuIFx0aWYgKCFwcm9wIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTE2NywxNCAmIzQzOzIwMSwyMCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRiYXNlID0gYjtcbiBcdHNpemUgPSBzO1xuIFxuLVx0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApID09IDApIHtcbi1cdFx0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAmIzM5OyVzJiMzOTs6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cJiMzNDssXG4tXHRcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XG4gXHRcdHByX2VycihcJiMzNDtSZXNlcnZlZCBtZW1vcnk6IGZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSBmb3Igbm9kZSAmIzM5OyVzJiMzOTs6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cJiMzNDssXG4gXHRcdCAgICAgICB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcblwmIzM0OyxcbiYjNDM7XHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNiwxMCAmIzQzOzM0NiwxNCBAQCB2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxuIFx0XHRiYXNlID0gYjtcbiBcdFx0c2l6ZSA9IHM7XG4gXG4tXHRcdGlmIChzaXplKSB7XG4tXHRcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4tXHRcdFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplKTtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCFzaXplKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoY2hpbGQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbiYjNDM7XHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG92ZXJsYXBwaW5nIHJlc2VydmVkIHJlZ2lvbnMgKi9cbkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7XG4gXHRcdGNvbnN0IGNoYXIgKnVuYW1lO1xuJiM0MztcdFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xuIFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRpZiAoIW9mX2ZkdF9kZXZpY2VfaXNfYXZhaWxhYmxlKGZkdCwgY2hpbGQpKVxuQEAgLTM1Niw5ICYjNDM7NDAxLDE0IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuIFxuLVx0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xuJiM0MztcdFx0ZXJyID0gX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcoY2hpbGQsIHVuYW1lLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcbiYjNDM7XHRcdFx0LyogS2VlcCBhIHNsb3QgZm9yIHRoZSB1bnRyYWNrZWQgbm9kZSYjMzk7cyBsYXRlIGluaXRpYWxpemF0aW9uLiAqL1xuJiM0MztcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFNhdmUgdGhlIG5vZGVzIGZvciB0aGUgZHluYW1pY2FsbHktcGxhY2VkIHJlZ2lvbnNcbkBAIC01MTgsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtXG4gXHR9XG4gXG4gXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4mIzQzO1x0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgdW5hbWUsIGJhc2UsIHNpemUsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTYyNywxMyAmIzQzOzY3NywxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9pbml0X25vZGUoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbiAgKiBAdW5hbWU6IG5hbWUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSBub2RlXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuICAqIEBzaXplOiBzaXplIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkeW5hbWljOiB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXG4gICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBhbmQgc2F2ZXMgYWxsIHJlZ2lvbi1zcGVjaWZpYyBkYXRhIHRvIHRoZVxuICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBib29sIGR5bmFtaWMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRib29sIG5vbWFwO1xuQEAgLTY1Nyw5ICYjNDM7NzA5LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuXG4gXHRcdHByX2luZm8oXCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcXG5cJiMzNDssIHJtZW0tXHUwMDNlbmFtZSk7XG4gXHRcdHJtZW0tXHUwMDNlbmFtZSA9IE5VTEw7XG4gXG4tXHRcdGlmIChub21hcClcbiYjNDM7XHRcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiBub21hcClcbiBcdFx0XHRtZW1ibG9ja19jbGVhcl9ub21hcChybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4tXHRcdGVsc2VcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xuIHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG4gXHRcdFx0XHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XG4mIzQzO2Jvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gYm9vbCBtZW1ibG9ja192YWxpZGF0ZV9udW1hX2NvdmVyYWdlKHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX2J5dGVzKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uNGNhYmZlMzY1YWM0NiAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmNcbkBAIC0yMDIsNiAmIzQzOzIwMiwyMCBAQCBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4gXHRyZXR1cm4gKChiYXNlMSBcdTAwM2MgKGJhc2UyICYjNDM7IHNpemUyKSkgXHUwMDI2XHUwMDI2IChiYXNlMiBcdTAwM2MgKGJhc2UxICYjNDM7IHNpemUxKSkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjtcbiYjNDM7XG4mIzQzO1x0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4mIzQzO1x0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHtcbiYjNDM7XHRcdGlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAoYmFzZSwgc2l6ZSwgcmVnaW9uLVx1MDAzZWJhc2UsIHJlZ2lvbi1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfUkVTRVJWRURfTUVNJiMzNDssCiAgICAmIzM0O09GX0VBUkxZX0ZMQVRUUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtJiMzNDssCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX292ZXJsYXBzX25vbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMKaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jCkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7CiBzdGF0aWMgaW50IHRvdGFsX3Jlc2VydmVkX21lbV9jbnQgPSBNQVhfUkVTRVJWRURfUkVHSU9OUzsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50OwogCiYjNDM7c3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhOwomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7ewomIzQzOwlpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJiMzOTslcyYjMzk7IHJlc2VydmF0aW9uIGZhaWxlZFxuJiMzNDssIHVuYW1lKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQmIzQzOyYjNDM7XSA9IG5vZGU7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSwKIAlwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCwKIAlwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpCkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKQogfQogCiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAotCQkJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJCSAgICAgICBib29sIGR5bmFtaWMpOwogc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIHBoeXNfYWRkcl90ICphbGlnbik7CiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogCQkgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC4KIAkJICovCiAJCWlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oJmFtcDttZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpICZhbXA7JmFtcDsKLQkJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSkKJiM0MzsJCSAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CQkgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJcmV0dXJuIG1lbWJsb2NrX21hcmtfbm9tYXAoYmFzZSwgc2l6ZSk7CiAJfQomIzQzOwomIzQzOwlpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CSAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJcmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7CiB9CiAKQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogICogZmlyc3QgZW50cnkgaW4gJiMzOTtyZWcmIzM5OyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7CQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLAomIzQzOwkJCQkJICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKQogewogCXBoeXNfYWRkcl90IGJhc2UsIHNpemU7CiAJaW50IGxlbiwgZXJyOwpAQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCiAJYm9vbCBub21hcDsKIAl1NjQgYiwgczsKIAomIzQzOwkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlOwomIzQzOwogCXByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2xlbik7CiAJaWYgKCFwcm9wIHx8ICFsZW4pCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTY3LDE0ICYjNDM7MjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAliYXNlID0gYjsKIAlzaXplID0gczsKIAotCWlmIChzaXplICZhbXA7JmFtcDsgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkgewotCQlmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7Ci0JCXByX2RlYnVnKCYjMzQ7UmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJiMzOTslcyYjMzk7OiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXG4mIzM0OywKLQkJCSB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7CiAJCXByX2VycigmIzM0O1Jlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiAJCSAgICAgICB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiYjNDM7CQkgdW5hbWUsICZhbXA7YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDYsMTAgJiM0MzszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZCkKIAkJYmFzZSA9IGI7CiAJCXNpemUgPSBzOwogCi0JCWlmIChzaXplKSB7Ci0JCQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKLQkJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7Ci0JCX0KJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChjaGlsZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKJiM0MzsJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpOwogCX0KIAogCS8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovCkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpCiAKIAlmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7CiAJCWNvbnN0IGNoYXIgKnVuYW1lOwomIzQzOwkJYm9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlOwogCQlpbnQgZXJyOwogCiAJCWlmICghb2ZfZmR0X2RldmljZV9pc19hdmFpbGFibGUoZmR0LCBjaGlsZCkpCkBAIC0zNTYsOSAmIzQzOzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKQogCiAJCXVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpOwogCi0JCWVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7CiYjNDM7CQllcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsCiYjNDM7CQkJCQkJICZhbXA7c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7CiAJCWlmICghZXJyKQogCQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAoc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSAmYW1wOyZhbXA7CiYjNDM7CQkJICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKQomIzQzOwkJCS8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUmIzM5O3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbm9kZXMgZm9yIHRoZSBkeW5hbWljYWxseS1wbGFjZWQgcmVnaW9ucwpAQCAtNTE4LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbQogCX0KIAogCWZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTsKLQlmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7CiYjNDM7CWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjI3LDEzICYjNDM7Njc3LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2luaXRfbm9kZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLAogICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZQogICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbgogICogQHNpemU6IHNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEKICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGUKICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCi0JCQkJCSAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiYjNDM7CQkJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAomIzQzOwkJCQkJICAgICAgYm9vbCBkeW5hbWljKQogewogCWludCBlcnIgPSAwOwogCWJvb2wgbm9tYXA7CkBAIC02NTcsOSAmIzQzOzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bgogCQlwcl9pbmZvKCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcbiYjMzQ7LCBybWVtLSZndDtuYW1lKTsKIAkJcm1lbS0mZ3Q7bmFtZSA9IE5VTEw7CiAKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7CiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLAogCQkJCSAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTsKJiM0Mztib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7CmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTIwMiw2ICYjNDM7MjAyLDIwIEBAIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLCBwaHlzX2FkZHJfdCBiYXNlMiwKIAlyZXR1cm4gKChiYXNlMSAmbHQ7IChiYXNlMiAmIzQzOyBzaXplMikpICZhbXA7JmFtcDsgKGJhc2UyICZsdDsgKGJhc2UxICYjNDM7IHNpemUxKSkpOwogfQogCiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjsKJiM0MzsKJiM0MzsJbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgJmFtcDtzaXplKTsKJiM0MzsJZm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHsKJiM0MzsJCWlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtZW1ibG9ja19hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJlZ2lvbi0mZ3Q7YmFzZSwgcmVnaW9uLSZndDtzaXplKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQkJCQlwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBSZXNlcnZlZCBNZW1vcnkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmVkIG1lbW9yeSBub2RlcyBpbiB0aGUgT0YgY29kZSBhbmQgaW50cm9kdWNlcyBhIG5ldyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGZ1bmN0aW9uIGluIHRoZSBtZW1vcnkgYmxvY2sgY29kZS4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBkZXZpY2UgdHJlZSAoT0YpIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIE9GIGlzIHByZXR0eSBjb21tb24gaW4gQVJNL0FSTTY0IFFFTVUgc2V0dXBzLCBhbmQgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIG9uIHg4NiBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyB0b28uCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gZnV6ej8gVGhlIHBhdGNoIHRvdWNoZXMgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYW5kIGFkZHMgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC4gT2theSwgdGhlc2UgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBodXJkbGUuIFN5emthbGxlciBpcyB1c3VhbGx5IGZvY3VzZWQgb24gc3lzY2FsbHMsIG5ldHdvcmsgcGFja2V0cywgVVNCLCBhbmQgdGhpbmdzIHRoYXQgaGFwcGVuIGFmdGVyIHRoZSBzeXN0ZW0gaXMgdXAgYW5kIHJ1bm5pbmcuIEJ1dCB3YWl0Li4uIGNhbiBzeXprYWxsZXIgZnV6eiBkZXZpY2UgdHJlZXMgc29tZWhvdz8gSSByZW1lbWJlciBpdCAqY2FuKiBmdXp6IGRldmljZSB0cmVlcywgYnV0IEkgdGhvdWdodCB0aGF0IHdhcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSwgZGV2aWNlIHRyZWVzIGFyZSB0eXBpY2FsbHkgcHJvdmlkZWQgYXQgYm9vdCwgYXJlbiYjMzk7dCB0aGV5PyBTbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBnZXQgdG8gdGhlc2UgZWFybHkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHdpdGggc3l6a2FsbGVyPwoKVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGxvYWQgZGV2aWNlIHRyZWUgKm92ZXJsYXlzKiBhdCBydW50aW1lLCBtYXliZSB0aHJvdWdoIGNvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJZiB3ZSBjYW4sIHRoZW4gcGVyaGFwcyB3ZSBjYW4gdHJpZ2dlciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBvciBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgIHRoYXQgd2F5LiBUaW1lIHRvIGNoZWNrIGZvciB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FyYy9tbS9pbml0LmM9MTAxPXZvaWQgX19pbml0IHNldHVwX2FyY2hfbWVtb3J5KHZvaWQpXG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FyYy9tbS9pbml0LmMtMTM3LVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYz0xOTY9dm9pZCBfX2luaXQgYXJtNjRfbWVtYmxvY2tfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjMwMDpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM1NT12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MzY3Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cdHVuZmxhdHRlbl9hbmRfY29weV9kZXZpY2VfdHJlZSgpO1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02MzM9c3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NTItXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jOjE4NjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jLTg4LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM9NjQ0PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbV9kdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXHQgKi9cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjI5ODpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXG4tLVxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcbi0tXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmMtMTE0LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxuLS1cbmFyY2gvdW0va2VybmVsL2R0Yi5jPTEzPXZvaWQgdW1sX2R0Yl9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXG5hcmNoL3VtL2tlcm5lbC9kdGIuYzoyNjpcdFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI3LVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2luaXQuYz00MD12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM6NTA6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00ODgtLyoqXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbmRyaXZlcnMvb2YvZmR0LmMtNDk2LXtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cdGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIoKTtcbmRyaXZlcnMvb2YvZmR0LmM6NTA1Olx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5kcml2ZXJzL29mL2ZkdC5jLTUwNi1cbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXG5kcml2ZXJzL29mL2ZkdC5jOjEyODc6XHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE4Ny1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTkwLVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk2LSAqIG1lbW9yeSByZWdpb25zLlxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozMDM6dm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTM2Mz1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM2NjogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKSAtIHJlc2VydmUgYW5kIGFsbG9jYXRlIG1lbW9yeSBvY2N1cGllZCBieVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzQtICovXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xuLS1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTc2LWV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZih2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6OTk6c3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpIHt9XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBvbiBTeXprYWxsZXIgYW5kIERldmljZSBUcmVlIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGNhbGxlZCByZWFsbHkgZWFybHkgb24sIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGV5JiMzOTtyZSBgX19pbml0YCBmdW5jdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBpZiBzeXprYWxsZXIgY2FuIGV2ZW4gdG91Y2ggdGhlbS4gU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSBrbm93LCB3b3JrcyBpdHMgbWFnaWMgYnkgZ2VuZXJhdGluZyBzeXNjYWxscywgd2hpY2ggb2J2aW91c2x5IGhhcHBlbiAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcuIFNvLCB0aGUgZGlyZWN0IGFwcHJvYWNoIGlzIHByb2JhYmx5IG91dC4KCkJ1dCBoYW5nIG9u4oCmIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciBhbmQgZGV2aWNlIHRyZWVzLiBEb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWUgY2FwYWJpbGl0eSBpbiB0aGF0IHJlYWxtPyBEb2VzIGl0IGZlZWQgYSBjdXN0b20gRFQgdG8gdGhlIGtlcm5lbCBhdCBib290LCBvciB2aWEgc29tZSBzbmVha3kgbWVjaGFuaXNtIEkmIzM5O20gZm9yZ2V0dGluZz8gSSBkbyByZWNhbGwgYHN5el9tb3VudF9pbWFnZWAsIGJ1dCB0aGF0JiMzOTtzIGZvciBmaWxlc3lzdGVtcywgcmlnaHQ/IERlZmluaXRlbHkgbm90IGZvciBEVHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBEb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogZGV2aWNlIHRyZWVzPyBJIGJyaWVmbHkgcmVtZW1iZXIgc29tZSBzdXBwb3J0LCBwZXJoYXBzIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHN5el9pbml0X25ldF93b3JkYD8gTm8sIHRoYXQgZG9lc24mIzM5O3QgZmVlbCByaWdodC4KCkFoYSEgTm93IGl0JiMzOTtzIGNsaWNraW5nLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogZGV2aWNlIHRyZWVzLCBidXQgaXQmIzM5O3MgZG9uZSBkdXJpbmcgYm9vdC4gVGhlIHdheSBpdCB3b3JrcywgSSBiZWxpZXZlLCBpcyBpdCBjYW4gcGFzcyBhIGZ1enplZCBEVEIgdG8gdGhlIGtlcm5lbCB3aGVuIGEgVk0gaXMgbGF1bmNoZWQuIFRoZSBzeXprYWxsZXIgYXJjaGl0ZWN0dXJlIGlzIHNldCB1cCB0byBoYW5kbGUgVk1zIGJvb3Rpbmcgd2l0aCB0aGVzZSBmdXp6ZWQgRFRCcy4gTXkgbWVtb3J5IGlzIGNvcnJlY3QsIGJlY2F1c2UgdG9vbHMgbGlrZSBgc3l6LWZ1enplcmAgY2FuIHBhc3MgYSBEVEIgdG8gUUVNVS4KClNvLCBkb2VzIHN5emthbGxlciBkbyB0aGlzIHdpdGggRFRzPyBJIHJlbWVtYmVyIHN5emthbGxlciBoYWQgRFQgZnV6emluZyBzdXBwb3J0LCB0aGF0JiMzOTtzIHdoYXQgSSBhbSB0aGlua2luZy4gSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWRpY2F0ZWQgZm9yIERUIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6Xy4qZHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBkZXZpY2UgdHJlZXMsIGRvZXNuJiMzOTt0IGl0PyYjMzQ7IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZ2VuZXJhdGVzIHRoZW0gYW5kIGZlZWRzIHRoZW0gdG8gUUVNVS4gVGhhdCYjMzk7cyB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgb2ZfcmVzZXJ2ZWRfbWVtLmNgIGFuZCBgbWVtYmxvY2suY2AuIFRoZSBjaGFuZ2VzIGludm9sdmUgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VLWJhc2VkIHNldHVwLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgcHJvbXB0IGNhcmVzIGFib3V0LiBUaGFua2Z1bGx5LCBRRU1VIHJlbGllcyBvbiBkZXZpY2UgdHJlZXMgZm9yIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYsIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgcHJvbXB0IG91dGxpbmVzIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IGRpc3F1YWxpZnkgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgc3R1ZmYgbGlrZSBsb2dnaW5nLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBhcmUgbm8tZ29zLiBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnPyBBbHNvIG5vLiBCdXQgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKVGhlIHByb21wdCBzdGF0ZXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIG9yIGRyaXZlcnMsIEkgbmVlZCB0byB2ZXJpZnkgaXQgY2FuIGJlIGV4ZWN1dGVkIHVzaW5nIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgdGhlbiByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBiYWNrIHRvIHN5emthbGxlciBhbmQgRFRCcy4gSXQgc2VlbXMgbXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gSXQgZG9lcyBmdXp6IHRoZW0sIGJ5IGdlbmVyYXRpbmcgdGhlbSBhbmQgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwuCgpTbywgdGhpcyBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIGNvcmUga2VybmVsIGxvZ2ljLCByZWFjaGFibGUgdmlhIFFFTVUsIGFuZCBzeXprYWxsZXIgKmNhbiogZnV6eiBkZXZpY2UgdHJlZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCByZXF1aXJlcyBgQ09ORklHX09GX1JFU0VSVkVEX01FTWAsIHdoaWNoIHdpbGwgYmUgY2hlY2tlZCB2aWEgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0ZfUkVTRVJWRURfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZz05NT1jb25maWcgT0ZfSVJRXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTk4LVxuZHJpdmVycy9vZi9LY29uZmlnOjk5OmNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cbmRyaXZlcnMvb2YvS2NvbmZpZy0xMDAtXHRkZWZfYm9vbCBPRl9FQVJMWV9GTEFUVFJFRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNZW1vcnkgUmVzZXJ2YXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRl9FQVJMWV9GTEFUVFJFRWAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeSB0byB1bmRlcnN0YW5kLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbm5lY3Rpb24sIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVzZXJ2YXRpb24gc3RyYXRlZ2llcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gd2hhdCBgT0ZfRUFSTFlfRkxBVFRSRUVgIGFjdHVhbGx5IGVudGFpbHMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBvdXIgbWVtb3J5IG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL0tjb25maWc9NjQ9Y29uZmlnIE9GX0ZMQVRUUkVFXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTY5LVxuZHJpdmVycy9vZi9LY29uZmlnOjcwOmNvbmZpZyBPRl9FQVJMWV9GTEFUVFJFRVxuZHJpdmVycy9vZi9LY29uZmlnLTcxLVx0ZGVmX2Jvb2wgT0YgXHUwMDI2XHUwMDI2ICEoU1BBUkMgfHwgQUxQSEEgfHwgSEVYQUdPTiB8fCBNNjhLIHx8IFBBUklTQyB8fCBTMzkwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBSZXNlcnZlZCBNZW1vcnkgaW4gRWFybHkgQm9vdCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBwcmltYXJpbHkgZGVhbHMgd2l0aCByZXNlcnZlZCBtZW1vcnkgYW5kIERldmljZSBUcmVlIChEVCkgaW5pdGlhbGl6YXRpb24sIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBhcmNoaXRlY3R1cmVzIHVzaW5nIHRoZSAmIzM0O09GJiMzNDsgZmxhZy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZywga2VlcGluZyBpbiBtaW5kIHRoZSBuZWVkIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgaW5zdGVhZCBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpc24mIzM5O3Qgc2tld2VkLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBJIGtub3cgdGhhdCBiZWNhdXNlIGl0IHJlZmVyZW5jZXMgdGhpbmdzIHRoYXQgaGFwcGVuIGVhcmx5LCBhbmQgdGhlIGZ1bmN0aW9ucyBhcmUgYWxsIG1hcmtlZCBgX19pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6IGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YCwgYF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAsIGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAsIGFuZCBhZGRzIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBsaXN0IHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdGhlIHRoaW5ncyB0aGF0IGhhdmUgZXhwbGljaXQgc3ltYm9sIGFkZHJlc3Nlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOgoKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gCiogICBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgCgpOb3cgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcy4gYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgaXMgZGVmaW5lZCBhcyBgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClgLCBzbyBpdCYjMzk7cyBhIGNhbmRpZGF0ZS4gYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCBpcyBgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBpcyBgYm9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlgLgoKSSBhbHNvIHNlZSB0aGF0IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZC4gSSB3b25kZXIgaWYgdGhlIG90aGVycyBhcmUgYXMgd2VsbC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MTQzPXN0YXRpYyBpbnQgZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE0NS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MTQ2OnN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTQ3LVx0XHRcdFx0XHQgICAgICAgcGh5c19hZGRyX3Qgc2l6ZSwgYm9vbCBub21hcClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE3ND1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yMDYtXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjIwNzpcdGVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApO1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yMDgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlc2VydmVkIE1lbW9yeSBDb2RlIGFuZCBTeXprYWxsZXImIzM5O3MgUmVhY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBhbmQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCDigJMgdGhleSYjMzk7cmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlIGFuZCBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZyB2aWEgc3RhbmRhcmQgaW50ZXJmYWNlcy4gVGhlICYjMzQ7bm9uLXN0YXRpYyYjMzQ7IGZ1bmN0aW9ucywgbmFtZWx5IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCwgYXJlIHdoZXJlIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhlc2U/JiMzNDsgVGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCwgYW5kIHN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0YXJ0cyAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcsIHVzdWFsbHkgaW4gdGhlIGluaXQgcHJvY2VzcyBvciBsYXRlci4gVGhhdCBtZWFucyBhbnkgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZnJlZWQgYmVmb3JlIHN5emthbGxlciBldmVuIGhhcyBhIGNoYW5jZSB0byBtb25pdG9yIHRoZW0uIEl0JiMzOTtzIHRoYXQgd2hvbGUgYF9faW5pdGAgc2VjdGlvbiBiZWluZyBmcmVlZCBhbmQgdGhlIGZhY3QgdGhhdCBjb3ZlcmFnZSBjb2xsZWN0aW9uIGlzbiYjMzk7dCBhY3RpdmUgZHVyaW5nIHRoYXQgZWFybHkgYm9vdCBwaGFzZSB0aGF0IHJlYWxseSBtYWtlcyBpdCBhIGRlYWQgZW5kIGZvciBzeXprYWxsZXIuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgS0NPVi4gRG9lc24mIzM5O3QgdGhhdCBnZXQgZW5hYmxlZCBlYXJseT8gT2theSwgeWVzLCBLQ09WICppcyogaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QuIEJ1dCBzeXprYWxsZXIgb25seSBjb2xsZWN0cyBjb3ZlcmFnZSBmb3IgdGhlIHRocmVhZHMgaXQgY29udHJvbHMsIHJpZ2h0PyBBbmQgdGhpcyBlYXJseSBib290IGNvZGUgcnVucyBpbiB0aGUgaW5pdCB0YXNrLCBsb25nIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBzdGFydHMgdXAuIFNvIEtDT1YsIGFzIGZhciBhcyBzeXprYWxsZXIgaXMgY29uY2VybmVkLCBpcyBhIG5vLWdvIGZvciB0aGlzIGNvZGUgYXMgd2VsbC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY29uY2x1c2lvbiBpcywgYW5kIGl0JiMzOTtzIGZydXN0cmF0aW5nLCBzeXprYWxsZXIgcHJvYmFibHkgY2FuJiMzOTt0IGZ1enogdGhpcyBlYXJseSBib290IGNvZGUuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGFueSBvYnZpb3VzIHdheSB0aGF0IHN5emthbGxlciBjb3VsZCBnYWluIGFjY2VzcyB0byB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlaXIgbm9ybWFsIHN0YXRlLiBIb3dldmVyLCBtYXliZSB0aGVyZSYjMzk7cyBhIGJhY2sgZG9vci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm9ubHkqIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdC4KClNvLCBsZXQmIzM5O3MgaW52ZXN0aWdhdGU6IElzIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gIGNhbGxlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FyYy9tbS9pbml0LmM9MTAxPXZvaWQgX19pbml0IHNldHVwX2FyY2hfbWVtb3J5KHZvaWQpXG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FyYy9tbS9pbml0LmMtMTM3LVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYz0xOTY9dm9pZCBfX2luaXQgYXJtNjRfbWVtYmxvY2tfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjMwMDpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM1NT12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MzY3Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cdHVuZmxhdHRlbl9hbmRfY29weV9kZXZpY2VfdHJlZSgpO1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02MzM9c3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NTItXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jOjE4NjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jLTg4LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM9NjQ0PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbV9kdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXHQgKi9cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjI5ODpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXG4tLVxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcbi0tXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmMtMTE0LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxuLS1cbmFyY2gvdW0va2VybmVsL2R0Yi5jPTEzPXZvaWQgdW1sX2R0Yl9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXG5hcmNoL3VtL2tlcm5lbC9kdGIuYzoyNjpcdFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI3LVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2luaXQuYz00MD12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM6NTA6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00ODgtLyoqXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbmRyaXZlcnMvb2YvZmR0LmMtNDk2LXtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cdGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIoKTtcbmRyaXZlcnMvb2YvZmR0LmM6NTA1Olx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5kcml2ZXJzL29mL2ZkdC5jLTUwNi1cbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXG5kcml2ZXJzL29mL2ZkdC5jOjEyODc6XHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE4Ny1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTkwLVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk2LSAqIG1lbW9yeSByZWdpb25zLlxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozMDM6dm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTM2Mz1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM2NjogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKSAtIHJlc2VydmUgYW5kIGFsbG9jYXRlIG1lbW9yeSBvY2N1cGllZCBieVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzQtICovXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xuLS1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTc2LWV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZih2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6OTk6c3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpIHt9XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVhcmx5IEJvb3QgQ29kZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIG9ubHkgY2FsbGVkIGZyb20gYGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgd2hpY2ggaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgYXJjaGl0ZWN0dXJlIHNldHVwLCB2ZXJ5IGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8gSXQgc2VlbXMgdW5saWtlbHkgYmVjYXVzZSBzeXprYWxsZXIgdXN1YWxseSBnZXRzIGNvdmVyYWdlIGZlZWRiYWNrIGZyb20gdXNlci1zcGFjZSBwcm9jZXNzZXMgdmlhIEtDT1YsIGFuZCB0aGF0JiMzOTtzIG5vdCBhY3RpdmUgYXQgdGhpcyBzdGFnZS4KCkJ1dCB3YWl0LCBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgZG9pbmcgJiMzNDtib290IGZ1enppbmcmIzM0OyBvciAmIzM0O0RUIGZ1enppbmcmIzM0OyB3aGVyZSBpdCBwYXNzZXMgYSBmdXp6ZWQgRGV2aWNlIFRyZWUgQmxvYiAoRFRCKSB0byBRRU1VIGFuZCBjaGVja3MgZm9yIGtlcm5lbCBjcmFzaGVzIGR1cmluZyB0aGUgYm9vdC4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBJIGNhbiYjMzk7dCByZW1lbWJlciBpZiBpdCBoYXMgYSBgc3lzL2xpbnV4L2RldmljZXRyZWVgIGVudHJ5Li4uIEkgZG9uJiMzOTt0IHRoaW5rIHNvLCBidXQgaXQgZGVmaW5pdGVseSBjYW4gYmUgY29uZmlndXJlZCBmb3IgYm9vdCBwcm9jZXNzIGZ1enppbmcuCgpOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZiB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGlzIFdvcnRoRnV6emluZz10cnVlLiBXZWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgc29tZSB0aGluZ3MuCgpGaXJzdCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYE9GX0VBUkxZX0ZMQVRUUkVFYCBpcyBlbmFibGVkLiBBbmQsIGZ1cnRoZXIsIGBPRl9FQVJMWV9GTEFUVFJFRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBPRmAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpc24mIzM5O3Qgc29tZXRoaW5nIG9ic2N1cmUgbGlrZSBTUEFSQyBvciBBTFBIQS4gU28gaXQgbG9va3MgbGlrZSBgT0ZgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGxvb2sgZm9yLiBMZXQmIzM5O3MgbGlzdCBgT0ZgIGFuZCBgT0ZfUkVTRVJWRURfTUVNYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgaG9sZCBvbiwgYE9GX1JFU0VSVkVEX01FTWAgaXMganVzdCBgZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVgLCBzbyBJIGRvbiYjMzk7dCB0ZWNobmljYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LCBidXQgaXQgc2hvdWxkbiYjMzk7dCBodXJ0IHRvIGhhdmUgaXQgdGhlcmUuCgpOb3csIEkmIzM5O2xsIGNoZWNrIGlmIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZXhwb3J0ZWQuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYSBnbG9iYWwgdmFyaWFibGUuIE9rYXksIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAsIGFuZCBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLgoKSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSByZXZpZXcgdGhlIGRyaXZlciBmaWxlIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Nj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0xNTYtXHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjE1NzpcdFx0ICAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkpXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE1OC1cdFx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTYzLVx0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzoxNjQ6XHQgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE2NS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTQ5PXVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTUwLVx0XHRcdFx0ICAgICBwaHlzX2FkZHJfdCBiYXNlMiwgcGh5c19hZGRyX3Qgc2l6ZTIpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE1MTpib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE1Mi1ib29sIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jPTE5OT1tZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4tLVxubW0vbWVtYmxvY2suYy0yMDQtXG5tbS9tZW1ibG9jay5jOjIwNTpib29sIF9faW5pdCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0yMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE5NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgLSBBIFByb21pc2luZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBzcG90dGVkIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaW4gYG1tL21lbWJsb2NrLmNgLiBIbW0sIEkmIzM5O20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgZnV6emFibGU/IEl0IGRvZXMgbG9vayBsaWtlIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgZ29vZCBpbmRpY2F0b3Igb2YgaW5pdGlhbCBzeXN0ZW0gc2V0dXAuIEJlY2F1c2UgaXQmIzM5O3Mgd2l0aGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCByZWxhdGVkIHRvIGRldmljZSB0cmVlIHBhcnNpbmcgYW5kIG1lbW9yeSBibG9jayByZXNlcnZhdGlvbiwgaXTigJlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUuCgpHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwcmlvcml0aXplIHRoZXNlIHN5bWJvbHM6IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHRhcmdldCBmdW5jdGlvbiBpdHNlbGY6IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBlbmFibGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYE9GYCBhbmQgYE9GX1JFU0VSVkVEX01FTWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBPRl9SRVNFUlZFRF9NRU1gIGlzIGNvcnJlY3QgZm9yIHRoaXMuIFllcywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNgIGlzIGNvbXBpbGVkIGJhc2VkIG9uIHRoYXQgY29uZmlnIHNldHRpbmcuIEdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX3Jlc2VydmVkX21lbS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX09GX1VOSVRURVNUKSAmIzQzOz0gdW5pdHRlc3Qub1xuZHJpdmVycy9vZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfT0ZfUkVTRVJWRURfTUVNKSAmIzQzOz0gb2ZfcmVzZXJ2ZWRfbWVtLm9cbmRyaXZlcnMvb2YvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX09GX1JFU09MVkUpICAmIzQzOz0gcmVzb2x2ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxMAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggdG91Y2hlcyBvbiBgQ09ORklHX09GX1JFU0VSVkVEX01FTWAuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYENPTkZJR19PRl9FQVJMWV9GTEFUVFJFRWAsIGFzIGl0IHNlZW1zIHJlbGF0ZWQuIEkmIzM5O2xsIGluY2x1ZGUgYm90aCBgT0ZgLCBgT0ZfUkVTRVJWRURfTUVNYCwgYW5kIGBPRl9FQVJMWV9GTEFUVFJFRWAgaW4gbXkgZXZhbHVhdGlvbi4KCldhaXQsIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gQnV0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVSwgcGFydGljdWxhcmx5IG9uIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYgc3lzdGVtcyB0aGF0IGxldmVyYWdlIHRoZSBEZXZpY2UgVHJlZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIGFkZGVkIGFuZCBpZiB0aGV5IGFyZSBzdGF0aWMuCkkgY2FuIHNlZSB0aGF0IGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAsIGBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZ2AsIGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YCwgYHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlYCBhbmQgYHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4KVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3QgdGhlIHByaW1hcnkgZm9jdXMgb2YgdGhlIGNoYW5nZXMuCgpUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQgYXJlOgoqICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAKKiAgIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAKClRoZXNlIHRocmVlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYWRkaXRpb25zIGFuZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2guIFRoZXkmIzM5O3JlIG15ICpGb2N1c1N5bWJvbHMqLgoKVWx0aW1hdGVseSwgdGhlIHBhdGNoIGlzIGFib3V0IGNoYW5nZXMgdG8gdGhlIERldmljZSBUcmVlJiMzOTtzIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzICpmdW5kYW1lbnRhbCoga2VybmVsIGJvb3QgbG9naWMsIGFuZCBpbXBvcnRhbnRseSwgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZXNwZWNpYWxseSBvbiBBUk02NCBhbmQgUklTQy1WLCB3aGljaCBoZWF2aWx5IHV0aWxpemUgdGhlIERldmljZSBUcmVlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPRiYjMzQ7LAogICAgJiMzNDtPRl9SRVNFUlZFRF9NRU0mIzM0OywKICAgICYjMzQ7T0ZfRUFSTFlfRkxBVFRSRUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW0mIzM0OywKICAgICYjMzQ7ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBhZGRzIGEgY2hlY2sgZm9yIG92ZXJsYXBwaW5nIGBub21hcGAgbWVtb3J5IHJlZ2lvbnMuIFRoaXMgaXMgY29yZSBrZXJuZWwgYm9vdCBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAoZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHVzaW5nIERldmljZSBUcmVlIGxpa2UgQVJNNjQgYW5kIFJJU0MtVikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX1JFU0VSVkVEX01FTSYjMzQ7LAogICAgJiMzNDtPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7LAogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBsb2dpYywgYWRkaW5nIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2YXRpb25zIGFuZCBjaGVja2luZyBmb3Igb3ZlcmxhcHMgd2l0aCBub21hcCByZWdpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMKaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jCkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7CiBzdGF0aWMgaW50IHRvdGFsX3Jlc2VydmVkX21lbV9jbnQgPSBNQVhfUkVTRVJWRURfUkVHSU9OUzsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50OwogCiYjNDM7c3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhOwomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7ewomIzQzOwlpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJiMzOTslcyYjMzk7IHJlc2VydmF0aW9uIGZhaWxlZFxuJiMzNDssIHVuYW1lKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQmIzQzOyYjNDM7XSA9IG5vZGU7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSwKIAlwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCwKIAlwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpCkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKQogfQogCiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAotCQkJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJCSAgICAgICBib29sIGR5bmFtaWMpOwogc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIHBoeXNfYWRkcl90ICphbGlnbik7CiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogCQkgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC4KIAkJICovCiAJCWlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oJmFtcDttZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpICZhbXA7JmFtcDsKLQkJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSkKJiM0MzsJCSAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CQkgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJcmV0dXJuIG1lbWJsb2NrX21hcmtfbm9tYXAoYmFzZSwgc2l6ZSk7CiAJfQomIzQzOwomIzQzOwlpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CSAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJcmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7CiB9CiAKQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogICogZmlyc3QgZW50cnkgaW4gJiMzOTtyZWcmIzM5OyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7CQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLAomIzQzOwkJCQkJICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKQogewogCXBoeXNfYWRkcl90IGJhc2UsIHNpemU7CiAJaW50IGxlbiwgZXJyOwpAQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCiAJYm9vbCBub21hcDsKIAl1NjQgYiwgczsKIAomIzQzOwkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlOwomIzQzOwogCXByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2xlbik7CiAJaWYgKCFwcm9wIHx8ICFsZW4pCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTY3LDE0ICYjNDM7MjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAliYXNlID0gYjsKIAlzaXplID0gczsKIAotCWlmIChzaXplICZhbXA7JmFtcDsgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkgewotCQlmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7Ci0JCXByX2RlYnVnKCYjMzQ7UmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJiMzOTslcyYjMzk7OiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXG4mIzM0OywKLQkJCSB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7CiAJCXByX2VycigmIzM0O1Jlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiAJCSAgICAgICB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiYjNDM7CQkgdW5hbWUsICZhbXA7YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDYsMTAgJiM0MzszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZCkKIAkJYmFzZSA9IGI7CiAJCXNpemUgPSBzOwogCi0JCWlmIChzaXplKSB7Ci0JCQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKLQkJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7Ci0JCX0KJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChjaGlsZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKJiM0MzsJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpOwogCX0KIAogCS8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovCkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpCiAKIAlmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7CiAJCWNvbnN0IGNoYXIgKnVuYW1lOwomIzQzOwkJYm9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlOwogCQlpbnQgZXJyOwogCiAJCWlmICghb2ZfZmR0X2RldmljZV9pc19hdmFpbGFibGUoZmR0LCBjaGlsZCkpCkBAIC0zNTYsOSAmIzQzOzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKQogCiAJCXVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpOwogCi0JCWVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7CiYjNDM7CQllcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsCiYjNDM7CQkJCQkJICZhbXA7c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7CiAJCWlmICghZXJyKQogCQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAoc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSAmYW1wOyZhbXA7CiYjNDM7CQkJICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKQomIzQzOwkJCS8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUmIzM5O3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbm9kZXMgZm9yIHRoZSBkeW5hbWljYWxseS1wbGFjZWQgcmVnaW9ucwpAQCAtNTE4LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbQogCX0KIAogCWZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTsKLQlmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7CiYjNDM7CWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjI3LDEzICYjNDM7Njc3LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2luaXRfbm9kZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLAogICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZQogICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbgogICogQHNpemU6IHNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEKICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGUKICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCi0JCQkJCSAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiYjNDM7CQkJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAomIzQzOwkJCQkJICAgICAgYm9vbCBkeW5hbWljKQogewogCWludCBlcnIgPSAwOwogCWJvb2wgbm9tYXA7CkBAIC02NTcsOSAmIzQzOzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bgogCQlwcl9pbmZvKCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcbiYjMzQ7LCBybWVtLSZndDtuYW1lKTsKIAkJcm1lbS0mZ3Q7bmFtZSA9IE5VTEw7CiAKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7CiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLAogCQkJCSAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTsKJiM0Mztib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7CmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTIwMiw2ICYjNDM7MjAyLDIwIEBAIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLCBwaHlzX2FkZHJfdCBiYXNlMiwKIAlyZXR1cm4gKChiYXNlMSAmbHQ7IChiYXNlMiAmIzQzOyBzaXplMikpICZhbXA7JmFtcDsgKGJhc2UyICZsdDsgKGJhc2UxICYjNDM7IHNpemUxKSkpOwogfQogCiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjsKJiM0MzsKJiM0MzsJbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgJmFtcDtzaXplKTsKJiM0MzsJZm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHsKJiM0MzsJCWlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtZW1ibG9ja19hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJlZ2lvbi0mZ3Q7YmFzZSwgcmVnaW9uLSZndDtzaXplKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQkJCQlwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBhbnl0aGluZyB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCBvciBEZXZpY2UgVHJlZSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIGZhaWxlZCByZXNlcnZlZCBtZW1vcnkgbm9kZXMsIHRyYWNraW5nIHRoZW0gd2l0aCBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNgLCBhbmQgcHJldmVudGluZyB0aGVpciBsYXRlciBpbml0aWFsaXphdGlvbiBpbiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgZm9yIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gaG93IG1lbW9yeSBpcyBmcmVlZCBpbiBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYHJlc2VydmVfZmFpbGVkX25vZGVzYCBhcnJheSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgYF9faW5pdGRhdGFgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250YCB2YXJpYWJsZSBpcyBhbHNvIGBfX2luaXRkYXRhYCBhbmQgemVyb2VkLiBgcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHBvcHVsYXRlcyB0aGlzIGFycmF5LCBhbmQgYHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkYCBjaGVja3MgaXQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHVzZXItc3BhY2UgZXhwb3N1cmUuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYmVpbmcgYWxsb2NhdGVkLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBzb21lb25lIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24uCgpUaGUgcGF0Y2ggc2VlbXMgZmluZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIHRvb2xpbmcgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgZWFybHkgYm9vdCBsb2dpYy4gVGhlIHJpc2tzIEkgc2VlIGFyZSB0aGUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpUbyBiZSBleHRyYSBzdXJlLCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAgY2hhbmdlcy4gVGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CmBgYAoKVGhpcyBqdXN0IGNoYW5nZXMgd2hlbiBtZW1vcnkgaXMgZnJlZWQgb3IgaGFzIGBub21hcGAgY2xlYXJlZCBpbiBjYXNlcyBvZiBmYWlsdXJlLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZWFybHkgYm9vdCBEZXZpY2UgVHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIHBhcnRpY3VsYXJseSBieSB0cmFja2luZyBhbmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBub21hcGAgb3ZlcmxhcHMuIFRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VpdGFibGUgZm9yIGFkZHJlc3NpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBsb2dpYywgYWRkaW5nIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2YXRpb25zIGFuZCBjaGVja2luZyBmb3Igb3ZlcmxhcHMgd2l0aCBub21hcCByZWdpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjc6NDguNzAxNDQ4NzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjM2NjY5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9SRVNFUlZFRF9NRU1cIixcbiAgICBcIk9GX0VBUkxZX0ZMQVRUUkVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCIsXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZVwiLFxuICAgIFwibWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGxvZ2ljLCBhZGRpbmcgdHJhY2tpbmcgZm9yIGZhaWxlZCByZXNlcnZhdGlvbnMgYW5kIGNoZWNraW5nIGZvciBvdmVybGFwcyB3aXRoIG5vbWFwIHJlZ2lvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo0OC43MDE0NTQ2MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIzNTI0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMGI1YmVlYjFhMTNiYTNkODFmMTY3ZDVlNDYwZjg0ZGNmZmVkOGE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXFxuaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXFxuKysrIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xcbkBAIC0zMiw2ICszMiwzMCBAQCBzdGF0aWMgc3RydWN0IHJlc2VydmVkX21lbSAqcmVzZXJ2ZWRfbWVtIF9fcmVmZGF0YSA9IHJlc2VydmVkX21lbV9hcnJheTtcXG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XFxuIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50O1xcbiBcXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTtcXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQgX19pbml0ZGF0YTtcXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQ7IGkrKylcXG4rXFx0XFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzW2ldID09IG5vZGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXFxuK3tcXG4rXFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCA9PSBNQVhfUkVTRVJWRURfUkVHSU9OUykge1xcbitcXHRcXHRwcl9lcnIoXFxcInRvbyBtYW55IGZhaWxlZCByZWdpb25zLCAnJXMnIHJlc2VydmF0aW9uIGZhaWxlZFxcXFxuXFxcIiwgdW5hbWUpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCsrXSA9IG5vZGU7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX3Jlc2VydmVkX21lbW9yeV9hcmNoKHBoeXNfYWRkcl90IHNpemUsXFxuIFxcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLCBib29sIG5vbWFwLFxcbiBcXHRwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpXFxuQEAgLTExMiw3ICsxMzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY19yZXNlcnZlZF9tZW1fYXJyYXkodm9pZClcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbitcXHRcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgZHluYW1pYyk7XFxuIHN0YXRpYyBpbnQgZmR0X3ZhbGlkYXRlX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBwaHlzX2FkZHJfdCAqYWxpZ24pO1xcbiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXFxuQEAgLTEyOCwxMSArMTUzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcXG4gXFx0XFx0ICogaWYgdGhlIHJlZ2lvbiBpc24ndCBtZW1vcnkgYXMgaXQgd29uJ3QgYmUgbWFwcGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxcbitcXHRcXHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxcbitcXHRcXHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdFxcdHJldHVybiBtZW1ibG9ja19tYXJrX25vbWFwKGJhc2UsIHNpemUpO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XFxuK1xcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdHJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xcbiB9XFxuIFxcbkBAIC0xNDEsNyArMTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxcbiAgKiBmaXJzdCBlbnRyeSBpbiAncmVnJyBwcm9wZXJ0eVxcbiAgKi9cXG4gc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpXFxuIHtcXG4gXFx0cGh5c19hZGRyX3QgYmFzZSwgc2l6ZTtcXG4gXFx0aW50IGxlbiwgZXJyO1xcbkBAIC0xNDksNiArMTgxLDggQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxcbiBcXHRib29sIG5vbWFwO1xcbiBcXHR1NjQgYiwgcztcXG4gXFxuK1xcdCpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlID0gZmFsc2U7XFxuK1xcbiBcXHRwcm9wID0gb2ZfZmxhdF9kdF9nZXRfYWRkcl9zaXplX3Byb3Aobm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZsZW4pO1xcbiBcXHRpZiAoIXByb3AgfHwgIWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTE2NywxNCArMjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4gXFx0YmFzZSA9IGI7XFxuIFxcdHNpemUgPSBzO1xcbiBcXG4tXFx0aWYgKHNpemUgXFx1MDAyNlxcdTAwMjYgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkge1xcbi1cXHRcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgdW5hbWUsIFxcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XFxuIFxcdFxcdHByX2VycihcXFwiUmVzZXJ2ZWQgbWVtb3J5OiBmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgZm9yIG5vZGUgJyVzJzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcXFxuXFxcIixcXG4gXFx0XFx0ICAgICAgIHVuYW1lLCBcXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuK1xcdHByX2RlYnVnKFxcXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxcXG5cXFwiLFxcbitcXHRcXHQgdW5hbWUsIFxcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMDYsMTAgKzM0NiwxNCBAQCB2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxcbiBcXHRcXHRiYXNlID0gYjtcXG4gXFx0XFx0c2l6ZSA9IHM7XFxuIFxcbi1cXHRcXHRpZiAoc2l6ZSkge1xcbi1cXHRcXHRcXHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcXG4tXFx0XFx0XFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIXNpemUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkKGNoaWxkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcXG4rXFx0XFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplLCBmYWxzZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovXFxuQEAgLTM0OSw2ICszOTMsNyBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbiBcXG4gXFx0ZmR0X2Zvcl9lYWNoX3N1Ym5vZGUoY2hpbGQsIGZkdCwgbm9kZSkge1xcbiBcXHRcXHRjb25zdCBjaGFyICp1bmFtZTtcXG4rXFx0XFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0aWYgKCFvZl9mZHRfZGV2aWNlX2lzX2F2YWlsYWJsZShmZHQsIGNoaWxkKSlcXG5AQCAtMzU2LDkgKzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbiBcXG4gXFx0XFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XFxuIFxcbi1cXHRcXHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xcbitcXHRcXHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbitcXHRcXHRlbHNlIGlmIChzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcXG4rXFx0XFx0XFx0LyogS2VlcCBhIHNsb3QgZm9yIHRoZSB1bnRyYWNrZWQgbm9kZSdzIGxhdGUgaW5pdGlhbGl6YXRpb24uICovXFxuK1xcdFxcdFxcdGNvdW50Kys7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTYXZlIHRoZSBub2RlcyBmb3IgdGhlIGR5bmFtaWNhbGx5LXBsYWNlZCByZWdpb25zXFxuQEAgLTUxOCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbVxcbiBcXHR9XFxuIFxcbiBcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuLVxcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplKTtcXG4rXFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgdW5hbWUsIGJhc2UsIHNpemUsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjI3LDEzICs2NzcsMTUgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1faW5pdF9ub2RlKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sXFxuICAqIEB1bmFtZTogbmFtZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IG5vZGVcXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWRcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXFxuICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGVcXG4gICogcmVzZXJ2ZWRfbWVtIGFycmF5IHRvIGFsbG93IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoKSB0byBmaW5kIGl0LlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZHluYW1pYylcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0Ym9vbCBub21hcDtcXG5AQCAtNjU3LDkgKzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1blxcbiBcXHRcXHRwcl9pbmZvKFxcXCJub2RlICVzIGNvbXBhdGlibGUgbWF0Y2hpbmcgZmFpbFxcXFxuXFxcIiwgcm1lbS1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdHJtZW0tXFx1MDAzZW5hbWUgPSBOVUxMO1xcbiBcXG4tXFx0XFx0aWYgKG5vbWFwKVxcbitcXHRcXHRpZiAoZHluYW1pYyBcXHUwMDI2XFx1MDAyNiBub21hcClcXG4gXFx0XFx0XFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAocm1lbS1cXHUwMDNlYmFzZSwgcm1lbS1cXHUwMDNlc2l6ZSk7XFxuLVxcdFxcdGVsc2VcXG4rXFxuK1xcdFxcdGlmIChkeW5hbWljIHx8ICFub21hcClcXG4gXFx0XFx0XFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXFx1MDAzZWJhc2UsIHJtZW0tXFx1MDAzZXNpemUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaCBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBpbnQgbWVtYmxvY2tfcGh5c21lbV9hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xcbiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLFxcbiBcXHRcXHRcXHRcXHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XFxuK2Jvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIGJvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRcXHRcXHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gYm9vbCBtZW1ibG9ja192YWxpZGF0ZV9udW1hX2NvdmVyYWdlKHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX2J5dGVzKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NFxcbi0tLSBhL21tL21lbWJsb2NrLmNcXG4rKysgYi9tbS9tZW1ibG9jay5jXFxuQEAgLTIwMiw2ICsyMDIsMjAgQEAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsIHBoeXNfYWRkcl90IGJhc2UyLFxcbiBcXHRyZXR1cm4gKChiYXNlMSBcXHUwMDNjIChiYXNlMiArIHNpemUyKSkgXFx1MDAyNlxcdTAwMjYgKGJhc2UyIFxcdTAwM2MgKGJhc2UxICsgc2l6ZTEpKSk7XFxuIH1cXG4gXFxuK2Jvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnaW9uO1xcbitcXG4rXFx0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXFx1MDAyNnNpemUpO1xcbitcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHJlZ2lvbikge1xcbitcXHRcXHRpZiAobWVtYmxvY2tfaXNfbm9tYXAocmVnaW9uKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChiYXNlLCBzaXplLCByZWdpb24tXFx1MDAzZWJhc2UsIHJlZ2lvbi1cXHUwMDNlc2l6ZSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo1MC4xODUxNTYyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjczNjc2NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfUkVTRVJWRURfTUVNXCIsXG4gICAgXCJPRl9FQVJMWV9GTEFUVFJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZkdF9zY2FuX3Jlc2VydmVkX21lbVwiLFxuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVcIixcbiAgICBcIm1lbWJsb2NrX292ZXJsYXBzX25vbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBhZGRzIGEgY2hlY2sgZm9yIG92ZXJsYXBwaW5nIGBub21hcGAgbWVtb3J5IHJlZ2lvbnMuIFRoaXMgaXMgY29yZSBrZXJuZWwgYm9vdCBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAoZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHVzaW5nIERldmljZSBUcmVlIGxpa2UgQVJNNjQgYW5kIFJJU0MtVikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwYjViZWViMWExM2JhM2Q4MWYxNjdkNWU0NjBmODRkY2ZmZWQ4YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDoyNzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG5pbmRleCA4YzlkNjM5NWQ2YTM5Li4wMDkwZmE4NmRkMTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuKysrIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuQEAgLTMyLDYgKzMyLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpyZXNlcnZlZF9tZW0gX19yZWZkYXRhID0gcmVzZXJ2ZWRfbWVtX2FycmF5O1xuIHN0YXRpYyBpbnQgdG90YWxfcmVzZXJ2ZWRfbWVtX2NudCA9IE1BWF9SRVNFUlZFRF9SRUdJT05TO1xuIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50O1xuIFxuK3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNbTUFYX1JFU0VSVkVEX1JFR0lPTlNdIF9faW5pdGRhdGE7XG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQgX19pbml0ZGF0YTtcbitcbitzdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoaW50IG5vZGUpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQ7IGkrKylcbitcdFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzW2ldID09IG5vZGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXG4re1xuK1x0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCA9PSBNQVhfUkVTRVJWRURfUkVHSU9OUykge1xuK1x0XHRwcl9lcnIoXCJ0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJyVzJyByZXNlcnZhdGlvbiBmYWlsZWRcXG5cIiwgdW5hbWUpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQrK10gPSBub2RlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSxcbiBcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLCBib29sIG5vbWFwLFxuIFx0cGh5c19hZGRyX3QgKnJlc19iYXNlKVxuQEAgLTExMiw3ICsxMzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY19yZXNlcnZlZF9tZW1fYXJyYXkodm9pZClcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbitcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgZHluYW1pYyk7XG4gc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0XHRcdFx0XHQgIHBoeXNfYWRkcl90ICphbGlnbik7XG4gc3RhdGljIGludCBmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLFxuQEAgLTEyOCwxMSArMTUzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcbiBcdFx0ICogaWYgdGhlIHJlZ2lvbiBpc24ndCBtZW1vcnkgYXMgaXQgd29uJ3QgYmUgbWFwcGVkLlxuIFx0XHQgKi9cbiBcdFx0aWYgKG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxuK1x0XHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuK1x0XHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRyZXR1cm4gbWVtYmxvY2tfbWFya19ub21hcChiYXNlLCBzaXplKTtcbiBcdH1cbitcbitcdGlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkgfHxcbitcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdHJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuIH1cbiBcbkBAIC0xNDEsNyArMTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuICAqIGZpcnN0IGVudHJ5IGluICdyZWcnIHByb3BlcnR5XG4gICovXG4gc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuLVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lKVxuK1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpXG4ge1xuIFx0cGh5c19hZGRyX3QgYmFzZSwgc2l6ZTtcbiBcdGludCBsZW4sIGVycjtcbkBAIC0xNDksNiArMTgxLDggQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0Ym9vbCBub21hcDtcbiBcdHU2NCBiLCBzO1xuIFxuK1x0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSBmYWxzZTtcbitcbiBcdHByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCBcInJlZ1wiLCBcdTAwMjZsZW4pO1xuIFx0aWYgKCFwcm9wIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTE2NywxNCArMjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSxcbiBcdGJhc2UgPSBiO1xuIFx0c2l6ZSA9IHM7XG4gXG4tXHRpZiAoc2l6ZSBcdTAwMjZcdTAwMjYgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkge1xuLVx0XHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRcdHByX2RlYnVnKFwiUmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJyVzJzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcblwiLFxuLVx0XHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuLVx0fSBlbHNlIHtcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcbitcdGlmIChlcnIpIHtcbitcdFx0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSB0cnVlO1xuIFx0XHRwcl9lcnIoXCJSZXNlcnZlZCBtZW1vcnk6IGZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4gXHRcdCAgICAgICB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuK1x0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1xuK1x0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuK1x0cHJfZGVidWcoXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4rXHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNiwxMCArMzQ2LDE0IEBAIHZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpXG4gXHRcdGJhc2UgPSBiO1xuIFx0XHRzaXplID0gcztcbiBcbi1cdFx0aWYgKHNpemUpIHtcbi1cdFx0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbi1cdFx0XHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShjaGlsZCwgdW5hbWUsIGJhc2UsIHNpemUpO1xuLVx0XHR9XG4rXHRcdGlmICghc2l6ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkKGNoaWxkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4rXHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG92ZXJsYXBwaW5nIHJlc2VydmVkIHJlZ2lvbnMgKi9cbkBAIC0zNDksNiArMzkzLDcgQEAgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbiBcbiBcdGZkdF9mb3JfZWFjaF9zdWJub2RlKGNoaWxkLCBmZHQsIG5vZGUpIHtcbiBcdFx0Y29uc3QgY2hhciAqdW5hbWU7XG4rXHRcdGJvb2wgc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZTtcbiBcdFx0aW50IGVycjtcbiBcbiBcdFx0aWYgKCFvZl9mZHRfZGV2aWNlX2lzX2F2YWlsYWJsZShmZHQsIGNoaWxkKSlcbkBAIC0zNTYsOSArNDAxLDE0IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuIFxuLVx0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xuK1x0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb3VudCsrO1xuK1x0XHRlbHNlIGlmIChzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcbitcdFx0XHQvKiBLZWVwIGEgc2xvdCBmb3IgdGhlIHVudHJhY2tlZCBub2RlJ3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi9cbitcdFx0XHRjb3VudCsrO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTYXZlIHRoZSBub2RlcyBmb3IgdGhlIGR5bmFtaWNhbGx5LXBsYWNlZCByZWdpb25zXG5AQCAtNTE4LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtXG4gXHR9XG4gXG4gXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4rXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjI3LDEzICs2NzcsMTUgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1faW5pdF9ub2RlKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sXG4gICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZVxuICAqIEBiYXNlOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb25cbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBkeW5hbWljOiB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXG4gICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBhbmQgc2F2ZXMgYWxsIHJlZ2lvbi1zcGVjaWZpYyBkYXRhIHRvIHRoZVxuICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbitcdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbitcdFx0XHRcdFx0ICAgICAgYm9vbCBkeW5hbWljKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0Ym9vbCBub21hcDtcbkBAIC02NTcsOSArNzA5LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuXG4gXHRcdHByX2luZm8oXCJub2RlICVzIGNvbXBhdGlibGUgbWF0Y2hpbmcgZmFpbFxcblwiLCBybWVtLVx1MDAzZW5hbWUpO1xuIFx0XHRybWVtLVx1MDAzZW5hbWUgPSBOVUxMO1xuIFxuLVx0XHRpZiAobm9tYXApXG4rXHRcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiBub21hcClcbiBcdFx0XHRtZW1ibG9ja19jbGVhcl9ub21hcChybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4tXHRcdGVsc2VcbitcbitcdFx0aWYgKGR5bmFtaWMgfHwgIW5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX3BoeXNfZnJlZShybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXG5pbmRleCBkNjJkYjllNzc2Y2Y5Li4yN2Q2OGZiYjMxNTc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbkBAIC0xNDgsNiArMTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xuIHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG4gXHRcdFx0XHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XG4rYm9vbCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBib29sIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBib29sIG1lbWJsb2NrX3ZhbGlkYXRlX251bWFfY292ZXJhZ2UodW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTIwMiw2ICsyMDIsMjAgQEAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsIHBoeXNfYWRkcl90IGJhc2UyLFxuIFx0cmV0dXJuICgoYmFzZTEgXHUwMDNjIChiYXNlMiArIHNpemUyKSkgXHUwMDI2XHUwMDI2IChiYXNlMiBcdTAwM2MgKGJhc2UxICsgc2l6ZTEpKSk7XG4gfVxuIFxuK2Jvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4re1xuK1x0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnaW9uO1xuK1xuK1x0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4rXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHJlZ2lvbikge1xuK1x0XHRpZiAobWVtYmxvY2tfaXNfbm9tYXAocmVnaW9uKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAoYmFzZSwgc2l6ZSwgcmVnaW9uLVx1MDAzZWJhc2UsIHJlZ2lvbi1cdTAwM2VzaXplKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI3OjUwLjE4NTE2NTI5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzkwMDc3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFJlc2VydmVkIE1lbW9yeSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2ZWQgbWVtb3J5IG5vZGVzIGluIHRoZSBPRiBjb2RlIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgZnVuY3Rpb24gaW4gdGhlIG1lbW9yeSBibG9jayBjb2RlLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGRldmljZSB0cmVlIChPRikgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gT0YgaXMgcHJldHR5IGNvbW1vbiBpbiBBUk0vQVJNNjQgUUVNVSBzZXR1cHMsIGFuZCBJJ3ZlIHNlZW4gaXQgdXNlZCBvbiB4ODYgYW5kIG90aGVyIGFyY2hpdGVjdHVyZXMgdG9vLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gZnV6ej8gVGhlIHBhdGNoIHRvdWNoZXMgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYW5kIGFkZHMgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC4gT2theSwgdGhlc2UgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoYXQncyBhIGJpdCBvZiBhIGh1cmRsZS4gU3l6a2FsbGVyIGlzIHVzdWFsbHkgZm9jdXNlZCBvbiBzeXNjYWxscywgbmV0d29yayBwYWNrZXRzLCBVU0IsIGFuZCB0aGluZ3MgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhlIHN5c3RlbSBpcyB1cCBhbmQgcnVubmluZy4gQnV0IHdhaXQuLi4gY2FuIHN5emthbGxlciBmdXp6IGRldmljZSB0cmVlcyBzb21laG93PyBJIHJlbWVtYmVyIGl0ICpjYW4qIGZ1enogZGV2aWNlIHRyZWVzLCBidXQgSSB0aG91Z2h0IHRoYXQgd2FzIHRocm91Z2ggYHN5el9tb3VudF9pbWFnZWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEFjdHVhbGx5LCBkZXZpY2UgdHJlZXMgYXJlIHR5cGljYWxseSBwcm92aWRlZCBhdCBib290LCBhcmVuJ3QgdGhleT8gU28gdGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IHRvIHRoZXNlIGVhcmx5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRoIHN5emthbGxlcj9cblxuVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGxvYWQgZGV2aWNlIHRyZWUgKm92ZXJsYXlzKiBhdCBydW50aW1lLCBtYXliZSB0aHJvdWdoIGNvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJZiB3ZSBjYW4sIHRoZW4gcGVyaGFwcyB3ZSBjYW4gdHJpZ2dlciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBvciBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgIHRoYXQgd2F5LiBUaW1lIHRvIGNoZWNrIGZvciB0aGF0LiBMZXQncyBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo1Ny4yMjQxNzY0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDE0MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMvbW0vaW5pdC5jPTEwMT12b2lkIF9faW5pdCBzZXR1cF9hcmNoX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL2FyYy9tbS9pbml0LmM6MTM2OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNy1cXG4tLVxcbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTkyLVxcbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2FybS9tbS9pbml0LmMtMTk0LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cXG5hcmNoL2FybTY0L21tL2luaXQuYzozMDA6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTYyPXN0YXRpYyB2b2lkIF9faW5pdCBjc2t5X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy03MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNzItXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0zNTU9dm9pZCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjM2NzpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cXHR1bmZsYXR0ZW5fYW5kX2NvcHlfZGV2aWNlX3RyZWUoKTtcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjMyLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0yMzQtXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVxcdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUyLVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYy0xODUtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYzoxODY6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cXG4tLVxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmM9NDY9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYy04OC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYy05MC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jPTY0ND1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcmVzZXJ2ZV9tZW1fZHQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYzo2NTE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYy02NTItXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTI5Ny1cXHQgKi9cXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoyOTg6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXFxuLS1cXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzaF9vZl9tZW1fcmVzZXJ2ZSh2b2lkKVxcbi0tXFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jLTExNC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jLTExNi19XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9kdGIuYz0xMz12b2lkIHVtbF9kdGJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXFxuYXJjaC91bS9rZXJuZWwvZHRiLmM6MjY6XFx0XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3VtL2tlcm5lbC9kdGIuYy0yNy1cXHR9XFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM9NDA9dm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jOjUwOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz00NzI9c3RhdGljIHZvaWQgX19pbml0IGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIodm9pZClcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtNDg4LS8qKlxcbmRyaXZlcnMvb2YvZmR0LmM6NDg5OiAqIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCkgLSBjcmVhdGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnNcXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy00OTQtICovXFxuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcXG5kcml2ZXJzL29mL2ZkdC5jLTQ5Ni17XFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cXHRmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKCk7XFxuZHJpdmVycy9vZi9mZHQuYzo1MDU6XFx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuZHJpdmVycy9vZi9mZHQuYy01MDYtXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTEyODYtXFx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXFxuZHJpdmVycy9vZi9mZHQuYzoxMjg3OlxcdGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCk7XFxuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxcbi0tXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpfX29mX2dldF9kbWFfcGFyZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL29mL29mX3ByaXZhdGUuaC0xODctXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg4OmludCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE5MC1cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk0LS8qKlxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5Ni0gKiBtZW1vcnkgcmVnaW9ucy5cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MzAzOnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zMDQte1xcbi0tXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYz0zNjM9c3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fYWxsb2Nfc2l6ZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lKTtcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozNjY6ICogZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCkgLSByZXNlcnZlIGFuZCBhbGxvY2F0ZSBtZW1vcnkgb2NjdXBpZWQgYnlcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM2Ny0gKiByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucy5cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzc0LSAqL1xcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mzc1OmludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaD03ND1leHRlcm4gaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaC03Ni1leHRlcm4gdm9pZCBlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oOjk5OnN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKSB7fVxcbmluY2x1ZGUvbGludXgvb2ZfZmR0LmgtMTAwLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYodm9pZCkge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjc6NTguODY0MzIzMDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MzEwODY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyBvbiBTeXprYWxsZXIgYW5kIERldmljZSBUcmVlIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGNhbGxlZCByZWFsbHkgZWFybHkgb24sIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGV5J3JlIGBfX2luaXRgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIGlmIHN5emthbGxlciBjYW4gZXZlbiB0b3VjaCB0aGVtLiBTeXprYWxsZXIsIGZyb20gd2hhdCBJIGtub3csIHdvcmtzIGl0cyBtYWdpYyBieSBnZW5lcmF0aW5nIHN5c2NhbGxzLCB3aGljaCBvYnZpb3VzbHkgaGFwcGVuICphZnRlciogdGhlIGtlcm5lbCBpcyB1cCBhbmQgcnVubmluZy4gU28sIHRoZSBkaXJlY3QgYXBwcm9hY2ggaXMgcHJvYmFibHkgb3V0LlxuXG5CdXQgaGFuZyBvbuKApiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgYW5kIGRldmljZSB0cmVlcy4gRG9lc24ndCBpdCBoYXZlIHNvbWUgY2FwYWJpbGl0eSBpbiB0aGF0IHJlYWxtPyBEb2VzIGl0IGZlZWQgYSBjdXN0b20gRFQgdG8gdGhlIGtlcm5lbCBhdCBib290LCBvciB2aWEgc29tZSBzbmVha3kgbWVjaGFuaXNtIEknbSBmb3JnZXR0aW5nPyBJIGRvIHJlY2FsbCBgc3l6X21vdW50X2ltYWdlYCwgYnV0IHRoYXQncyBmb3IgZmlsZXN5c3RlbXMsIHJpZ2h0PyBEZWZpbml0ZWx5IG5vdCBmb3IgRFRzLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2suIERvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpmdXp6KiBkZXZpY2UgdHJlZXM/IEkgYnJpZWZseSByZW1lbWJlciBzb21lIHN1cHBvcnQsIHBlcmhhcHMgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X2luaXRfbmV0X3dvcmRgPyBObywgdGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbkFoYSEgTm93IGl0J3MgY2xpY2tpbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBkZXZpY2UgdHJlZXMsIGJ1dCBpdCdzIGRvbmUgZHVyaW5nIGJvb3QuIFRoZSB3YXkgaXQgd29ya3MsIEkgYmVsaWV2ZSwgaXMgaXQgY2FuIHBhc3MgYSBmdXp6ZWQgRFRCIHRvIHRoZSBrZXJuZWwgd2hlbiBhIFZNIGlzIGxhdW5jaGVkLiBUaGUgc3l6a2FsbGVyIGFyY2hpdGVjdHVyZSBpcyBzZXQgdXAgdG8gaGFuZGxlIFZNcyBib290aW5nIHdpdGggdGhlc2UgZnV6emVkIERUQnMuIE15IG1lbW9yeSBpcyBjb3JyZWN0LCBiZWNhdXNlIHRvb2xzIGxpa2UgYHN5ei1mdXp6ZXJgIGNhbiBwYXNzIGEgRFRCIHRvIFFFTVUuXG5cblNvLCBkb2VzIHN5emthbGxlciBkbyB0aGlzIHdpdGggRFRzPyBJIHJlbWVtYmVyIHN5emthbGxlciBoYWQgRFQgZnV6emluZyBzdXBwb3J0LCB0aGF0J3Mgd2hhdCBJIGFtIHRoaW5raW5nLiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzIGRlZGljYXRlZCBmb3IgRFQgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6MDUuNTM3NDM1NDExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTgzMDk1NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el8uKmR0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODowOC4wNTU3NTM5NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTA1NjI5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2FpdCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBkZXZpY2UgdHJlZXMsIGRvZXNuJ3QgaXQ/XCIgSSdtIHByZXR0eSBzdXJlIGl0IGdlbmVyYXRlcyB0aGVtIGFuZCBmZWVkcyB0aGVtIHRvIFFFTVUuIFRoYXQncyB0aGUga2V5LiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBvZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtZW1ibG9jay5jYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGFuZCBtb2RpZmljYXRpb25zIHRvIGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVS1iYXNlZCBzZXR1cCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgcHJvbXB0IGNhcmVzIGFib3V0LiBUaGFua2Z1bGx5LCBRRU1VIHJlbGllcyBvbiBkZXZpY2UgdHJlZXMgZm9yIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYsIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuXG5cblRoZSBwcm9tcHQgb3V0bGluZXMgc3BlY2lmaWMgc2NlbmFyaW9zIHRoYXQgZGlzcXVhbGlmeSBmdXp6aW5nLiBMZXQncyBzZWUuLi4gZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIHN0dWZmIGxpa2UgbG9nZ2luZywgYW5kIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIG5vLWdvcy4gVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3BlLiBUZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1Zz8gQWxzbyBuby4gQnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGltcGFjdGluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLiBUaGF0J3MgYSBnb29kIHNpZ24uXG5cblRoZSBwcm9tcHQgc3RhdGVzIGlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvciBkcml2ZXJzLCBJIG5lZWQgdG8gdmVyaWZ5IGl0IGNhbiBiZSBleGVjdXRlZCB1c2luZyBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gcmV0dXJuIFwiV29ydGhGdXp6aW5nPXRydWUuXCIgRXhjZWxsZW50LlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHN5emthbGxlciBhbmQgRFRCcy4gSXQgc2VlbXMgbXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gSXQgZG9lcyBmdXp6IHRoZW0sIGJ5IGdlbmVyYXRpbmcgdGhlbSBhbmQgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwuXG5cblNvLCB0aGlzIGxvb2tzIHByb21pc2luZy4gSXQncyBjb3JlIGtlcm5lbCBsb2dpYywgcmVhY2hhYmxlIHZpYSBRRU1VLCBhbmQgc3l6a2FsbGVyICpjYW4qIGZ1enogZGV2aWNlIHRyZWVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBMZXQncyBzZWUuLi4gYGRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNgIHJlcXVpcmVzIGBDT05GSUdfT0ZfUkVTRVJWRURfTUVNYCwgd2hpY2ggd2lsbCBiZSBjaGVja2VkIHZpYSB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjE2LjU2MTM4NTEwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MTE3MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTk1PWNvbmZpZyBPRl9JUlFcXG4tLVxcbmRyaXZlcnMvb2YvS2NvbmZpZy05OC1cXG5kcml2ZXJzL29mL0tjb25maWc6OTk6Y29uZmlnIE9GX1JFU0VSVkVEX01FTVxcbmRyaXZlcnMvb2YvS2NvbmZpZy0xMDAtXFx0ZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6MTguMDk5NTEyMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUzMzM1MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IFJlc2VydmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRl9FQVJMWV9GTEFUVFJFRWAuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbiwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSByZXNlcnZhdGlvbiBzdHJhdGVnaWVzLiBMZXQncyBkZWx2ZSBpbnRvIHdoYXQgYE9GX0VBUkxZX0ZMQVRUUkVFYCBhY3R1YWxseSBlbnRhaWxzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGltcGFjdHMgb3VyIG1lbW9yeSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBoZXJlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjIxLjA1Mjg1MDA2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0Njc4NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfRUFSTFlfRkxBVFRSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTY0PWNvbmZpZyBPRl9GTEFUVFJFRVxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTY5LVxcbmRyaXZlcnMvb2YvS2NvbmZpZzo3MDpjb25maWcgT0ZfRUFSTFlfRkxBVFRSRUVcXG5kcml2ZXJzL29mL0tjb25maWctNzEtXFx0ZGVmX2Jvb2wgT0YgXFx1MDAyNlxcdTAwMjYgIShTUEFSQyB8fCBBTFBIQSB8fCBIRVhBR09OIHx8IE02OEsgfHwgUEFSSVNDIHx8IFMzOTApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjIyLjU5OTY0MjQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDYwMjQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXM6IFJlc2VydmVkIE1lbW9yeSBpbiBFYXJseSBCb290KipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IGFuZCBEZXZpY2UgVHJlZSAoRFQpIGluaXRpYWxpemF0aW9uLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGUgXCJPRlwiIGZsYWcuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBtb3N0IHJlbGV2YW50IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcsIGtlZXBpbmcgaW4gbWluZCB0aGUgbmVlZCB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIGluc3RlYWQgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpc24ndCBza2V3ZWQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUgZWFybHkgYm9vdCBzZXF1ZW5jZS4gSSBrbm93IHRoYXQgYmVjYXVzZSBpdCByZWZlcmVuY2VzIHRoaW5ncyB0aGF0IGhhcHBlbiBlYXJseSwgYW5kIHRoZSBmdW5jdGlvbnMgYXJlIGFsbCBtYXJrZWQgYF9faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zOiBgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeWAsIGBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZ2AsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgLCBhbmQgYWRkcyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBsaXN0IHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdGhlIHRoaW5ncyB0aGF0IGhhdmUgZXhwbGljaXQgc3ltYm9sIGFkZHJlc3Nlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXI6XG5cbiogICBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgXG4qICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWBcbiogICBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgXG5cbk5vdyBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBpcyBkZWZpbmVkIGFzIGBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKWAsIHNvIGl0J3MgYSBjYW5kaWRhdGUuIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAgaXMgYHZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpYCwgYW5kIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgYGJvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpYC5cblxuSSBhbHNvIHNlZSB0aGF0IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZC4gSSB3b25kZXIgaWYgdGhlIG90aGVycyBhcmUgYXMgd2VsbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODozMC4wNTk4ODcyNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkyNTM4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Mz1zdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE0NS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0xNDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBoeXNfYWRkcl90IHNpemUsIGJvb2wgbm9tYXApXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE3ND1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTIwNi1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjIwNzpcXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTIwOC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjMxLjU3OTE0NjYwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDMzNjAyMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlc2VydmVkIE1lbW9yeSBDb2RlIGFuZCBTeXprYWxsZXIncyBSZWFjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBhbmQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCDigJMgdGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgdGhhdCBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlIGFuZCBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZyB2aWEgc3RhbmRhcmQgaW50ZXJmYWNlcy4gVGhlIFwibm9uLXN0YXRpY1wiIGZ1bmN0aW9ucywgbmFtZWx5IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCwgYXJlIHdoZXJlIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGVzZT9cIiBUaGVzZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290LCBhbmQgc3l6a2FsbGVyJ3MgY292ZXJhZ2UgY29sbGVjdGlvbiwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGFydHMgKmFmdGVyKiB0aGUga2VybmVsIGlzIHVwIGFuZCBydW5uaW5nLCB1c3VhbGx5IGluIHRoZSBpbml0IHByb2Nlc3Mgb3IgbGF0ZXIuIFRoYXQgbWVhbnMgYW55IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGZyZWVkIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBoYXMgYSBjaGFuY2UgdG8gbW9uaXRvciB0aGVtLiBJdCdzIHRoYXQgd2hvbGUgYF9faW5pdGAgc2VjdGlvbiBiZWluZyBmcmVlZCBhbmQgdGhlIGZhY3QgdGhhdCBjb3ZlcmFnZSBjb2xsZWN0aW9uIGlzbid0IGFjdGl2ZSBkdXJpbmcgdGhhdCBlYXJseSBib290IHBoYXNlIHRoYXQgcmVhbGx5IG1ha2VzIGl0IGEgZGVhZCBlbmQgZm9yIHN5emthbGxlci5cblxuTm93LCB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IEtDT1YuIERvZXNuJ3QgdGhhdCBnZXQgZW5hYmxlZCBlYXJseT8gT2theSwgeWVzLCBLQ09WICppcyogaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QuIEJ1dCBzeXprYWxsZXIgb25seSBjb2xsZWN0cyBjb3ZlcmFnZSBmb3IgdGhlIHRocmVhZHMgaXQgY29udHJvbHMsIHJpZ2h0PyBBbmQgdGhpcyBlYXJseSBib290IGNvZGUgcnVucyBpbiB0aGUgaW5pdCB0YXNrLCBsb25nIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBzdGFydHMgdXAuIFNvIEtDT1YsIGFzIGZhciBhcyBzeXprYWxsZXIgaXMgY29uY2VybmVkLCBpcyBhIG5vLWdvIGZvciB0aGlzIGNvZGUgYXMgd2VsbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzLCBhbmQgaXQncyBmcnVzdHJhdGluZywgc3l6a2FsbGVyIHByb2JhYmx5IGNhbid0IGZ1enogdGhpcyBlYXJseSBib290IGNvZGUuIEkgY2FuJ3QgdGhpbmsgb2YgYW55IG9idmlvdXMgd2F5IHRoYXQgc3l6a2FsbGVyIGNvdWxkIGdhaW4gYWNjZXNzIHRvIHRob3NlIGZ1bmN0aW9ucyBpbiB0aGVpciBub3JtYWwgc3RhdGUuIEhvd2V2ZXIsIG1heWJlIHRoZXJlJ3MgYSBiYWNrIGRvb3IuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QuXG5cblNvLCBsZXQncyBpbnZlc3RpZ2F0ZTogSXMgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGU/IExldCdzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODozNy42MTI3NTE1MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjcwNTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYy0xMzUtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvYXJjL21tL2luaXQuYy0xMzctXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmM9MTgwPXZvaWQgX19pbml0IGFybV9tZW1ibG9ja19pbml0KGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxcbi0tXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cXG5hcmNoL2FybS9tbS9pbml0LmM6MTkzOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTE5Nj12b2lkIF9faW5pdCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL2luaXQuYy0yOTktXFxuYXJjaC9hcm02NC9tbS9pbml0LmM6MzAwOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMzAxLX1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNzAtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jOjcxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MzU1PXZvaWQgX19pbml0IHBsYXRmb3JtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2Ni1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzozNjc6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0zNjgtXFx0dW5mbGF0dGVuX2FuZF9jb3B5X2RldmljZV90cmVlKCk7XFxuLS1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jPTE2NT1hc21saW5rYWdlIHZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjIzMzpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTYzMz1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9tZW1faW5pdChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY1MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmM9MTU5PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVxcdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmM6MTg2OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYy0xODctXFxuLS1cXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtODgtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYzo4OTpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYz02NDQ9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtX2R0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYy02NTAtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMtNjUyLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MjE3PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXFx0ICovXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6Mjk4OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMjk5LVxcbi0tXFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcXG4tLVxcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTQtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jOjExNTpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvZHRiLmM9MTM9dm9pZCB1bWxfZHRiX2luaXQodm9pZClcXG4tLVxcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI1LVxcbmFyY2gvdW0va2VybmVsL2R0Yi5jOjI2OlxcdFxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjctXFx0fVxcbi0tXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jPTQwPXZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTQ5LVxcbmFyY2gveHRlbnNhL21tL2luaXQuYzo1MDpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gveHRlbnNhL21tL2luaXQuYy01MS1cXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4OC0vKipcXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXFxuZHJpdmVycy9vZi9mZHQuYy00OTAtICpcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xcbmRyaXZlcnMvb2YvZmR0LmM6NDk1OnZvaWQgX19pbml0IGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXFxuZHJpdmVycy9vZi9mZHQuYy00OTYte1xcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy01MDQtXFx0ZmR0X3Jlc2VydmVfZWxmY29yZWhkcigpO1xcbmRyaXZlcnMvb2YvZmR0LmM6NTA1OlxcdGZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmRyaXZlcnMvb2YvZmR0LmMtNTA2LVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz0xMjgyPXZvaWQgX19pbml0IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVxcdC8qIFNhdmUgdGhlIHN0YXRpY2FsbHktcGxhY2VkIHJlZ2lvbnMgaW4gdGhlIHJlc2VydmVkX21lbSBhcnJheSAqL1xcbmRyaXZlcnMvb2YvZmR0LmM6MTI4NzpcXHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xcbmRyaXZlcnMvb2YvZmR0LmMtMTI4OC1cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTg3LVxcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4OTp2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKTtcXG5kcml2ZXJzL29mL29mX3ByaXZhdGUuaC0xOTAtXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTI2Nz1zdGF0aWMgdm9pZCBfX2luaXQgX19ybWVtX2NoZWNrX2Zvcl9vdmVybGFwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjI5NTogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpIC0gU2NhbiBGRFQgYW5kIGluaXRpYWxpemUgcmVtYWluaW5nIHJlc2VydmVkXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yOTYtICogbWVtb3J5IHJlZ2lvbnMuXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTMwMi0gKi9cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjMwMzp2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MzYzPXN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSk7XFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM2NS0vKlxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MzY2OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gcmVzZXJ2ZSBhbmQgYWxsb2NhdGUgbWVtb3J5IG9jY3VwaWVkIGJ5XFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM3NC0gKi9cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oOjc1OmV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvb2ZfZmR0LmgtNzYtZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaD05OD1zdGF0aWMgaW5saW5lIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaDo5OTpzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCkge31cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjM5LjEzOTgxNDI2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzEzOTUzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVhcmx5IEJvb3QgQ29kZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgb25seSBjYWxsZWQgZnJvbSBgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCB3aGljaCBpdHNlbGYgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBhcmNoaXRlY3R1cmUgc2V0dXAsIHZlcnkgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzPyBJdCBzZWVtcyB1bmxpa2VseSBiZWNhdXNlIHN5emthbGxlciB1c3VhbGx5IGdldHMgY292ZXJhZ2UgZmVlZGJhY2sgZnJvbSB1c2VyLXNwYWNlIHByb2Nlc3NlcyB2aWEgS0NPViwgYW5kIHRoYXQncyBub3QgYWN0aXZlIGF0IHRoaXMgc3RhZ2UuXG5cbkJ1dCB3YWl0LCBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgZG9pbmcgXCJib290IGZ1enppbmdcIiBvciBcIkRUIGZ1enppbmdcIiB3aGVyZSBpdCBwYXNzZXMgYSBmdXp6ZWQgRGV2aWNlIFRyZWUgQmxvYiAoRFRCKSB0byBRRU1VIGFuZCBjaGVja3MgZm9yIGtlcm5lbCBjcmFzaGVzIGR1cmluZyB0aGUgYm9vdC4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBJIGNhbid0IHJlbWVtYmVyIGlmIGl0IGhhcyBhIGBzeXMvbGludXgvZGV2aWNldHJlZWAgZW50cnkuLi4gSSBkb24ndCB0aGluayBzbywgYnV0IGl0IGRlZmluaXRlbHkgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGJvb3QgcHJvY2VzcyBmdXp6aW5nLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZiB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGlzIFdvcnRoRnV6emluZz10cnVlLiBXZWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgc29tZSB0aGluZ3MuXG5cbkZpcnN0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zLiBJIHNlZSB0aGF0IGBPRl9SRVNFUlZFRF9NRU1gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgT0ZfRUFSTFlfRkxBVFRSRUVgIGlzIGVuYWJsZWQuIEFuZCwgZnVydGhlciwgYE9GX0VBUkxZX0ZMQVRUUkVFYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYE9GYCBpcyBlbmFibGVkIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGlzbid0IHNvbWV0aGluZyBvYnNjdXJlIGxpa2UgU1BBUkMgb3IgQUxQSEEuIFNvIGl0IGxvb2tzIGxpa2UgYE9GYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBsb29rIGZvci4gTGV0J3MgbGlzdCBgT0ZgIGFuZCBgT0ZfUkVTRVJWRURfTUVNYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgaG9sZCBvbiwgYE9GX1JFU0VSVkVEX01FTWAgaXMganVzdCBgZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVgLCBzbyBJIGRvbid0IHRlY2huaWNhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGJ1dCBpdCBzaG91bGRuJ3QgaHVydCB0byBoYXZlIGl0IHRoZXJlLlxuXG5Ob3csIEknbGwgY2hlY2sgaWYgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBpcyBleHBvcnRlZC4gTm9wZSwgaXQncyBqdXN0IGEgZ2xvYmFsIHZhcmlhYmxlLiBPa2F5LCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC5cblxuSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSByZXZpZXcgdGhlIGRyaXZlciBmaWxlIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjQ4LjQ1Mzc3NzAxOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODI2MzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19vdmVybGFwc19ub21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Nj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE1Ni1cXHRcXHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MTU3OlxcdFxcdCAgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTU4LVxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE2My1cXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzoxNjQ6XFx0ICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTY1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTQ5PXVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE1MC1cXHRcXHRcXHRcXHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE1MTpib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xNTItYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE5OT1tZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTIwNC1cXG5tbS9tZW1ibG9jay5jOjIwNTpib29sIF9faW5pdCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbm1tL21lbWJsb2NrLmMtMjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6NDkuOTcyMDQ2OTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDcxOTk2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIC0gQSBQcm9taXNpbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3Mgc2VlLi4uIEkndmUgc3BvdHRlZCBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGluIGBtbS9tZW1ibG9jay5jYC4gSG1tLCBJJ20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgZnV6emFibGU/IEl0IGRvZXMgbG9vayBsaWtlIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBnb29kIGluZGljYXRvciBvZiBpbml0aWFsIHN5c3RlbSBzZXR1cC4gQmVjYXVzZSBpdCdzIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgdHJlZSBwYXJzaW5nIGFuZCBtZW1vcnkgYmxvY2sgcmVzZXJ2YXRpb24sIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGlzIG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlLlxuXG5HaXZlbiBhbGwgdGhpcywgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8gcHJpb3JpdGl6ZSB0aGVzZSBzeW1ib2xzOiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSB0YXJnZXQgZnVuY3Rpb24gaXRzZWxmOiBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBPRmAgYW5kIGBPRl9SRVNFUlZFRF9NRU1gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBjb3JyZWN0IGZvciB0aGlzLiBZZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGNvbmZpZyBzZXR0aW5nLiBHb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODo1OC42MTkyNDk1MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzc0MjA5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfcmVzZXJ2ZWRfbWVtLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfT0ZfVU5JVFRFU1QpICs9IHVuaXR0ZXN0Lm9cXG5kcml2ZXJzL29mL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19PRl9SRVNFUlZFRF9NRU0pICs9IG9mX3Jlc2VydmVkX21lbS5vXFxuZHJpdmVycy9vZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfT0ZfUkVTT0xWRSkgICs9IHJlc29sdmVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MDAuOTU2Njc3NzQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODkzODI0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCB0b3VjaGVzIG9uIGBDT05GSUdfT0ZfUkVTRVJWRURfTUVNYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgQ09ORklHX09GX0VBUkxZX0ZMQVRUUkVFYCwgYXMgaXQgc2VlbXMgcmVsYXRlZC4gSSdsbCBpbmNsdWRlIGJvdGggYE9GYCwgYE9GX1JFU0VSVkVEX01FTWAsIGFuZCBgT0ZfRUFSTFlfRkxBVFRSRUVgIGluIG15IGV2YWx1YXRpb24uXG5cbldhaXQsIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gQnV0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVSwgcGFydGljdWxhcmx5IG9uIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYgc3lzdGVtcyB0aGF0IGxldmVyYWdlIHRoZSBEZXZpY2UgVHJlZS5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBvciBhZGRlZCBhbmQgaWYgdGhleSBhcmUgc3RhdGljLlxuSSBjYW4gc2VlIHRoYXQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnYCwgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGVgIGFuZCBgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLlxuVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3QgdGhlIHByaW1hcnkgZm9jdXMgb2YgdGhlIGNoYW5nZXMuXG5cblRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBhcmU6XG4qICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWBcbiogICBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgXG4qICAgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYFxuXG5UaGVzZSB0aHJlZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGFkZGl0aW9ucyBhbmQgY2hhbmdlcyB3aXRoaW4gdGhlIHBhdGNoLiBUaGV5J3JlIG15ICpGb2N1c1N5bWJvbHMqLlxuXG5VbHRpbWF0ZWx5LCB0aGUgcGF0Y2ggaXMgYWJvdXQgY2hhbmdlcyB0byB0aGUgRGV2aWNlIFRyZWUncyByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGludHJvZHVjZXMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyAqZnVuZGFtZW50YWwqIGtlcm5lbCBib290IGxvZ2ljLCBhbmQgaW1wb3J0YW50bHksIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGVzcGVjaWFsbHkgb24gQVJNNjQgYW5kIFJJU0MtViwgd2hpY2ggaGVhdmlseSB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyOToxMi44NTA1MDU3MTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQxNTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0ZcIixcbiAgICBcIk9GX1JFU0VSVkVEX01FTVwiLFxuICAgIFwiT0ZfRUFSTFlfRkxBVFRSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1cIixcbiAgICBcImZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlXCIsXG4gICAgXCJtZW1ibG9ja19vdmVybGFwc19ub21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9SRVNFUlZFRF9NRU1cIixcbiAgICBcIk9GX0VBUkxZX0ZMQVRUUkVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCIsXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZVwiLFxuICAgIFwibWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MTIuOTIxOTI2NTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAxNjE0NzE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI5OjEyLjkyMjU4OTM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDAxNTQ3NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbmluZGV4IDhjOWQ2Mzk1ZDZhMzkuLjAwOTBmYTg2ZGQxMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG4rKysgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG5AQCAtMzIsNiArMzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7XG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XG4gc3RhdGljIGludCByZXNlcnZlZF9tZW1fY291bnQ7XG4gXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTtcbitzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhO1xuK1xuK3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSlcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlc2VydmVfZmFpbGVkX25vZGVzX2NudDsgaSsrKVxuK1x0XHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNbaV0gPT0gbm9kZSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlKGludCBub2RlLCBjb25zdCBjaGFyICp1bmFtZSlcbit7XG4rXHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7XG4rXHRcdHByX2VycihcInRvbyBtYW55IGZhaWxlZCByZWdpb25zLCAnJXMnIHJlc2VydmF0aW9uIGZhaWxlZFxcblwiLCB1bmFtZSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCsrXSA9IG5vZGU7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9hbGxvY19yZXNlcnZlZF9tZW1vcnlfYXJjaChwaHlzX2FkZHJfdCBzaXplLFxuIFx0cGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQsIGJvb2wgbm9tYXAsXG4gXHRwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpXG5AQCAtMTEyLDcgKzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK1x0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBkeW5hbWljKTtcbiBzdGF0aWMgaW50IGZkdF92YWxpZGF0ZV9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgKmFsaWduKTtcbiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXG5AQCAtMTI4LDExICsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuIFx0XHQgKiBpZiB0aGUgcmVnaW9uIGlzbid0IG1lbW9yeSBhcyBpdCB3b24ndCBiZSBtYXBwZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpXG4rXHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG4rXHRcdCAgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRcdHJldHVybiBtZW1ibG9ja19tYXJrX25vbWFwKGJhc2UsIHNpemUpO1xuIFx0fVxuK1xuK1x0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuK1x0ICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0cmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG4gfVxuIFxuQEAgLTE0MSw3ICsxNzIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXG4gICogZmlyc3QgZW50cnkgaW4gJ3JlZycgcHJvcGVydHlcbiAgKi9cbiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUpXG4rXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSlcbiB7XG4gXHRwaHlzX2FkZHJfdCBiYXNlLCBzaXplO1xuIFx0aW50IGxlbiwgZXJyO1xuQEAgLTE0OSw2ICsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRib29sIG5vbWFwO1xuIFx0dTY0IGIsIHM7XG4gXG4rXHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlO1xuK1xuIFx0cHJvcCA9IG9mX2ZsYXRfZHRfZ2V0X2FkZHJfc2l6ZV9wcm9wKG5vZGUsIFwicmVnXCIsIFx1MDAyNmxlbik7XG4gXHRpZiAoIXByb3AgfHwgIWxlbilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTY3LDE0ICsyMDEsMjAgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0YmFzZSA9IGI7XG4gXHRzaXplID0gcztcbiBcbi1cdGlmIChzaXplIFx1MDAyNlx1MDAyNiBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKSA9PSAwKSB7XG4tXHRcdGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTtcbi1cdFx0cHJfZGVidWcoXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4tXHRcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4tXHR9IGVsc2Uge1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApO1xuK1x0aWYgKGVycikge1xuK1x0XHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XG4gXHRcdHByX2VycihcIlJlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICclcyc6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cIixcbiBcdFx0ICAgICAgIHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4rXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4rXHRwcl9kZWJ1ZyhcIlJlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICclcyc6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cIixcbitcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzA2LDEwICszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbiBcdFx0YmFzZSA9IGI7XG4gXHRcdHNpemUgPSBzO1xuIFxuLVx0XHRpZiAoc2l6ZSkge1xuLVx0XHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuLVx0XHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4tXHRcdH1cbitcdFx0aWYgKCFzaXplKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAocmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoY2hpbGQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbitcdFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplLCBmYWxzZSk7XG4gXHR9XG4gXG4gXHQvKiBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgcmVzZXJ2ZWQgcmVnaW9ucyAqL1xuQEAgLTM0OSw2ICszOTMsNyBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuIFxuIFx0ZmR0X2Zvcl9lYWNoX3N1Ym5vZGUoY2hpbGQsIGZkdCwgbm9kZSkge1xuIFx0XHRjb25zdCBjaGFyICp1bmFtZTtcbitcdFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xuIFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRpZiAoIW9mX2ZkdF9kZXZpY2VfaXNfYXZhaWxhYmxlKGZkdCwgY2hpbGQpKVxuQEAgLTM1Niw5ICs0MDEsMTQgQEAgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbiBcbiBcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4gXG4tXHRcdGVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7XG4rXHRcdGVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvdW50Kys7XG4rXHRcdGVsc2UgaWYgKHNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKVxuK1x0XHRcdC8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUncyBsYXRlIGluaXRpYWxpemF0aW9uLiAqL1xuK1x0XHRcdGNvdW50Kys7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFNhdmUgdGhlIG5vZGVzIGZvciB0aGUgZHluYW1pY2FsbHktcGxhY2VkIHJlZ2lvbnNcbkBAIC01MTgsNyArNTY4LDcgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fYWxsb2Nfc2l6ZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1cbiBcdH1cbiBcbiBcdGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTtcbi1cdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplKTtcbitcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02MjcsMTMgKzY3NywxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9pbml0X25vZGUoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbiAgKiBAdW5hbWU6IG5hbWUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSBub2RlXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuICAqIEBzaXplOiBzaXplIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uXG4rICogQGR5bmFtaWM6IHdoZXRoZXIgdGhlIHJlZ2lvbiB3YXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGFcbiAgKiByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIGFuZCBzYXZlcyBhbGwgcmVnaW9uLXNwZWNpZmljIGRhdGEgdG8gdGhlXG4gICogcmVzZXJ2ZWRfbWVtIGFycmF5IHRvIGFsbG93IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoKSB0byBmaW5kIGl0LlxuICAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuK1x0XHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuK1x0XHRcdFx0XHQgICAgICBib29sIGR5bmFtaWMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRib29sIG5vbWFwO1xuQEAgLTY1Nyw5ICs3MDksMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5cbiBcdFx0cHJfaW5mbyhcIm5vZGUgJXMgY29tcGF0aWJsZSBtYXRjaGluZyBmYWlsXFxuXCIsIHJtZW0tXHUwMDNlbmFtZSk7XG4gXHRcdHJtZW0tXHUwMDNlbmFtZSA9IE5VTEw7XG4gXG4tXHRcdGlmIChub21hcClcbitcdFx0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbi1cdFx0ZWxzZVxuK1xuK1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBpbnQgbWVtYmxvY2tfcGh5c21lbV9hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7XG4gdW5zaWduZWQgbG9uZyBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSxcbiBcdFx0XHRcdCAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTtcbitib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGJvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcbmluZGV4IDljZTg2MzQ5YTI5ZmEuLjRjYWJmZTM2NWFjNDYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1ibG9jay5jXG4rKysgYi9tbS9tZW1ibG9jay5jXG5AQCAtMjAyLDYgKzIwMiwyMCBAQCBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4gXHRyZXR1cm4gKChiYXNlMSBcdTAwM2MgKGJhc2UyICsgc2l6ZTIpKSBcdTAwMjZcdTAwMjYgKGJhc2UyIFx1MDAzYyAoYmFzZTEgKyBzaXplMSkpKTtcbiB9XG4gXG4rYm9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWdpb247XG4rXG4rXHRtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcdTAwMjZzaXplKTtcbitcdGZvcl9lYWNoX21lbV9yZWdpb24ocmVnaW9uKSB7XG4rXHRcdGlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChiYXNlLCBzaXplLCByZWdpb24tXHUwMDNlYmFzZSwgcmVnaW9uLVx1MDAzZXNpemUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdFx0XHRcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MTIuOTIyNTkwMTQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDE1NDQxOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBTYWZldHkgSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGFueXRoaW5nIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9yIERldmljZSBUcmVlIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmVkIG1lbW9yeSBub2RlcywgdHJhY2tpbmcgdGhlbSB3aXRoIGByZXNlcnZlX2ZhaWxlZF9ub2Rlc2AsIGFuZCBwcmV2ZW50aW5nIHRoZWlyIGxhdGVyIGluaXRpYWxpemF0aW9uIGluIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIGZvciBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGFuZCBzb21lIGFkanVzdG1lbnRzIHRvIGhvdyBtZW1vcnkgaXMgZnJlZWQgaW4gYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gTGV0J3Mgc2VlLi4uIHRoZSBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNgIGFycmF5IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCBgX19pbml0ZGF0YWAsIHdoaWNoIG1lYW5zIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYHJlc2VydmVfZmFpbGVkX25vZGVzX2NudGAgdmFyaWFibGUgaXMgYWxzbyBgX19pbml0ZGF0YWAgYW5kIHplcm9lZC4gYHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwb3B1bGF0ZXMgdGhpcyBhcnJheSwgYW5kIGByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZGAgY2hlY2tzIGl0LiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHNvIGZhci5cblxuTm93LCBsZXQncyBjb25zaWRlciB1c2VyLXNwYWNlIGV4cG9zdXJlLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGJlaW5nIGFsbG9jYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBzb21lb25lIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24uXG5cblRoZSBwYXRjaCBzZWVtcyBmaW5lLiBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCB0b29saW5nIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGVhcmx5IGJvb3QgbG9naWMuIFRoZSByaXNrcyBJIHNlZSBhcmUgdGhlIHR5cGljYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5UbyBiZSBleHRyYSBzdXJlLCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCBjaGFuZ2VzLiBUaGUgY29kZSBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4tXHRcdGlmIChub21hcClcbitcdFx0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbi1cdFx0ZWxzZVxuK1xuK1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbmBgYFxuXG5UaGlzIGp1c3QgY2hhbmdlcyB3aGVuIG1lbW9yeSBpcyBmcmVlZCBvciBoYXMgYG5vbWFwYCBjbGVhcmVkIGluIGNhc2VzIG9mIGZhaWx1cmUuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4qKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZWFybHkgYm9vdCBEZXZpY2UgVHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIHBhcnRpY3VsYXJseSBieSB0cmFja2luZyBhbmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBub21hcGAgb3ZlcmxhcHMuIFRoZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWl0YWJsZSBmb3IgYWRkcmVzc2luZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjEwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI5OjMyLjkzODAzODQwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8dddz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-18 09:45:36 +0000 UTC FinishedAt: 2026-08-18 10:29:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6664f2b33db9b6811eb4cec109f06cb2b4f458d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_RESERVED_MEM", "OF_EARLY_FLATTREE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e6664f2b33db9b6811eb4cec109f06cb2b4f458d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OF", "OF_RESERVED_MEM", "OF_EARLY_FLATTREE" ], "series_id": "dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "fdt_scan_reserved_mem", "fdt_scan_reserved_mem_late", "memblock_overlaps_nomap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX1JFU0VSVkVEX01FTSYjMzQ7LAogICAgJiMzNDtPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7LAogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGxvZ2ljLCBhZGRpbmcgdHJhY2tpbmcgZm9yIGZhaWxlZCByZXNlcnZhdGlvbnMgYW5kIGNoZWNraW5nIGZvciBvdmVybGFwcyB3aXRoIG5vbWFwIHJlZ2lvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MgaW4gdGhpcyBjb2RlLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGQwYjViZWViMWExM2JhM2Q4MWYxNjdkNWU0NjBmODRkY2ZmZWQ4YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDoyNzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7XG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XG4gc3RhdGljIGludCByZXNlcnZlZF9tZW1fY291bnQ7XG4gXG4mIzQzO3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNbTUFYX1JFU0VSVkVEX1JFR0lPTlNdIF9faW5pdGRhdGE7XG4mIzQzO3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250IF9faW5pdGRhdGE7XG4mIzQzO1xuJiM0MztzdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoaW50IG5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7dG9vIG1hbnkgZmFpbGVkIHJlZ2lvbnMsICYjMzk7JXMmIzM5OyByZXNlcnZhdGlvbiBmYWlsZWRcXG5cJiMzNDssIHVuYW1lKTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCYjNDM7JiM0MztdID0gbm9kZTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX3Jlc2VydmVkX21lbW9yeV9hcmNoKHBoeXNfYWRkcl90IHNpemUsXG4gXHRwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCxcbiBcdHBoeXNfYWRkcl90ICpyZXNfYmFzZSlcbkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuJiM0MztcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuJiM0MztcdFx0XHRcdCAgICAgICBib29sIGR5bmFtaWMpO1xuIHN0YXRpYyBpbnQgZmR0X3ZhbGlkYXRlX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbiBcdFx0XHRcdFx0ICBwaHlzX2FkZHJfdCAqYWxpZ24pO1xuIHN0YXRpYyBpbnQgZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuIFx0XHQgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC5cbiBcdFx0ICovXG4gXHRcdGlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSlcbiYjNDM7XHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG4mIzQzO1x0XHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRyZXR1cm4gbWVtYmxvY2tfbWFya19ub21hcChiYXNlLCBzaXplKTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuJiM0MztcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1xuIFx0cmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG4gfVxuIFxuQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuICAqIGZpcnN0IGVudHJ5IGluICYjMzk7cmVnJiMzOTsgcHJvcGVydHlcbiAgKi9cbiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUpXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxuJiM0MztcdFx0XHRcdFx0ICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKVxuIHtcbiBcdHBoeXNfYWRkcl90IGJhc2UsIHNpemU7XG4gXHRpbnQgbGVuLCBlcnI7XG5AQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRib29sIG5vbWFwO1xuIFx0dTY0IGIsIHM7XG4gXG4mIzQzO1x0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSBmYWxzZTtcbiYjNDM7XG4gXHRwcm9wID0gb2ZfZmxhdF9kdF9nZXRfYWRkcl9zaXplX3Byb3Aobm9kZSwgXCYjMzQ7cmVnXCYjMzQ7LCBcdTAwMjZsZW4pO1xuIFx0aWYgKCFwcm9wIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTE2NywxNCAmIzQzOzIwMSwyMCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRiYXNlID0gYjtcbiBcdHNpemUgPSBzO1xuIFxuLVx0aWYgKHNpemUgXHUwMDI2XHUwMDI2IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApID09IDApIHtcbi1cdFx0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuLVx0XHRwcl9kZWJ1ZyhcJiMzNDtSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAmIzM5OyVzJiMzOTs6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cJiMzNDssXG4tXHRcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4tXHR9IGVsc2Uge1xuJiM0MztcdGlmICghc2l6ZSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XG4gXHRcdHByX2VycihcJiMzNDtSZXNlcnZlZCBtZW1vcnk6IGZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSBmb3Igbm9kZSAmIzM5OyVzJiMzOTs6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cJiMzNDssXG4gXHRcdCAgICAgICB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuJiM0MztcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuJiM0MztcdHByX2RlYnVnKFwmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcblwmIzM0OyxcbiYjNDM7XHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNiwxMCAmIzQzOzM0NiwxNCBAQCB2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxuIFx0XHRiYXNlID0gYjtcbiBcdFx0c2l6ZSA9IHM7XG4gXG4tXHRcdGlmIChzaXplKSB7XG4tXHRcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4tXHRcdFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplKTtcbi1cdFx0fVxuJiM0MztcdFx0aWYgKCFzaXplKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoY2hpbGQpKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbiYjNDM7XHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG92ZXJsYXBwaW5nIHJlc2VydmVkIHJlZ2lvbnMgKi9cbkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7XG4gXHRcdGNvbnN0IGNoYXIgKnVuYW1lO1xuJiM0MztcdFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xuIFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRpZiAoIW9mX2ZkdF9kZXZpY2VfaXNfYXZhaWxhYmxlKGZkdCwgY2hpbGQpKVxuQEAgLTM1Niw5ICYjNDM7NDAxLDE0IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuIFxuLVx0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xuJiM0MztcdFx0ZXJyID0gX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcoY2hpbGQsIHVuYW1lLFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvdW50JiM0MzsmIzQzOztcbiYjNDM7XHRcdGVsc2UgaWYgKHNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcbiYjNDM7XHRcdFx0LyogS2VlcCBhIHNsb3QgZm9yIHRoZSB1bnRyYWNrZWQgbm9kZSYjMzk7cyBsYXRlIGluaXRpYWxpemF0aW9uLiAqL1xuJiM0MztcdFx0XHRjb3VudCYjNDM7JiM0Mzs7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFNhdmUgdGhlIG5vZGVzIGZvciB0aGUgZHluYW1pY2FsbHktcGxhY2VkIHJlZ2lvbnNcbkBAIC01MTgsNyAmIzQzOzU2OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtXG4gXHR9XG4gXG4gXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4mIzQzO1x0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgdW5hbWUsIGJhc2UsIHNpemUsIHRydWUpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTYyNywxMyAmIzQzOzY3NywxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9pbml0X25vZGUoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbiAgKiBAdW5hbWU6IG5hbWUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSBub2RlXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuICAqIEBzaXplOiBzaXplIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uXG4mIzQzOyAqIEBkeW5hbWljOiB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXG4gICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBhbmQgc2F2ZXMgYWxsIHJlZ2lvbi1zcGVjaWZpYyBkYXRhIHRvIHRoZVxuICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBib29sIGR5bmFtaWMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRib29sIG5vbWFwO1xuQEAgLTY1Nyw5ICYjNDM7NzA5LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuXG4gXHRcdHByX2luZm8oXCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcXG5cJiMzNDssIHJtZW0tXHUwMDNlbmFtZSk7XG4gXHRcdHJtZW0tXHUwMDNlbmFtZSA9IE5VTEw7XG4gXG4tXHRcdGlmIChub21hcClcbiYjNDM7XHRcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiBub21hcClcbiBcdFx0XHRtZW1ibG9ja19jbGVhcl9ub21hcChybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4tXHRcdGVsc2VcbiYjNDM7XG4mIzQzO1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xuIHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG4gXHRcdFx0XHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XG4mIzQzO2Jvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gYm9vbCBtZW1ibG9ja192YWxpZGF0ZV9udW1hX2NvdmVyYWdlKHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX2J5dGVzKTtcbmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suY1xuaW5kZXggOWNlODYzNDlhMjlmYS4uNGNhYmZlMzY1YWM0NiAxMDA2NDRcbi0tLSBhL21tL21lbWJsb2NrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmNcbkBAIC0yMDIsNiAmIzQzOzIwMiwyMCBAQCBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4gXHRyZXR1cm4gKChiYXNlMSBcdTAwM2MgKGJhc2UyICYjNDM7IHNpemUyKSkgXHUwMDI2XHUwMDI2IChiYXNlMiBcdTAwM2MgKGJhc2UxICYjNDM7IHNpemUxKSkpO1xuIH1cbiBcbiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjtcbiYjNDM7XG4mIzQzO1x0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4mIzQzO1x0Zm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHtcbiYjNDM7XHRcdGlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAoYmFzZSwgc2l6ZSwgcmVnaW9uLVx1MDAzZWJhc2UsIHJlZ2lvbi1cdTAwM2VzaXplKSlcbiYjNDM7XHRcdFx0cmV0dXJuIHRydWU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7XG4gYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T0YmIzM0OywKICAgICYjMzQ7T0ZfUkVTRVJWRURfTUVNJiMzNDssCiAgICAmIzM0O09GX0VBUkxZX0ZMQVRUUkVFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtJiMzNDssCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlJiMzNDssCiAgICAmIzM0O21lbWJsb2NrX292ZXJsYXBzX25vbWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMKaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jCkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7CiBzdGF0aWMgaW50IHRvdGFsX3Jlc2VydmVkX21lbV9jbnQgPSBNQVhfUkVTRVJWRURfUkVHSU9OUzsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50OwogCiYjNDM7c3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhOwomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7ewomIzQzOwlpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJiMzOTslcyYjMzk7IHJlc2VydmF0aW9uIGZhaWxlZFxuJiMzNDssIHVuYW1lKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQmIzQzOyYjNDM7XSA9IG5vZGU7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSwKIAlwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCwKIAlwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpCkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKQogfQogCiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAotCQkJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJCSAgICAgICBib29sIGR5bmFtaWMpOwogc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIHBoeXNfYWRkcl90ICphbGlnbik7CiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogCQkgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC4KIAkJICovCiAJCWlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oJmFtcDttZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpICZhbXA7JmFtcDsKLQkJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSkKJiM0MzsJCSAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CQkgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJcmV0dXJuIG1lbWJsb2NrX21hcmtfbm9tYXAoYmFzZSwgc2l6ZSk7CiAJfQomIzQzOwomIzQzOwlpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CSAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJcmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7CiB9CiAKQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogICogZmlyc3QgZW50cnkgaW4gJiMzOTtyZWcmIzM5OyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7CQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLAomIzQzOwkJCQkJICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKQogewogCXBoeXNfYWRkcl90IGJhc2UsIHNpemU7CiAJaW50IGxlbiwgZXJyOwpAQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCiAJYm9vbCBub21hcDsKIAl1NjQgYiwgczsKIAomIzQzOwkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlOwomIzQzOwogCXByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2xlbik7CiAJaWYgKCFwcm9wIHx8ICFsZW4pCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTY3LDE0ICYjNDM7MjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAliYXNlID0gYjsKIAlzaXplID0gczsKIAotCWlmIChzaXplICZhbXA7JmFtcDsgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkgewotCQlmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7Ci0JCXByX2RlYnVnKCYjMzQ7UmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJiMzOTslcyYjMzk7OiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXG4mIzM0OywKLQkJCSB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7CiAJCXByX2VycigmIzM0O1Jlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiAJCSAgICAgICB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiYjNDM7CQkgdW5hbWUsICZhbXA7YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDYsMTAgJiM0MzszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZCkKIAkJYmFzZSA9IGI7CiAJCXNpemUgPSBzOwogCi0JCWlmIChzaXplKSB7Ci0JCQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKLQkJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7Ci0JCX0KJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChjaGlsZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKJiM0MzsJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpOwogCX0KIAogCS8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovCkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpCiAKIAlmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7CiAJCWNvbnN0IGNoYXIgKnVuYW1lOwomIzQzOwkJYm9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlOwogCQlpbnQgZXJyOwogCiAJCWlmICghb2ZfZmR0X2RldmljZV9pc19hdmFpbGFibGUoZmR0LCBjaGlsZCkpCkBAIC0zNTYsOSAmIzQzOzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKQogCiAJCXVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpOwogCi0JCWVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7CiYjNDM7CQllcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsCiYjNDM7CQkJCQkJICZhbXA7c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7CiAJCWlmICghZXJyKQogCQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAoc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSAmYW1wOyZhbXA7CiYjNDM7CQkJICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKQomIzQzOwkJCS8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUmIzM5O3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbm9kZXMgZm9yIHRoZSBkeW5hbWljYWxseS1wbGFjZWQgcmVnaW9ucwpAQCAtNTE4LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbQogCX0KIAogCWZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTsKLQlmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7CiYjNDM7CWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjI3LDEzICYjNDM7Njc3LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2luaXRfbm9kZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLAogICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZQogICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbgogICogQHNpemU6IHNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEKICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGUKICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCi0JCQkJCSAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiYjNDM7CQkJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAomIzQzOwkJCQkJICAgICAgYm9vbCBkeW5hbWljKQogewogCWludCBlcnIgPSAwOwogCWJvb2wgbm9tYXA7CkBAIC02NTcsOSAmIzQzOzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bgogCQlwcl9pbmZvKCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcbiYjMzQ7LCBybWVtLSZndDtuYW1lKTsKIAkJcm1lbS0mZ3Q7bmFtZSA9IE5VTEw7CiAKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7CiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLAogCQkJCSAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTsKJiM0Mztib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7CmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTIwMiw2ICYjNDM7MjAyLDIwIEBAIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLCBwaHlzX2FkZHJfdCBiYXNlMiwKIAlyZXR1cm4gKChiYXNlMSAmbHQ7IChiYXNlMiAmIzQzOyBzaXplMikpICZhbXA7JmFtcDsgKGJhc2UyICZsdDsgKGJhc2UxICYjNDM7IHNpemUxKSkpOwogfQogCiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjsKJiM0MzsKJiM0MzsJbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgJmFtcDtzaXplKTsKJiM0MzsJZm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHsKJiM0MzsJCWlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtZW1ibG9ja19hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJlZ2lvbi0mZ3Q7YmFzZSwgcmVnaW9uLSZndDtzaXplKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQkJCQlwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0Nzg1CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNDAzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIFBhdGNoOiBSZXNlcnZlZCBNZW1vcnkgYW5kIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhZGRpbmcgc29tZSB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmVkIG1lbW9yeSBub2RlcyBpbiB0aGUgT0YgY29kZSBhbmQgaW50cm9kdWNlcyBhIG5ldyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGZ1bmN0aW9uIGluIHRoZSBtZW1vcnkgYmxvY2sgY29kZS4gVGhpcyBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBkZXZpY2UgdHJlZSAoT0YpIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbi4gVGhlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIGNvZGUgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBBbmQgdGhlIGFuc3dlciBpcyB5ZXMsIGFic29sdXRlbHkuIE9GIGlzIHByZXR0eSBjb21tb24gaW4gQVJNL0FSTTY0IFFFTVUgc2V0dXBzLCBhbmQgSSYjMzk7dmUgc2VlbiBpdCB1c2VkIG9uIHg4NiBhbmQgb3RoZXIgYXJjaGl0ZWN0dXJlcyB0b28uCgpUaGUgbmV4dCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gZnV6ej8gVGhlIHBhdGNoIHRvdWNoZXMgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYW5kIGFkZHMgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC4gT2theSwgdGhlc2UgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoYXQmIzM5O3MgYSBiaXQgb2YgYSBodXJkbGUuIFN5emthbGxlciBpcyB1c3VhbGx5IGZvY3VzZWQgb24gc3lzY2FsbHMsIG5ldHdvcmsgcGFja2V0cywgVVNCLCBhbmQgdGhpbmdzIHRoYXQgaGFwcGVuIGFmdGVyIHRoZSBzeXN0ZW0gaXMgdXAgYW5kIHJ1bm5pbmcuIEJ1dCB3YWl0Li4uIGNhbiBzeXprYWxsZXIgZnV6eiBkZXZpY2UgdHJlZXMgc29tZWhvdz8gSSByZW1lbWJlciBpdCAqY2FuKiBmdXp6IGRldmljZSB0cmVlcywgYnV0IEkgdGhvdWdodCB0aGF0IHdhcyB0aHJvdWdoIGBzeXpfbW91bnRfaW1hZ2VgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBBY3R1YWxseSwgZGV2aWNlIHRyZWVzIGFyZSB0eXBpY2FsbHkgcHJvdmlkZWQgYXQgYm9vdCwgYXJlbiYjMzk7dCB0aGV5PyBTbyB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBnZXQgdG8gdGhlc2UgZWFybHkgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb25zIHdpdGggc3l6a2FsbGVyPwoKVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGxvYWQgZGV2aWNlIHRyZWUgKm92ZXJsYXlzKiBhdCBydW50aW1lLCBtYXliZSB0aHJvdWdoIGNvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJZiB3ZSBjYW4sIHRoZW4gcGVyaGFwcyB3ZSBjYW4gdHJpZ2dlciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBvciBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgIHRoYXQgd2F5LiBUaW1lIHRvIGNoZWNrIGZvciB0aGF0LiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHNlYXJjaCBmb3IgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgYW5kIHNlZSB3aGVyZSB0aGF0IGxlYWRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FyYy9tbS9pbml0LmM9MTAxPXZvaWQgX19pbml0IHNldHVwX2FyY2hfbWVtb3J5KHZvaWQpXG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FyYy9tbS9pbml0LmMtMTM3LVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYz0xOTY9dm9pZCBfX2luaXQgYXJtNjRfbWVtYmxvY2tfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjMwMDpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM1NT12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MzY3Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cdHVuZmxhdHRlbl9hbmRfY29weV9kZXZpY2VfdHJlZSgpO1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02MzM9c3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NTItXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jOjE4NjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jLTg4LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM9NjQ0PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbV9kdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXHQgKi9cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjI5ODpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXG4tLVxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcbi0tXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmMtMTE0LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxuLS1cbmFyY2gvdW0va2VybmVsL2R0Yi5jPTEzPXZvaWQgdW1sX2R0Yl9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXG5hcmNoL3VtL2tlcm5lbC9kdGIuYzoyNjpcdFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI3LVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2luaXQuYz00MD12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM6NTA6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00ODgtLyoqXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbmRyaXZlcnMvb2YvZmR0LmMtNDk2LXtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cdGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIoKTtcbmRyaXZlcnMvb2YvZmR0LmM6NTA1Olx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5kcml2ZXJzL29mL2ZkdC5jLTUwNi1cbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXG5kcml2ZXJzL29mL2ZkdC5jOjEyODc6XHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE4Ny1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTkwLVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk2LSAqIG1lbW9yeSByZWdpb25zLlxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozMDM6dm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTM2Mz1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM2NjogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKSAtIHJlc2VydmUgYW5kIGFsbG9jYXRlIG1lbW9yeSBvY2N1cGllZCBieVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzQtICovXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xuLS1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTc2LWV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZih2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6OTk6c3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpIHt9XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODEyNAoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDI5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIFJlYXNvbmluZyBvbiBTeXprYWxsZXIgYW5kIERldmljZSBUcmVlIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIGNhbGxlZCByZWFsbHkgZWFybHkgb24sIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGV5JiMzOTtyZSBgX19pbml0YCBmdW5jdGlvbnMsIHdoaWNoIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdvbmRlciBpZiBzeXprYWxsZXIgY2FuIGV2ZW4gdG91Y2ggdGhlbS4gU3l6a2FsbGVyLCBmcm9tIHdoYXQgSSBrbm93LCB3b3JrcyBpdHMgbWFnaWMgYnkgZ2VuZXJhdGluZyBzeXNjYWxscywgd2hpY2ggb2J2aW91c2x5IGhhcHBlbiAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcuIFNvLCB0aGUgZGlyZWN0IGFwcHJvYWNoIGlzIHByb2JhYmx5IG91dC4KCkJ1dCBoYW5nIG9u4oCmIEkgc2VlbSB0byByZWNhbGwgc29tZXRoaW5nIGFib3V0IHN5emthbGxlciBhbmQgZGV2aWNlIHRyZWVzLiBEb2VzbiYjMzk7dCBpdCBoYXZlIHNvbWUgY2FwYWJpbGl0eSBpbiB0aGF0IHJlYWxtPyBEb2VzIGl0IGZlZWQgYSBjdXN0b20gRFQgdG8gdGhlIGtlcm5lbCBhdCBib290LCBvciB2aWEgc29tZSBzbmVha3kgbWVjaGFuaXNtIEkmIzM5O20gZm9yZ2V0dGluZz8gSSBkbyByZWNhbGwgYHN5el9tb3VudF9pbWFnZWAsIGJ1dCB0aGF0JiMzOTtzIGZvciBmaWxlc3lzdGVtcywgcmlnaHQ/IERlZmluaXRlbHkgbm90IGZvciBEVHMuCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RlcCBiYWNrLiBEb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogZGV2aWNlIHRyZWVzPyBJIGJyaWVmbHkgcmVtZW1iZXIgc29tZSBzdXBwb3J0LCBwZXJoYXBzIHRocm91Z2ggc29tZXRoaW5nIGxpa2UgYHN5el9pbml0X25ldF93b3JkYD8gTm8sIHRoYXQgZG9lc24mIzM5O3QgZmVlbCByaWdodC4KCkFoYSEgTm93IGl0JiMzOTtzIGNsaWNraW5nLiBTeXprYWxsZXIgKmRvZXMqIGZ1enogZGV2aWNlIHRyZWVzLCBidXQgaXQmIzM5O3MgZG9uZSBkdXJpbmcgYm9vdC4gVGhlIHdheSBpdCB3b3JrcywgSSBiZWxpZXZlLCBpcyBpdCBjYW4gcGFzcyBhIGZ1enplZCBEVEIgdG8gdGhlIGtlcm5lbCB3aGVuIGEgVk0gaXMgbGF1bmNoZWQuIFRoZSBzeXprYWxsZXIgYXJjaGl0ZWN0dXJlIGlzIHNldCB1cCB0byBoYW5kbGUgVk1zIGJvb3Rpbmcgd2l0aCB0aGVzZSBmdXp6ZWQgRFRCcy4gTXkgbWVtb3J5IGlzIGNvcnJlY3QsIGJlY2F1c2UgdG9vbHMgbGlrZSBgc3l6LWZ1enplcmAgY2FuIHBhc3MgYSBEVEIgdG8gUUVNVS4KClNvLCBkb2VzIHN5emthbGxlciBkbyB0aGlzIHdpdGggRFRzPyBJIHJlbWVtYmVyIHN5emthbGxlciBoYWQgRFQgZnV6emluZyBzdXBwb3J0LCB0aGF0JiMzOTtzIHdoYXQgSSBhbSB0aGlua2luZy4gSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3l6a2FsbGVyIHBzZXVkby1zeXNjYWxscyBkZWRpY2F0ZWQgZm9yIERUIGludGVyYWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3l6Xy4qZHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDYKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiA2MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7V2FpdCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBkZXZpY2UgdHJlZXMsIGRvZXNuJiMzOTt0IGl0PyYjMzQ7IEkmIzM5O20gcHJldHR5IHN1cmUgaXQgZ2VuZXJhdGVzIHRoZW0gYW5kIGZlZWRzIHRoZW0gdG8gUUVNVS4gVGhhdCYjMzk7cyB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBwYXRjaCBpcyB0b3VjaGluZyBgb2ZfcmVzZXJ2ZWRfbWVtLmNgIGFuZCBgbWVtYmxvY2suY2AuIFRoZSBjaGFuZ2VzIGludm9sdmUgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeWAuCgpOb3csIHRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgY29kZSBpcyBldmVuICpyZWFjaGFibGUqIGluIGEgdHlwaWNhbCBRRU1VLWJhc2VkIHNldHVwLCBiZWNhdXNlIHRoYXQmIzM5O3Mgd2hhdCB0aGUgcHJvbXB0IGNhcmVzIGFib3V0LiBUaGFua2Z1bGx5LCBRRU1VIHJlbGllcyBvbiBkZXZpY2UgdHJlZXMgZm9yIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYsIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuCgpUaGUgcHJvbXB0IG91dGxpbmVzIHNwZWNpZmljIHNjZW5hcmlvcyB0aGF0IGRpc3F1YWxpZnkgZnV6emluZy4gTGV0JiMzOTtzIHNlZS4uLiBkb2N1bWVudGF0aW9uIGNoYW5nZXMsIGRlY29yYXRpdmUgc3R1ZmYgbGlrZSBsb2dnaW5nLCBhbmQgdW5yZWFjaGFibGUgY29kZSBwYXRocyBhcmUgbm8tZ29zLiBWZW5kb3Itc3BlY2lmaWMgZHJpdmVycyByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmU/IE5vcGUuIFRlYXJkb3duIGNhbGxiYWNrcyB0aGF0IG9ubHkgcnVuIGR1cmluZyBob3QtdW5wbHVnPyBBbHNvIG5vLiBCdXQgdGhpcyBwYXRjaCBsb29rcyBsaWtlIGl0JiMzOTtzIGltcGFjdGluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduLgoKVGhlIHByb21wdCBzdGF0ZXMgaWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljIG9yIGRyaXZlcnMsIEkgbmVlZCB0byB2ZXJpZnkgaXQgY2FuIGJlIGV4ZWN1dGVkIHVzaW5nIGNvZGUgc2VhcmNoIHRvb2xzLCBhbmQgdGhlbiByZXR1cm4gJiMzNDtXb3J0aEZ1enppbmc9dHJ1ZS4mIzM0OyBFeGNlbGxlbnQuCgpBbHJpZ2h0LCBiYWNrIHRvIHN5emthbGxlciBhbmQgRFRCcy4gSXQgc2VlbXMgbXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gSXQgZG9lcyBmdXp6IHRoZW0sIGJ5IGdlbmVyYXRpbmcgdGhlbSBhbmQgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwuCgpTbywgdGhpcyBsb29rcyBwcm9taXNpbmcuIEl0JiMzOTtzIGNvcmUga2VybmVsIGxvZ2ljLCByZWFjaGFibGUgdmlhIFFFTVUsIGFuZCBzeXprYWxsZXIgKmNhbiogZnV6eiBkZXZpY2UgdHJlZXMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBMZXQmIzM5O3Mgc2VlLi4uIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCByZXF1aXJlcyBgQ09ORklHX09GX1JFU0VSVkVEX01FTWAsIHdoaWNoIHdpbGwgYmUgY2hlY2tlZCB2aWEgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgbG9va3MgbGlrZSBhIGRlZmluaXRlICYjMzQ7V29ydGhGdXp6aW5nPXRydWUmIzM0Oy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgT0ZfUkVTRVJWRURfTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvS2NvbmZpZz05NT1jb25maWcgT0ZfSVJRXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTk4LVxuZHJpdmVycy9vZi9LY29uZmlnOjk5OmNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cbmRyaXZlcnMvb2YvS2NvbmZpZy0xMDAtXHRkZWZfYm9vbCBPRl9FQVJMWV9GTEFUVFJFRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDE2CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBNZW1vcnkgUmVzZXJ2YXRpb24gU3RyYXRlZ3kqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRl9FQVJMWV9GTEFUVFJFRWAuIFRoYXQmIzM5O3MgYSBrZXkgZGVwZW5kZW5jeSB0byB1bmRlcnN0YW5kLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbm5lY3Rpb24sIGVzcGVjaWFsbHkgaWYgd2UgYXJlIGRlYWxpbmcgd2l0aCBtZW1vcnkgcmVzZXJ2YXRpb24gc3RyYXRlZ2llcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gd2hhdCBgT0ZfRUFSTFlfRkxBVFRSRUVgIGFjdHVhbGx5IGVudGFpbHMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW1wYWN0cyBvdXIgbWVtb3J5IG1hbmFnZW1lbnQuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIGhlcmUgaXMgY3J1Y2lhbC4gSSBuZWVkIHRvIGZ1bGx5IGdyYXNwIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL0tjb25maWc9NjQ9Y29uZmlnIE9GX0ZMQVRUUkVFXG4tLVxuZHJpdmVycy9vZi9LY29uZmlnLTY5LVxuZHJpdmVycy9vZi9LY29uZmlnOjcwOmNvbmZpZyBPRl9FQVJMWV9GTEFUVFJFRVxuZHJpdmVycy9vZi9LY29uZmlnLTcxLVx0ZGVmX2Jvb2wgT0YgXHUwMDI2XHUwMDI2ICEoU1BBUkMgfHwgQUxQSEEgfHwgSEVYQUdPTiB8fCBNNjhLIHx8IFBBUklTQyB8fCBTMzkwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDI5MgoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDQxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEZvY3VzOiBSZXNlcnZlZCBNZW1vcnkgaW4gRWFybHkgQm9vdCoqCgpPa2F5LCBzbyB0aGlzIGNoYW5nZSBwcmltYXJpbHkgZGVhbHMgd2l0aCByZXNlcnZlZCBtZW1vcnkgYW5kIERldmljZSBUcmVlIChEVCkgaW5pdGlhbGl6YXRpb24sIHdoaWNoLCBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgb24gbW9zdCBhcmNoaXRlY3R1cmVzIHVzaW5nIHRoZSAmIzM0O09GJiMzNDsgZmxhZy4gTXkgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIG1vc3QgcmVsZXZhbnQga2VybmVsIGZ1bmN0aW9ucyBmb3IgZnV6emluZywga2VlcGluZyBpbiBtaW5kIHRoZSBuZWVkIHRvIGF2b2lkIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zLCBhbmQgaW5zdGVhZCBmb2N1c2luZyBvbiBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMuIFRoYXQmIzM5O3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpc24mIzM5O3Qgc2tld2VkLgoKVGhlIHBhdGNoIHRvdWNoZXMgYSBmZXcga2V5IGFyZWFzIGluIHRoZSBlYXJseSBib290IHNlcXVlbmNlLiBJIGtub3cgdGhhdCBiZWNhdXNlIGl0IHJlZmVyZW5jZXMgdGhpbmdzIHRoYXQgaGFwcGVuIGVhcmx5LCBhbmQgdGhlIGZ1bmN0aW9ucyBhcmUgYWxsIG1hcmtlZCBgX19pbml0YC4gU3BlY2lmaWNhbGx5LCBpdCBtb2RpZmllcyB0aGVzZSBmdW5jdGlvbnM6IGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YCwgYF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAsIGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAsIGFuZCBhZGRzIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAuCgpOb3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBsaXN0IHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdGhlIHRoaW5ncyB0aGF0IGhhdmUgZXhwbGljaXQgc3ltYm9sIGFkZHJlc3Nlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQmIzM5O3MgcHJldHR5IGNsZWFyOgoKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gCiogICBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgCgpOb3cgbGV0IG1lIGRvdWJsZSBjaGVjayB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlcy4gYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgaXMgZGVmaW5lZCBhcyBgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClgLCBzbyBpdCYjMzk7cyBhIGNhbmRpZGF0ZS4gYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCBpcyBgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBpcyBgYm9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlgLgoKSSBhbHNvIHNlZSB0aGF0IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZC4gSSB3b25kZXIgaWYgdGhlIG90aGVycyBhcmUgYXMgd2VsbC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MTQzPXN0YXRpYyBpbnQgZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE0NS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MTQ2OnN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTQ3LVx0XHRcdFx0XHQgICAgICAgcGh5c19hZGRyX3Qgc2l6ZSwgYm9vbCBub21hcClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE3ND1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yMDYtXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjIwNzpcdGVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApO1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yMDgtXHRpZiAoZXJyKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDQxCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMjYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlc2VydmVkIE1lbW9yeSBDb2RlIGFuZCBTeXprYWxsZXImIzM5O3MgUmVhY2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBhbmQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCDigJMgdGhleSYjMzk7cmUgYWxsIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZywgYmVjYXVzZSB0aGF0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlIGFuZCBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZyB2aWEgc3RhbmRhcmQgaW50ZXJmYWNlcy4gVGhlICYjMzQ7bm9uLXN0YXRpYyYjMzQ7IGZ1bmN0aW9ucywgbmFtZWx5IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCwgYXJlIHdoZXJlIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgJiMzNDtDYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhlc2U/JiMzNDsgVGhlc2UgZnVuY3Rpb25zIGFyZSBleGVjdXRlZCBkdXJpbmcgZWFybHkgYm9vdCwgYW5kIHN5emthbGxlciYjMzk7cyBjb3ZlcmFnZSBjb2xsZWN0aW9uLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHN0YXJ0cyAqYWZ0ZXIqIHRoZSBrZXJuZWwgaXMgdXAgYW5kIHJ1bm5pbmcsIHVzdWFsbHkgaW4gdGhlIGluaXQgcHJvY2VzcyBvciBsYXRlci4gVGhhdCBtZWFucyBhbnkgYF9faW5pdGAgZnVuY3Rpb25zIGFyZSBsaWtlbHkgdG8gYmUgZnJlZWQgYmVmb3JlIHN5emthbGxlciBldmVuIGhhcyBhIGNoYW5jZSB0byBtb25pdG9yIHRoZW0uIEl0JiMzOTtzIHRoYXQgd2hvbGUgYF9faW5pdGAgc2VjdGlvbiBiZWluZyBmcmVlZCBhbmQgdGhlIGZhY3QgdGhhdCBjb3ZlcmFnZSBjb2xsZWN0aW9uIGlzbiYjMzk7dCBhY3RpdmUgZHVyaW5nIHRoYXQgZWFybHkgYm9vdCBwaGFzZSB0aGF0IHJlYWxseSBtYWtlcyBpdCBhIGRlYWQgZW5kIGZvciBzeXprYWxsZXIuCgpOb3csIHdhaXQgYSBtaW51dGUsIEkgc2VlbSB0byByZW1lbWJlciBzb21ldGhpbmcgYWJvdXQgS0NPVi4gRG9lc24mIzM5O3QgdGhhdCBnZXQgZW5hYmxlZCBlYXJseT8gT2theSwgeWVzLCBLQ09WICppcyogaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QuIEJ1dCBzeXprYWxsZXIgb25seSBjb2xsZWN0cyBjb3ZlcmFnZSBmb3IgdGhlIHRocmVhZHMgaXQgY29udHJvbHMsIHJpZ2h0PyBBbmQgdGhpcyBlYXJseSBib290IGNvZGUgcnVucyBpbiB0aGUgaW5pdCB0YXNrLCBsb25nIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBzdGFydHMgdXAuIFNvIEtDT1YsIGFzIGZhciBhcyBzeXprYWxsZXIgaXMgY29uY2VybmVkLCBpcyBhIG5vLWdvIGZvciB0aGlzIGNvZGUgYXMgd2VsbC4KClRoZXJlZm9yZSwgdGhlIG9idmlvdXMgY29uY2x1c2lvbiBpcywgYW5kIGl0JiMzOTtzIGZydXN0cmF0aW5nLCBzeXprYWxsZXIgcHJvYmFibHkgY2FuJiMzOTt0IGZ1enogdGhpcyBlYXJseSBib290IGNvZGUuIEkgY2FuJiMzOTt0IHRoaW5rIG9mIGFueSBvYnZpb3VzIHdheSB0aGF0IHN5emthbGxlciBjb3VsZCBnYWluIGFjY2VzcyB0byB0aG9zZSBmdW5jdGlvbnMgaW4gdGhlaXIgbm9ybWFsIHN0YXRlLiBIb3dldmVyLCBtYXliZSB0aGVyZSYjMzk7cyBhIGJhY2sgZG9vci4gSSBoYXZlIHRvIHZlcmlmeSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgKm9ubHkqIGNhbGxlZCBkdXJpbmcgZWFybHkgYm9vdC4KClNvLCBsZXQmIzM5O3MgaW52ZXN0aWdhdGU6IElzIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gIGNhbGxlZCBhbnl3aGVyZSBlbHNlIGluIHRoZSBjb2RlPyBMZXQmIzM5O3MgY2hlY2suCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FyYy9tbS9pbml0LmM9MTAxPXZvaWQgX19pbml0IHNldHVwX2FyY2hfbWVtb3J5KHZvaWQpXG4tLVxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FyYy9tbS9pbml0LmMtMTM3LVxuLS1cbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXG4tLVxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cbi0tXG5hcmNoL2FybTY0L21tL2luaXQuYz0xOTY9dm9pZCBfX2luaXQgYXJtNjRfbWVtYmxvY2tfaW5pdCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjMwMDpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxuLS1cbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXG4tLVxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jPTM1NT12b2lkIF9faW5pdCBwbGF0Zm9ybV9pbml0KHZvaWQpXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM6MzY3Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cdHVuZmxhdHRlbl9hbmRfY29weV9kZXZpY2VfdHJlZSgpO1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcbi0tXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxuLS1cbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYz02MzM9c3RhdGljIHZvaWQgX19pbml0IGFyY2hfbWVtX2luaXQoY2hhciAqKmNtZGxpbmVfcClcbi0tXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYy02NTItXG4tLVxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxuLS1cbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jOjE4NjpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcbi0tXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jLTg4LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM9NjQ0PXN0YXRpYyB2b2lkIF9faW5pdCBlYXJseV9yZXNlcnZlX21lbV9kdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1Mi1cbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcbi0tXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXHQgKi9cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjI5ODpcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXG4tLVxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcbi0tXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmMtMTE0LVx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1Olx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxuLS1cbmFyY2gvdW0va2VybmVsL2R0Yi5jPTEzPXZvaWQgdW1sX2R0Yl9pbml0KHZvaWQpXG4tLVxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXG5hcmNoL3VtL2tlcm5lbC9kdGIuYzoyNjpcdFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI3LVx0fVxuLS1cbmFyY2gveHRlbnNhL21tL2luaXQuYz00MD12b2lkIF9faW5pdCBib290bWVtX2luaXQodm9pZClcbi0tXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM6NTA6XHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxuLS1cbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy00ODgtLyoqXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxuLS1cbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbmRyaXZlcnMvb2YvZmR0LmMtNDk2LXtcbi0tXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cdGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIoKTtcbmRyaXZlcnMvb2YvZmR0LmM6NTA1Olx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XG5kcml2ZXJzL29mL2ZkdC5jLTUwNi1cbi0tXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXG4tLVxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXG5kcml2ZXJzL29mL2ZkdC5jOjEyODc6XHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE4Ny1cbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTkwLVxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk2LSAqIG1lbW9yeSByZWdpb25zLlxuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozMDM6dm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcbi0tXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTM2Mz1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM2NjogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKSAtIHJlc2VydmUgYW5kIGFsbG9jYXRlIG1lbW9yeSBvY2N1cGllZCBieVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzQtICovXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xuLS1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTc2LWV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZih2b2lkKTtcbi0tXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6OTk6c3RhdGljIGlubGluZSB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpIHt9XG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjY3CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNDgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVhcmx5IEJvb3QgQ29kZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKgoKT2theSwgc28gdGhpcyBjb2RlIGlzIG9ubHkgY2FsbGVkIGZyb20gYGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgd2hpY2ggaXRzZWxmIGlzIG9ubHkgY2FsbGVkIGR1cmluZyB0aGUgYXJjaGl0ZWN0dXJlIHNldHVwLCB2ZXJ5IGVhcmx5IGluIHRoZSBib290IHByb2Nlc3MuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBjYW4gc3l6a2FsbGVyIGV2ZW4gdG91Y2ggdGhpcz8gSXQgc2VlbXMgdW5saWtlbHkgYmVjYXVzZSBzeXprYWxsZXIgdXN1YWxseSBnZXRzIGNvdmVyYWdlIGZlZWRiYWNrIGZyb20gdXNlci1zcGFjZSBwcm9jZXNzZXMgdmlhIEtDT1YsIGFuZCB0aGF0JiMzOTtzIG5vdCBhY3RpdmUgYXQgdGhpcyBzdGFnZS4KCkJ1dCB3YWl0LCBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgZG9pbmcgJiMzNDtib290IGZ1enppbmcmIzM0OyBvciAmIzM0O0RUIGZ1enppbmcmIzM0OyB3aGVyZSBpdCBwYXNzZXMgYSBmdXp6ZWQgRGV2aWNlIFRyZWUgQmxvYiAoRFRCKSB0byBRRU1VIGFuZCBjaGVja3MgZm9yIGtlcm5lbCBjcmFzaGVzIGR1cmluZyB0aGUgYm9vdC4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBJIGNhbiYjMzk7dCByZW1lbWJlciBpZiBpdCBoYXMgYSBgc3lzL2xpbnV4L2RldmljZXRyZWVgIGVudHJ5Li4uIEkgZG9uJiMzOTt0IHRoaW5rIHNvLCBidXQgaXQgZGVmaW5pdGVseSBjYW4gYmUgY29uZmlndXJlZCBmb3IgYm9vdCBwcm9jZXNzIGZ1enppbmcuCgpOb3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZiB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGlzIFdvcnRoRnV6emluZz10cnVlLiBXZWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgc29tZSB0aGluZ3MuCgpGaXJzdCwgSSBzaG91bGQgY2hlY2sgZm9yIGFueSByZXF1aXJlZCBgQ09ORklHX2Agb3B0aW9ucy4gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYE9GX0VBUkxZX0ZMQVRUUkVFYCBpcyBlbmFibGVkLiBBbmQsIGZ1cnRoZXIsIGBPRl9FQVJMWV9GTEFUVFJFRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGlmIGBPRmAgaXMgZW5hYmxlZCBhbmQgdGhlIGFyY2hpdGVjdHVyZSBpc24mIzM5O3Qgc29tZXRoaW5nIG9ic2N1cmUgbGlrZSBTUEFSQyBvciBBTFBIQS4gU28gaXQgbG9va3MgbGlrZSBgT0ZgIGlzIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGxvb2sgZm9yLiBMZXQmIzM5O3MgbGlzdCBgT0ZgIGFuZCBgT0ZfUkVTRVJWRURfTUVNYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgaG9sZCBvbiwgYE9GX1JFU0VSVkVEX01FTWAgaXMganVzdCBgZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVgLCBzbyBJIGRvbiYjMzk7dCB0ZWNobmljYWxseSBuZWVkIHRvIGV4cGxpY2l0bHkgZW5hYmxlIGl0LCBidXQgaXQgc2hvdWxkbiYjMzk7dCBodXJ0IHRvIGhhdmUgaXQgdGhlcmUuCgpOb3csIEkmIzM5O2xsIGNoZWNrIGlmIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZXhwb3J0ZWQuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYSBnbG9iYWwgdmFyaWFibGUuIE9rYXksIHNvIEkgc2hvdWxkIGZvY3VzIG9uIHRoZSBmb2xsb3dpbmcgc3ltYm9sczogYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAsIGFuZCBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLgoKSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSByZXZpZXcgdGhlIGRyaXZlciBmaWxlIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIGFueXRoaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Nj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXG4tLVxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0xNTYtXHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjE1NzpcdFx0ICAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkpXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE1OC1cdFx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTYzLVx0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzoxNjQ6XHQgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE2NS1cdFx0cmV0dXJuIC1FQlVTWTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTQ5PXVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgtMTUwLVx0XHRcdFx0ICAgICBwaHlzX2FkZHJfdCBiYXNlMiwgcGh5c19hZGRyX3Qgc2l6ZTIpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE1MTpib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE1Mi1ib29sIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbi0tXG5tbS9tZW1ibG9jay5jPTE5OT1tZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4tLVxubW0vbWVtYmxvY2suYy0yMDQtXG5tbS9tZW1ibG9jay5jOjIwNTpib29sIF9faW5pdCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxubW0vbWVtYmxvY2suYy0yMDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjE5NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgLSBBIFByb21pc2luZyBUYXJnZXQqKgoKT2theSwgbGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBzcG90dGVkIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaW4gYG1tL21lbWJsb2NrLmNgLiBIbW0sIEkmIzM5O20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgZnV6emFibGU/IEl0IGRvZXMgbG9vayBsaWtlIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYW4gYF9faW5pdGAgZnVuY3Rpb24sIHdoaWNoIGlzIG9mdGVuIGEgZ29vZCBpbmRpY2F0b3Igb2YgaW5pdGlhbCBzeXN0ZW0gc2V0dXAuIEJlY2F1c2UgaXQmIzM5O3Mgd2l0aGluIHRoZSBjb3JlIGtlcm5lbCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCByZWxhdGVkIHRvIGRldmljZSB0cmVlIHBhcnNpbmcgYW5kIG1lbW9yeSBibG9jayByZXNlcnZhdGlvbiwgaXTigJlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIHdpdGhpbiBhIFFFTVUgZW52aXJvbm1lbnQuIFRoaXMgbWFrZXMgaXQgYSBzb2xpZCBjYW5kaWRhdGUuCgpHaXZlbiBhbGwgdGhpcywgSSYjMzk7bSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZ2AgdG8gYHRydWVgLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbi4gSSYjMzk7bSBnb2luZyB0byBwcmlvcml0aXplIHRoZXNlIHN5bWJvbHM6IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQsIG9mIGNvdXJzZSwgdGhlIHRhcmdldCBmdW5jdGlvbiBpdHNlbGY6IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAuCgpOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBlbmFibGluZyB0aGUgcmlnaHQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYE9GYCBhbmQgYE9GX1JFU0VSVkVEX01FTWAuIExldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBPRl9SRVNFUlZFRF9NRU1gIGlzIGNvcnJlY3QgZm9yIHRoaXMuIFllcywgbG9va2luZyBhdCB0aGUgY29kZSwgYGRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNgIGlzIGNvbXBpbGVkIGJhc2VkIG9uIHRoYXQgY29uZmlnIHNldHRpbmcuIEdvb2QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mX3Jlc2VydmVkX21lbS5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvb2YvTWFrZWZpbGU9MTA9b2JqLSQoQ09ORklHX09GX1VOSVRURVNUKSAmIzQzOz0gdW5pdHRlc3Qub1xuZHJpdmVycy9vZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfT0ZfUkVTRVJWRURfTUVNKSAmIzQzOz0gb2ZfcmVzZXJ2ZWRfbWVtLm9cbmRyaXZlcnMvb2YvTWFrZWZpbGUtMTItb2JqLSQoQ09ORklHX09GX1JFU09MVkUpICAmIzQzOz0gcmVzb2x2ZXIub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgxMAoJCQkJCQkJb3V0cHV0OiAxNDEKCQkJCQkJCXRob3VnaHRzOiAzNzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGUgcGF0Y2ggdG91Y2hlcyBvbiBgQ09ORklHX09GX1JFU0VSVkVEX01FTWAuIEkgc2hvdWxkIGFsc28gY29uc2lkZXIgYENPTkZJR19PRl9FQVJMWV9GTEFUVFJFRWAsIGFzIGl0IHNlZW1zIHJlbGF0ZWQuIEkmIzM5O2xsIGluY2x1ZGUgYm90aCBgT0ZgLCBgT0ZfUkVTRVJWRURfTUVNYCwgYW5kIGBPRl9FQVJMWV9GTEFUVFJFRWAgaW4gbXkgZXZhbHVhdGlvbi4KCldhaXQsIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gQnV0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVSwgcGFydGljdWxhcmx5IG9uIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYgc3lzdGVtcyB0aGF0IGxldmVyYWdlIHRoZSBEZXZpY2UgVHJlZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIG9yIGFkZGVkIGFuZCBpZiB0aGV5IGFyZSBzdGF0aWMuCkkgY2FuIHNlZSB0aGF0IGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAsIGBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZ2AsIGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YCwgYHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlYCBhbmQgYHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkYCBhcmUgc3RhdGljIGZ1bmN0aW9ucy4KVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3QgdGhlIHByaW1hcnkgZm9jdXMgb2YgdGhlIGNoYW5nZXMuCgpUaGUgbm9uLXN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmUgbW9kaWZpZWQgb3IgYWRkZWQgYXJlOgoqICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAKKiAgIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAKKiAgIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAKClRoZXNlIHRocmVlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYWRkaXRpb25zIGFuZCBjaGFuZ2VzIHdpdGhpbiB0aGUgcGF0Y2guIFRoZXkmIzM5O3JlIG15ICpGb2N1c1N5bWJvbHMqLgoKVWx0aW1hdGVseSwgdGhlIHBhdGNoIGlzIGFib3V0IGNoYW5nZXMgdG8gdGhlIERldmljZSBUcmVlJiMzOTtzIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgaW50cm9kdWNlcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzICpmdW5kYW1lbnRhbCoga2VybmVsIGJvb3QgbG9naWMsIGFuZCBpbXBvcnRhbnRseSwgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgUUVNVSwgZXNwZWNpYWxseSBvbiBBUk02NCBhbmQgUklTQy1WLCB3aGljaCBoZWF2aWx5IHV0aWxpemUgdGhlIERldmljZSBUcmVlLgoKVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzE4IDEwOjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPRiYjMzQ7LAogICAgJiMzNDtPRl9SRVNFUlZFRF9NRU0mIzM0OywKICAgICYjMzQ7T0ZfRUFSTFlfRkxBVFRSRUUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW0mIzM0OywKICAgICYjMzQ7ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUmIzM0OywKICAgICYjMzQ7bWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBhZGRzIGEgY2hlY2sgZm9yIG92ZXJsYXBwaW5nIGBub21hcGAgbWVtb3J5IHJlZ2lvbnMuIFRoaXMgaXMgY29yZSBrZXJuZWwgYm9vdCBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAoZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHVzaW5nIERldmljZSBUcmVlIGxpa2UgQVJNNjQgYW5kIFJJU0MtVikuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09GJiMzNDssCiAgICAmIzM0O09GX1JFU0VSVkVEX01FTSYjMzQ7LAogICAgJiMzNDtPRl9FQVJMWV9GTEFUVFJFRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZkdF9zY2FuX3Jlc2VydmVkX21lbSYjMzQ7LAogICAgJiMzNDtmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSYjMzQ7LAogICAgJiMzNDttZW1ibG9ja19vdmVybGFwc19ub21hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xOCAxMDoyOTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBsb2dpYywgYWRkaW5nIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2YXRpb25zIGFuZCBjaGVja2luZyBmb3Igb3ZlcmxhcHMgd2l0aCBub21hcCByZWdpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMKaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jCkBAIC0zMiw2ICYjNDM7MzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7CiBzdGF0aWMgaW50IHRvdGFsX3Jlc2VydmVkX21lbV9jbnQgPSBNQVhfUkVTRVJWRURfUkVHSU9OUzsKIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50OwogCiYjNDM7c3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTsKJiM0MztzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhOwomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSkKJiM0Mzt7CiYjNDM7CWludCBpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250OyBpJiM0MzsmIzQzOykKJiM0MzsJCWlmIChyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tpXSA9PSBub2RlKQomIzQzOwkJCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7ewomIzQzOwlpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7CiYjNDM7CQlwcl9lcnIoJiMzNDt0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJiMzOTslcyYjMzk7IHJlc2VydmF0aW9uIGZhaWxlZFxuJiMzNDssIHVuYW1lKTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQmIzQzOyYjNDM7XSA9IG5vZGU7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSwKIAlwaHlzX2FkZHJfdCBhbGlnbiwgcGh5c19hZGRyX3Qgc3RhcnQsIHBoeXNfYWRkcl90IGVuZCwgYm9vbCBub21hcCwKIAlwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpCkBAIC0xMTIsNyAmIzQzOzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKQogfQogCiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLAotCQkJCSAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKJiM0MzsJCQkJICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsCiYjNDM7CQkJCSAgICAgICBib29sIGR5bmFtaWMpOwogc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLAogCQkJCQkgIHBoeXNfYWRkcl90ICphbGlnbik7CiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsCkBAIC0xMjgsMTEgJiM0MzsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogCQkgKiBpZiB0aGUgcmVnaW9uIGlzbiYjMzk7dCBtZW1vcnkgYXMgaXQgd29uJiMzOTt0IGJlIG1hcHBlZC4KIAkJICovCiAJCWlmIChtZW1ibG9ja19vdmVybGFwc19yZWdpb24oJmFtcDttZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpICZhbXA7JmFtcDsKLQkJICAgIG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSkKJiM0MzsJCSAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CQkgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSkKIAkJCXJldHVybiAtRUJVU1k7CiAKIAkJcmV0dXJuIG1lbWJsb2NrX21hcmtfbm9tYXAoYmFzZSwgc2l6ZSk7CiAJfQomIzQzOwomIzQzOwlpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8CiYjNDM7CSAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSkKJiM0MzsJCXJldHVybiAtRUJVU1k7CiYjNDM7CiAJcmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7CiB9CiAKQEAgLTE0MSw3ICYjNDM7MTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLAogICogZmlyc3QgZW50cnkgaW4gJiMzOTtyZWcmIzM5OyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCi0JCQkJCSAgICAgY29uc3QgY2hhciAqdW5hbWUpCiYjNDM7CQkJCQkgICAgIGNvbnN0IGNoYXIgKnVuYW1lLAomIzQzOwkJCQkJICAgICBib29sICpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlKQogewogCXBoeXNfYWRkcl90IGJhc2UsIHNpemU7CiAJaW50IGxlbiwgZXJyOwpAQCAtMTQ5LDYgJiM0MzsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsCiAJYm9vbCBub21hcDsKIAl1NjQgYiwgczsKIAomIzQzOwkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlOwomIzQzOwogCXByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCAmIzM0O3JlZyYjMzQ7LCAmYW1wO2xlbik7CiAJaWYgKCFwcm9wIHx8ICFsZW4pCiAJCXJldHVybiAtRU5PRU5UOwpAQCAtMTY3LDE0ICYjNDM7MjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSwKIAliYXNlID0gYjsKIAlzaXplID0gczsKIAotCWlmIChzaXplICZhbXA7JmFtcDsgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkgewotCQlmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7Ci0JCXByX2RlYnVnKCYjMzQ7UmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJiMzOTslcyYjMzk7OiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXG4mIzM0OywKLQkJCSB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7Ci0JfSBlbHNlIHsKJiM0MzsJaWYgKCFzaXplKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQkqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7CiAJCXByX2VycigmIzM0O1Jlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiAJCSAgICAgICB1bmFtZSwgJmFtcDtiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7CiYjNDM7CQlyZXR1cm4gZXJyOwogCX0KJiM0MzsKJiM0MzsJZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpOwomIzQzOwlwcl9kZWJ1ZygmIzM0O1Jlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICYjMzk7JXMmIzM5OzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxuJiMzNDssCiYjNDM7CQkgdW5hbWUsICZhbXA7YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpOwogCXJldHVybiAwOwogfQogCkBAIC0zMDYsMTAgJiM0MzszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZCkKIAkJYmFzZSA9IGI7CiAJCXNpemUgPSBzOwogCi0JCWlmIChzaXplKSB7Ci0JCQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKLQkJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7Ci0JCX0KJiM0MzsJCWlmICghc2l6ZSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCWlmIChyZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChjaGlsZCkpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQl1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTsKJiM0MzsJCWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpOwogCX0KIAogCS8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovCkBAIC0zNDksNiAmIzQzOzM5Myw3IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpCiAKIAlmZHRfZm9yX2VhY2hfc3Vibm9kZShjaGlsZCwgZmR0LCBub2RlKSB7CiAJCWNvbnN0IGNoYXIgKnVuYW1lOwomIzQzOwkJYm9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlOwogCQlpbnQgZXJyOwogCiAJCWlmICghb2ZfZmR0X2RldmljZV9pc19hdmFpbGFibGUoZmR0LCBjaGlsZCkpCkBAIC0zNTYsOSAmIzQzOzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKQogCiAJCXVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpOwogCi0JCWVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7CiYjNDM7CQllcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsCiYjNDM7CQkJCQkJICZhbXA7c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7CiAJCWlmICghZXJyKQogCQkJY291bnQmIzQzOyYjNDM7OwomIzQzOwkJZWxzZSBpZiAoc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSAmYW1wOyZhbXA7CiYjNDM7CQkJICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKQomIzQzOwkJCS8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUmIzM5O3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi8KJiM0MzsJCQljb3VudCYjNDM7JiM0Mzs7CiAKIAkJLyoKIAkJICogU2F2ZSB0aGUgbm9kZXMgZm9yIHRoZSBkeW5hbWljYWxseS1wbGFjZWQgcmVnaW9ucwpAQCAtNTE4LDcgJiM0Mzs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbQogCX0KIAogCWZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTsKLQlmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7CiYjNDM7CWZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTsKIAogCXJldHVybiAwOwogfQpAQCAtNjI3LDEzICYjNDM7Njc3LDE1IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2luaXRfbm9kZShzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpybWVtLAogICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZQogICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbgogICogQHNpemU6IHNpemUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb24KJiM0MzsgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWQKICAqCiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGEKICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGUKICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC4KICAqLwogc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsCi0JCQkJCSAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpCiYjNDM7CQkJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLAomIzQzOwkJCQkJICAgICAgYm9vbCBkeW5hbWljKQogewogCWludCBlcnIgPSAwOwogCWJvb2wgbm9tYXA7CkBAIC02NTcsOSAmIzQzOzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bgogCQlwcl9pbmZvKCYjMzQ7bm9kZSAlcyBjb21wYXRpYmxlIG1hdGNoaW5nIGZhaWxcbiYjMzQ7LCBybWVtLSZndDtuYW1lKTsKIAkJcm1lbS0mZ3Q7bmFtZSA9IE5VTEw7CiAKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CiAJCXJldHVybjsKIAl9IGVsc2UgewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oCmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7CiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLAogCQkJCSAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTsKJiM0Mztib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpOwogYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsCiAJCQkgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTsKIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7CmRpZmYgLS1naXQgYS9tbS9tZW1ibG9jay5jIGIvbW0vbWVtYmxvY2suYwppbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NAotLS0gYS9tbS9tZW1ibG9jay5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWJsb2NrLmMKQEAgLTIwMiw2ICYjNDM7MjAyLDIwIEBAIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLCBwaHlzX2FkZHJfdCBiYXNlMiwKIAlyZXR1cm4gKChiYXNlMSAmbHQ7IChiYXNlMiAmIzQzOyBzaXplMikpICZhbXA7JmFtcDsgKGJhc2UyICZsdDsgKGJhc2UxICYjNDM7IHNpemUxKSkpOwogfQogCiYjNDM7Ym9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtZW1ibG9ja19yZWdpb24gKnJlZ2lvbjsKJiM0MzsKJiM0MzsJbWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgJmFtcDtzaXplKTsKJiM0MzsJZm9yX2VhY2hfbWVtX3JlZ2lvbihyZWdpb24pIHsKJiM0MzsJCWlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pICZhbXA7JmFtcDsKJiM0MzsJCSAgICBtZW1ibG9ja19hZGRyc19vdmVybGFwKGJhc2UsIHNpemUsIHJlZ2lvbi0mZ3Q7YmFzZSwgcmVnaW9uLSZndDtzaXplKSkKJiM0MzsJCQlyZXR1cm4gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwogYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLAogCQkJCQlwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKQogewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc4MgoJCQkJCQkJb3V0cHV0OiAxMDEKCQkJCQkJCXRob3VnaHRzOiA1NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTWVtb3J5IFNhZmV0eSBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBwYXRjaC4gSSBzZWUgbW9kaWZpY2F0aW9ucyBpbiBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgbXkgYXR0ZW50aW9uIOKAkyBhbnl0aGluZyB0b3VjaGluZyBtZW1vcnkgbWFuYWdlbWVudCBvciBEZXZpY2UgVHJlZSBpcyB3b3J0aCBhIGNsb3NlciBsb29rLiBUaGUgY29yZSBjaGFuZ2Ugc2VlbXMgdG8gYmUgYXJvdW5kIGhhbmRsaW5nIGZhaWxlZCByZXNlcnZlZCBtZW1vcnkgbm9kZXMsIHRyYWNraW5nIHRoZW0gd2l0aCBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNgLCBhbmQgcHJldmVudGluZyB0aGVpciBsYXRlciBpbml0aWFsaXphdGlvbiBpbiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLiBUaGVyZSYjMzk7cyBhbHNvIGEgY2hlY2sgZm9yIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgYW5kIHNvbWUgYWRqdXN0bWVudHMgdG8gaG93IG1lbW9yeSBpcyBmcmVlZCBpbiBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYHJlc2VydmVfZmFpbGVkX25vZGVzYCBhcnJheSBpcyBzdGF0aWNhbGx5IGFsbG9jYXRlZCBhbmQgYF9faW5pdGRhdGFgLCB3aGljaCBtZWFucyBpdCYjMzk7cyBndWFyYW50ZWVkIHRvIGJlIHplcm8taW5pdGlhbGl6ZWQuIFRoZSBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250YCB2YXJpYWJsZSBpcyBhbHNvIGBfX2luaXRkYXRhYCBhbmQgemVyb2VkLiBgcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGVgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHBvcHVsYXRlcyB0aGlzIGFycmF5LCBhbmQgYHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkYCBjaGVja3MgaXQuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHNvIGZhci4KCk5vdywgbGV0JiMzOTtzIGNvbnNpZGVyIHVzZXItc3BhY2UgZXhwb3N1cmUuIE5vIG5ldyBzdHJ1Y3R1cmVzIGFyZSBiZWluZyBleHBvc2VkLCBhbmQgbm8gY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgYmVpbmcgYWxsb2NhdGVkLiBUaGUgcGF0Y2ggZG9lc24mIzM5O3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBzb21lb25lIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24uCgpUaGUgcGF0Y2ggc2VlbXMgZmluZS4gSSYjMzk7bSBub3Qgc2VlaW5nIGFueXRoaW5nIHRoYXQgd291bGQgbmVjZXNzaXRhdGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKS4gS0FTQU4gKEtlcm5lbCBBZGRyZXNzIFNhbml0aXplcikgYW5kIHN0YW5kYXJkIHRvb2xpbmcgYXJlIHN1ZmZpY2llbnQgZm9yIHRoaXMgZWFybHkgYm9vdCBsb2dpYy4gVGhlIHJpc2tzIEkgc2VlIGFyZSB0aGUgdHlwaWNhbCBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpUbyBiZSBleHRyYSBzdXJlLCBsZXQmIzM5O3MgcXVpY2tseSByZXZpZXcgdGhlIGBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZWAgY2hhbmdlcy4gVGhlIGNvZGUgbm93IGxvb2tzIGxpa2UgdGhpczoKCmBgYGMKLQkJaWYgKG5vbWFwKQomIzQzOwkJaWYgKGR5bmFtaWMgJmFtcDsmYW1wOyBub21hcCkKIAkJCW1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tJmd0O2Jhc2UsIHJtZW0tJmd0O3NpemUpOwotCQllbHNlCiYjNDM7CiYjNDM7CQlpZiAoZHluYW1pYyB8fCAhbm9tYXApCiAJCQltZW1ibG9ja19waHlzX2ZyZWUocm1lbS0mZ3Q7YmFzZSwgcm1lbS0mZ3Q7c2l6ZSk7CmBgYAoKVGhpcyBqdXN0IGNoYW5nZXMgd2hlbiBtZW1vcnkgaXMgZnJlZWQgb3IgaGFzIGBub21hcGAgY2xlYXJlZCBpbiBjYXNlcyBvZiBmYWlsdXJlLiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgdG91Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuCgoqKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZWFybHkgYm9vdCBEZXZpY2UgVHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIHBhcnRpY3VsYXJseSBieSB0cmFja2luZyBhbmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBub21hcGAgb3ZlcmxhcHMuIFRoZSBjaGFuZ2VzIGRvbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGNvbXBsZXggYWxsb2NhdGlvbnMgd2l0aCB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gU3RhbmRhcmQgS0FTQU4gaXMgc3VpdGFibGUgZm9yIGFkZHJlc3NpbmcgYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGluIHRoaXMgYXJlYS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTggMTA6Mjk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBlYXJseSBib290IGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBsb2dpYywgYWRkaW5nIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2YXRpb25zIGFuZCBjaGVja2luZyBmb3Igb3ZlcmxhcHMgd2l0aCBub21hcCByZWdpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWZmaWNpZW50IHRvIGNhdGNoIGFueSBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24gb3Igb3V0LW9mLWJvdW5kcyBidWdzIGluIHRoaXMgY29kZS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjc6NDguNzAxNDQ4NzY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0MjM2NjY5MTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9SRVNFUlZFRF9NRU1cIixcbiAgICBcIk9GX0VBUkxZX0ZMQVRUUkVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCIsXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZVwiLFxuICAgIFwibWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGVhcmx5IGJvb3QgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGxvZ2ljLCBhZGRpbmcgdHJhY2tpbmcgZm9yIGZhaWxlZCByZXNlcnZhdGlvbnMgYW5kIGNoZWNraW5nIGZvciBvdmVybGFwcyB3aXRoIG5vbWFwIHJlZ2lvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQuIFN0YW5kYXJkIEtBU0FOIGlzIHN1ZmZpY2llbnQgdG8gY2F0Y2ggYW55IHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiBvciBvdXQtb2YtYm91bmRzIGJ1Z3MgaW4gdGhpcyBjb2RlLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo0OC43MDE0NTQ2MTVaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODIzNTI0NDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkMGI1YmVlYjFhMTNiYTNkODFmMTY3ZDVlNDYwZjg0ZGNmZmVkOGE3XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXFxuaW5kZXggOGM5ZDYzOTVkNmEzOS4uMDA5MGZhODZkZDEwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXFxuKysrIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xcbkBAIC0zMiw2ICszMiwzMCBAQCBzdGF0aWMgc3RydWN0IHJlc2VydmVkX21lbSAqcmVzZXJ2ZWRfbWVtIF9fcmVmZGF0YSA9IHJlc2VydmVkX21lbV9hcnJheTtcXG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XFxuIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50O1xcbiBcXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTtcXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQgX19pbml0ZGF0YTtcXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSlcXG4re1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQ7IGkrKylcXG4rXFx0XFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzW2ldID09IG5vZGUpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXFxuK3tcXG4rXFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCA9PSBNQVhfUkVTRVJWRURfUkVHSU9OUykge1xcbitcXHRcXHRwcl9lcnIoXFxcInRvbyBtYW55IGZhaWxlZCByZWdpb25zLCAnJXMnIHJlc2VydmF0aW9uIGZhaWxlZFxcXFxuXFxcIiwgdW5hbWUpO1xcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCsrXSA9IG5vZGU7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X2FsbG9jX3Jlc2VydmVkX21lbW9yeV9hcmNoKHBoeXNfYWRkcl90IHNpemUsXFxuIFxcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLCBib29sIG5vbWFwLFxcbiBcXHRwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpXFxuQEAgLTExMiw3ICsxMzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY19yZXNlcnZlZF9tZW1fYXJyYXkodm9pZClcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbitcXHRcXHRcXHRcXHQgICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGJvb2wgZHluYW1pYyk7XFxuIHN0YXRpYyBpbnQgZmR0X3ZhbGlkYXRlX3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBwaHlzX2FkZHJfdCAqYWxpZ24pO1xcbiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXFxuQEAgLTEyOCwxMSArMTUzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcXG4gXFx0XFx0ICogaWYgdGhlIHJlZ2lvbiBpc24ndCBtZW1vcnkgYXMgaXQgd29uJ3QgYmUgbWFwcGVkLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihcXHUwMDI2bWVtYmxvY2subWVtb3J5LCBiYXNlLCBzaXplKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxcbitcXHRcXHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxcbitcXHRcXHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcXG4gXFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4gXFxuIFxcdFxcdHJldHVybiBtZW1ibG9ja19tYXJrX25vbWFwKGJhc2UsIHNpemUpO1xcbiBcXHR9XFxuK1xcbitcXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XFxuK1xcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcXG4rXFx0XFx0cmV0dXJuIC1FQlVTWTtcXG4rXFxuIFxcdHJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xcbiB9XFxuIFxcbkBAIC0xNDEsNyArMTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxcbiAgKiBmaXJzdCBlbnRyeSBpbiAncmVnJyBwcm9wZXJ0eVxcbiAgKi9cXG4gc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lKVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGJvb2wgKnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpXFxuIHtcXG4gXFx0cGh5c19hZGRyX3QgYmFzZSwgc2l6ZTtcXG4gXFx0aW50IGxlbiwgZXJyO1xcbkBAIC0xNDksNiArMTgxLDggQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxcbiBcXHRib29sIG5vbWFwO1xcbiBcXHR1NjQgYiwgcztcXG4gXFxuK1xcdCpzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlID0gZmFsc2U7XFxuK1xcbiBcXHRwcm9wID0gb2ZfZmxhdF9kdF9nZXRfYWRkcl9zaXplX3Byb3Aobm9kZSwgXFxcInJlZ1xcXCIsIFxcdTAwMjZsZW4pO1xcbiBcXHRpZiAoIXByb3AgfHwgIWxlbilcXG4gXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuQEAgLTE2NywxNCArMjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSxcXG4gXFx0YmFzZSA9IGI7XFxuIFxcdHNpemUgPSBzO1xcbiBcXG4tXFx0aWYgKHNpemUgXFx1MDAyNlxcdTAwMjYgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkge1xcbi1cXHRcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuLVxcdFxcdHByX2RlYnVnKFxcXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgdW5hbWUsIFxcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XFxuLVxcdH0gZWxzZSB7XFxuK1xcdGlmICghc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XFxuIFxcdFxcdHByX2VycihcXFwiUmVzZXJ2ZWQgbWVtb3J5OiBmYWlsZWQgdG8gcmVzZXJ2ZSBtZW1vcnkgZm9yIG5vZGUgJyVzJzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcXFxuXFxcIixcXG4gXFx0XFx0ICAgICAgIHVuYW1lLCBcXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuK1xcbitcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuK1xcdHByX2RlYnVnKFxcXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxcXG5cXFwiLFxcbitcXHRcXHQgdW5hbWUsIFxcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0zMDYsMTAgKzM0NiwxNCBAQCB2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxcbiBcXHRcXHRiYXNlID0gYjtcXG4gXFx0XFx0c2l6ZSA9IHM7XFxuIFxcbi1cXHRcXHRpZiAoc2l6ZSkge1xcbi1cXHRcXHRcXHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcXG4tXFx0XFx0XFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplKTtcXG4tXFx0XFx0fVxcbitcXHRcXHRpZiAoIXNpemUpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0aWYgKHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkKGNoaWxkKSlcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcXG4rXFx0XFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplLCBmYWxzZSk7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIGNoZWNrIGZvciBvdmVybGFwcGluZyByZXNlcnZlZCByZWdpb25zICovXFxuQEAgLTM0OSw2ICszOTMsNyBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbiBcXG4gXFx0ZmR0X2Zvcl9lYWNoX3N1Ym5vZGUoY2hpbGQsIGZkdCwgbm9kZSkge1xcbiBcXHRcXHRjb25zdCBjaGFyICp1bmFtZTtcXG4rXFx0XFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4gXFx0XFx0aWYgKCFvZl9mZHRfZGV2aWNlX2lzX2F2YWlsYWJsZShmZHQsIGNoaWxkKSlcXG5AQCAtMzU2LDkgKzQwMSwxNCBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbiBcXG4gXFx0XFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XFxuIFxcbi1cXHRcXHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xcbitcXHRcXHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XFxuIFxcdFxcdGlmICghZXJyKVxcbiBcXHRcXHRcXHRjb3VudCsrO1xcbitcXHRcXHRlbHNlIGlmIChzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcXG4rXFx0XFx0XFx0LyogS2VlcCBhIHNsb3QgZm9yIHRoZSB1bnRyYWNrZWQgbm9kZSdzIGxhdGUgaW5pdGlhbGl6YXRpb24uICovXFxuK1xcdFxcdFxcdGNvdW50Kys7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBTYXZlIHRoZSBub2RlcyBmb3IgdGhlIGR5bmFtaWNhbGx5LXBsYWNlZCByZWdpb25zXFxuQEAgLTUxOCw3ICs1NjgsNyBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9hbGxvY19zaXplKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbVxcbiBcXHR9XFxuIFxcbiBcXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XFxuLVxcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplKTtcXG4rXFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgdW5hbWUsIGJhc2UsIHNpemUsIHRydWUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtNjI3LDEzICs2NzcsMTUgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1faW5pdF9ub2RlKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sXFxuICAqIEB1bmFtZTogbmFtZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IG5vZGVcXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxcbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxcbisgKiBAZHluYW1pYzogd2hldGhlciB0aGUgcmVnaW9uIHdhcyBkeW5hbWljYWxseSBhbGxvY2F0ZWRcXG4gICpcXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXFxuICAqIHJlc2VydmVkIG1lbW9yeSByZWdpb24gYW5kIHNhdmVzIGFsbCByZWdpb24tc3BlY2lmaWMgZGF0YSB0byB0aGVcXG4gICogcmVzZXJ2ZWRfbWVtIGFycmF5IHRvIGFsbG93IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoKSB0byBmaW5kIGl0LlxcbiAgKi9cXG4gc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGJvb2wgZHluYW1pYylcXG4ge1xcbiBcXHRpbnQgZXJyID0gMDtcXG4gXFx0Ym9vbCBub21hcDtcXG5AQCAtNjU3LDkgKzcwOSwxMCBAQCBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1blxcbiBcXHRcXHRwcl9pbmZvKFxcXCJub2RlICVzIGNvbXBhdGlibGUgbWF0Y2hpbmcgZmFpbFxcXFxuXFxcIiwgcm1lbS1cXHUwMDNlbmFtZSk7XFxuIFxcdFxcdHJtZW0tXFx1MDAzZW5hbWUgPSBOVUxMO1xcbiBcXG4tXFx0XFx0aWYgKG5vbWFwKVxcbitcXHRcXHRpZiAoZHluYW1pYyBcXHUwMDI2XFx1MDAyNiBub21hcClcXG4gXFx0XFx0XFx0bWVtYmxvY2tfY2xlYXJfbm9tYXAocm1lbS1cXHUwMDNlYmFzZSwgcm1lbS1cXHUwMDNlc2l6ZSk7XFxuLVxcdFxcdGVsc2VcXG4rXFxuK1xcdFxcdGlmIChkeW5hbWljIHx8ICFub21hcClcXG4gXFx0XFx0XFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXFx1MDAzZWJhc2UsIHJtZW0tXFx1MDAzZXNpemUpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH0gZWxzZSB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaCBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBpbnQgbWVtYmxvY2tfcGh5c21lbV9hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xcbiB1bnNpZ25lZCBsb25nIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAocGh5c19hZGRyX3QgYmFzZTEsIHBoeXNfYWRkcl90IHNpemUxLFxcbiBcXHRcXHRcXHRcXHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XFxuK2Jvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XFxuIGJvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxcbiBcXHRcXHRcXHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcXG4gYm9vbCBtZW1ibG9ja192YWxpZGF0ZV9udW1hX2NvdmVyYWdlKHVuc2lnbmVkIGxvbmcgdGhyZXNob2xkX2J5dGVzKTtcXG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NFxcbi0tLSBhL21tL21lbWJsb2NrLmNcXG4rKysgYi9tbS9tZW1ibG9jay5jXFxuQEAgLTIwMiw2ICsyMDIsMjAgQEAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsIHBoeXNfYWRkcl90IGJhc2UyLFxcbiBcXHRyZXR1cm4gKChiYXNlMSBcXHUwMDNjIChiYXNlMiArIHNpemUyKSkgXFx1MDAyNlxcdTAwMjYgKGJhc2UyIFxcdTAwM2MgKGJhc2UxICsgc2l6ZTEpKSk7XFxuIH1cXG4gXFxuK2Jvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnaW9uO1xcbitcXG4rXFx0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXFx1MDAyNnNpemUpO1xcbitcXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHJlZ2lvbikge1xcbitcXHRcXHRpZiAobWVtYmxvY2tfaXNfbm9tYXAocmVnaW9uKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChiYXNlLCBzaXplLCByZWdpb24tXFx1MDAzZWJhc2UsIHJlZ2lvbi1cXHUwMDNlc2l6ZSkpXFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuIGJvb2wgX19pbml0X21lbWJsb2NrIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcXG4gXFx0XFx0XFx0XFx0XFx0cGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcXG4ge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo1MC4xODUxNTYyOTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4MjczNjc2NjkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJPRlwiLFxuICAgIFwiT0ZfUkVTRVJWRURfTUVNXCIsXG4gICAgXCJPRl9FQVJMWV9GTEFUVFJFRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZkdF9zY2FuX3Jlc2VydmVkX21lbVwiLFxuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVcIixcbiAgICBcIm1lbWJsb2NrX292ZXJsYXBzX25vbWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZGV2aWNlIHRyZWUgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uIGFuZCBhZGRzIGEgY2hlY2sgZm9yIG92ZXJsYXBwaW5nIGBub21hcGAgbWVtb3J5IHJlZ2lvbnMuIFRoaXMgaXMgY29yZSBrZXJuZWwgYm9vdCBsb2dpYyByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAoZXNwZWNpYWxseSBvbiBhcmNoaXRlY3R1cmVzIHVzaW5nIERldmljZSBUcmVlIGxpa2UgQVJNNjQgYW5kIFJJU0MtVikuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGQwYjViZWViMWExM2JhM2Q4MWYxNjdkNWU0NjBmODRkY2ZmZWQ4YTdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxOCAxMDoyNzo0NiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG5pbmRleCA4YzlkNjM5NWQ2YTM5Li4wMDkwZmE4NmRkMTBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuKysrIGIvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY1xuQEAgLTMyLDYgKzMyLDMwIEBAIHN0YXRpYyBzdHJ1Y3QgcmVzZXJ2ZWRfbWVtICpyZXNlcnZlZF9tZW0gX19yZWZkYXRhID0gcmVzZXJ2ZWRfbWVtX2FycmF5O1xuIHN0YXRpYyBpbnQgdG90YWxfcmVzZXJ2ZWRfbWVtX2NudCA9IE1BWF9SRVNFUlZFRF9SRUdJT05TO1xuIHN0YXRpYyBpbnQgcmVzZXJ2ZWRfbWVtX2NvdW50O1xuIFxuK3N0YXRpYyBpbnQgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNbTUFYX1JFU0VSVkVEX1JFR0lPTlNdIF9faW5pdGRhdGE7XG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQgX19pbml0ZGF0YTtcbitcbitzdGF0aWMgYm9vbCBfX2luaXQgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoaW50IG5vZGUpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyByZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQ7IGkrKylcbitcdFx0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzW2ldID09IG5vZGUpXG4rXHRcdFx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBib29sIF9faW5pdCByZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShpbnQgbm9kZSwgY29uc3QgY2hhciAqdW5hbWUpXG4re1xuK1x0aWYgKHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCA9PSBNQVhfUkVTRVJWRURfUkVHSU9OUykge1xuK1x0XHRwcl9lcnIoXCJ0b28gbWFueSBmYWlsZWQgcmVnaW9ucywgJyVzJyByZXNlcnZhdGlvbiBmYWlsZWRcXG5cIiwgdW5hbWUpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXNlcnZlX2ZhaWxlZF9ub2Rlc1tyZXNlcnZlX2ZhaWxlZF9ub2Rlc19jbnQrK10gPSBub2RlO1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfYWxsb2NfcmVzZXJ2ZWRfbWVtb3J5X2FyY2gocGh5c19hZGRyX3Qgc2l6ZSxcbiBcdHBoeXNfYWRkcl90IGFsaWduLCBwaHlzX2FkZHJfdCBzdGFydCwgcGh5c19hZGRyX3QgZW5kLCBib29sIG5vbWFwLFxuIFx0cGh5c19hZGRyX3QgKnJlc19iYXNlKVxuQEAgLTExMiw3ICsxMzYsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBhbGxvY19yZXNlcnZlZF9tZW1fYXJyYXkodm9pZClcbiB9XG4gXG4gc3RhdGljIHZvaWQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbitcdFx0XHRcdCAgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuK1x0XHRcdFx0ICAgICAgIGJvb2wgZHluYW1pYyk7XG4gc3RhdGljIGludCBmZHRfdmFsaWRhdGVfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0XHRcdFx0XHQgIHBoeXNfYWRkcl90ICphbGlnbik7XG4gc3RhdGljIGludCBmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLFxuQEAgLTEyOCwxMSArMTUzLDE3IEBAIHN0YXRpYyBpbnQgX19pbml0IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkocGh5c19hZGRyX3QgYmFzZSxcbiBcdFx0ICogaWYgdGhlIHJlZ2lvbiBpc24ndCBtZW1vcnkgYXMgaXQgd29uJ3QgYmUgbWFwcGVkLlxuIFx0XHQgKi9cbiBcdFx0aWYgKG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihcdTAwMjZtZW1ibG9jay5tZW1vcnksIGJhc2UsIHNpemUpIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgbWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpKVxuK1x0XHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuK1x0XHQgICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKSlcbiBcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIFxuIFx0XHRyZXR1cm4gbWVtYmxvY2tfbWFya19ub21hcChiYXNlLCBzaXplKTtcbiBcdH1cbitcbitcdGlmIChtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkgfHxcbitcdCAgICBtZW1ibG9ja19vdmVybGFwc19ub21hcChiYXNlLCBzaXplKSlcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcbiBcdHJldHVybiBtZW1ibG9ja19yZXNlcnZlKGJhc2UsIHNpemUpO1xuIH1cbiBcbkBAIC0xNDEsNyArMTcyLDggQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuICAqIGZpcnN0IGVudHJ5IGluICdyZWcnIHByb3BlcnR5XG4gICovXG4gc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuLVx0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lKVxuK1x0XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKnVuYW1lLFxuK1x0XHRcdFx0XHQgICAgIGJvb2wgKnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpXG4ge1xuIFx0cGh5c19hZGRyX3QgYmFzZSwgc2l6ZTtcbiBcdGludCBsZW4sIGVycjtcbkBAIC0xNDksNiArMTgxLDggQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0Ym9vbCBub21hcDtcbiBcdHU2NCBiLCBzO1xuIFxuK1x0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSBmYWxzZTtcbitcbiBcdHByb3AgPSBvZl9mbGF0X2R0X2dldF9hZGRyX3NpemVfcHJvcChub2RlLCBcInJlZ1wiLCBcdTAwMjZsZW4pO1xuIFx0aWYgKCFwcm9wIHx8ICFsZW4pXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuQEAgLTE2NywxNCArMjAxLDIwIEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKHVuc2lnbmVkIGxvbmcgbm9kZSxcbiBcdGJhc2UgPSBiO1xuIFx0c2l6ZSA9IHM7XG4gXG4tXHRpZiAoc2l6ZSBcdTAwMjZcdTAwMjYgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShiYXNlLCBzaXplLCBub21hcCkgPT0gMCkge1xuLVx0XHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRcdHByX2RlYnVnKFwiUmVzZXJ2ZWQgbWVtb3J5OiByZXNlcnZlZCByZWdpb24gZm9yIG5vZGUgJyVzJzogYmFzZSAlcGEsIHNpemUgJWx1IE1pQlxcblwiLFxuLVx0XHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuLVx0fSBlbHNlIHtcbitcdGlmICghc2l6ZSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcbitcdGlmIChlcnIpIHtcbitcdFx0KnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgPSB0cnVlO1xuIFx0XHRwcl9lcnIoXCJSZXNlcnZlZCBtZW1vcnk6IGZhaWxlZCB0byByZXNlcnZlIG1lbW9yeSBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4gXHRcdCAgICAgICB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuK1x0XHRyZXR1cm4gZXJyO1xuIFx0fVxuK1xuK1x0ZmR0X2ZpeHVwX3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIGJhc2UsIHNpemUpO1xuK1x0cHJfZGVidWcoXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4rXHRcdCB1bmFtZSwgXHUwMDI2YmFzZSwgKHVuc2lnbmVkIGxvbmcpKHNpemUgLyBTWl8xTSkpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTMwNiwxMCArMzQ2LDE0IEBAIHZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpXG4gXHRcdGJhc2UgPSBiO1xuIFx0XHRzaXplID0gcztcbiBcbi1cdFx0aWYgKHNpemUpIHtcbi1cdFx0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbi1cdFx0XHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShjaGlsZCwgdW5hbWUsIGJhc2UsIHNpemUpO1xuLVx0XHR9XG4rXHRcdGlmICghc2l6ZSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0aWYgKHJlc2VydmVkX21lbV9ub2RlX3Jlc2VydmVfZmFpbGVkKGNoaWxkKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4rXHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSwgZmFsc2UpO1xuIFx0fVxuIFxuIFx0LyogY2hlY2sgZm9yIG92ZXJsYXBwaW5nIHJlc2VydmVkIHJlZ2lvbnMgKi9cbkBAIC0zNDksNiArMzkzLDcgQEAgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbiBcbiBcdGZkdF9mb3JfZWFjaF9zdWJub2RlKGNoaWxkLCBmZHQsIG5vZGUpIHtcbiBcdFx0Y29uc3QgY2hhciAqdW5hbWU7XG4rXHRcdGJvb2wgc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZTtcbiBcdFx0aW50IGVycjtcbiBcbiBcdFx0aWYgKCFvZl9mZHRfZGV2aWNlX2lzX2F2YWlsYWJsZShmZHQsIGNoaWxkKSlcbkBAIC0zNTYsOSArNDAxLDE0IEBAIGludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXG4gXG4gXHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuIFxuLVx0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUpO1xuK1x0XHRlcnIgPSBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyhjaGlsZCwgdW5hbWUsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNnNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUpO1xuIFx0XHRpZiAoIWVycilcbiBcdFx0XHRjb3VudCsrO1xuK1x0XHRlbHNlIGlmIChzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAhcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGUoY2hpbGQsIHVuYW1lKSlcbitcdFx0XHQvKiBLZWVwIGEgc2xvdCBmb3IgdGhlIHVudHJhY2tlZCBub2RlJ3MgbGF0ZSBpbml0aWFsaXphdGlvbi4gKi9cbitcdFx0XHRjb3VudCsrO1xuIFxuIFx0XHQvKlxuIFx0XHQgKiBTYXZlIHRoZSBub2RlcyBmb3IgdGhlIGR5bmFtaWNhbGx5LXBsYWNlZCByZWdpb25zXG5AQCAtNTE4LDcgKzU2OCw3IEBAIHN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtXG4gXHR9XG4gXG4gXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4tXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4rXHRmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCB1bmFtZSwgYmFzZSwgc2l6ZSwgdHJ1ZSk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNjI3LDEzICs2NzcsMTUgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1faW5pdF9ub2RlKHN0cnVjdCByZXNlcnZlZF9tZW0gKnJtZW0sXG4gICogQHVuYW1lOiBuYW1lIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgbm9kZVxuICAqIEBiYXNlOiBiYXNlIGFkZHJlc3Mgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSByZWdpb25cbiAgKiBAc2l6ZTogc2l6ZSBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuKyAqIEBkeW5hbWljOiB3aGV0aGVyIHRoZSByZWdpb24gd2FzIGR5bmFtaWNhbGx5IGFsbG9jYXRlZFxuICAqXG4gICogVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgcmVnaW9uLXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGZ1bmN0aW9uIGZvciBhXG4gICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbiBhbmQgc2F2ZXMgYWxsIHJlZ2lvbi1zcGVjaWZpYyBkYXRhIHRvIHRoZVxuICAqIHJlc2VydmVkX21lbSBhcnJheSB0byBhbGxvdyBvZl9yZXNlcnZlZF9tZW1fbG9va3VwKCkgdG8gZmluZCBpdC5cbiAgKi9cbiBzdGF0aWMgdm9pZCBfX2luaXQgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSxcbi1cdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbitcdFx0XHRcdFx0ICAgICAgcGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSxcbitcdFx0XHRcdFx0ICAgICAgYm9vbCBkeW5hbWljKVxuIHtcbiBcdGludCBlcnIgPSAwO1xuIFx0Ym9vbCBub21hcDtcbkBAIC02NTcsOSArNzA5LDEwIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuXG4gXHRcdHByX2luZm8oXCJub2RlICVzIGNvbXBhdGlibGUgbWF0Y2hpbmcgZmFpbFxcblwiLCBybWVtLVx1MDAzZW5hbWUpO1xuIFx0XHRybWVtLVx1MDAzZW5hbWUgPSBOVUxMO1xuIFxuLVx0XHRpZiAobm9tYXApXG4rXHRcdGlmIChkeW5hbWljIFx1MDAyNlx1MDAyNiBub21hcClcbiBcdFx0XHRtZW1ibG9ja19jbGVhcl9ub21hcChybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4tXHRcdGVsc2VcbitcbitcdFx0aWYgKGR5bmFtaWMgfHwgIW5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX3BoeXNfZnJlZShybWVtLVx1MDAzZWJhc2UsIHJtZW0tXHUwMDNlc2l6ZSk7XG4gXHRcdHJldHVybjtcbiBcdH0gZWxzZSB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oIGIvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXG5pbmRleCBkNjJkYjllNzc2Y2Y5Li4yN2Q2OGZiYjMxNTc1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tZW1ibG9jay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbkBAIC0xNDgsNiArMTQ4LDcgQEAgaW50IG1lbWJsb2NrX3BoeXNtZW1fYWRkKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIHZvaWQgbWVtYmxvY2tfdHJpbV9tZW1vcnkocGh5c19hZGRyX3QgYWxpZ24pO1xuIHVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXG4gXHRcdFx0XHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XG4rYm9vbCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBib29sIG1lbWJsb2NrX292ZXJsYXBzX3JlZ2lvbihzdHJ1Y3QgbWVtYmxvY2tfdHlwZSAqdHlwZSxcbiBcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKTtcbiBib29sIG1lbWJsb2NrX3ZhbGlkYXRlX251bWFfY292ZXJhZ2UodW5zaWduZWQgbG9uZyB0aHJlc2hvbGRfYnl0ZXMpO1xuZGlmZiAtLWdpdCBhL21tL21lbWJsb2NrLmMgYi9tbS9tZW1ibG9jay5jXG5pbmRleCA5Y2U4NjM0OWEyOWZhLi40Y2FiZmUzNjVhYzQ2IDEwMDY0NFxuLS0tIGEvbW0vbWVtYmxvY2suY1xuKysrIGIvbW0vbWVtYmxvY2suY1xuQEAgLTIwMiw2ICsyMDIsMjAgQEAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsIHBoeXNfYWRkcl90IGJhc2UyLFxuIFx0cmV0dXJuICgoYmFzZTEgXHUwMDNjIChiYXNlMiArIHNpemUyKSkgXHUwMDI2XHUwMDI2IChiYXNlMiBcdTAwM2MgKGJhc2UxICsgc2l6ZTEpKSk7XG4gfVxuIFxuK2Jvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4re1xuK1x0c3RydWN0IG1lbWJsb2NrX3JlZ2lvbiAqcmVnaW9uO1xuK1xuK1x0bWVtYmxvY2tfY2FwX3NpemUoYmFzZSwgXHUwMDI2c2l6ZSk7XG4rXHRmb3JfZWFjaF9tZW1fcmVnaW9uKHJlZ2lvbikge1xuK1x0XHRpZiAobWVtYmxvY2tfaXNfbm9tYXAocmVnaW9uKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1lbWJsb2NrX2FkZHJzX292ZXJsYXAoYmFzZSwgc2l6ZSwgcmVnaW9uLVx1MDAzZWJhc2UsIHJlZ2lvbi1cdTAwM2VzaXplKSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdH1cbitcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4gYm9vbCBfX2luaXRfbWVtYmxvY2sgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdFx0XHRwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI3OjUwLjE4NTE2NTI5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMzkwMDc3OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IFJlc2VydmVkIE1lbW9yeSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtbS9tZW1ibG9jay5jYC4gSXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBzb21lIHRyYWNraW5nIGZvciBmYWlsZWQgcmVzZXJ2ZWQgbWVtb3J5IG5vZGVzIGluIHRoZSBPRiBjb2RlIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgZnVuY3Rpb24gaW4gdGhlIG1lbW9yeSBibG9jayBjb2RlLiBUaGlzIGltbWVkaWF0ZWx5IG1ha2VzIG1lIHRoaW5rIGFib3V0IGRldmljZSB0cmVlIChPRikgcmVzZXJ2ZWQgbWVtb3J5IGluaXRpYWxpemF0aW9uLiBUaGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgY29kZSBldmVuIHJlbGV2YW50IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IEFuZCB0aGUgYW5zd2VyIGlzIHllcywgYWJzb2x1dGVseS4gT0YgaXMgcHJldHR5IGNvbW1vbiBpbiBBUk0vQVJNNjQgUUVNVSBzZXR1cHMsIGFuZCBJJ3ZlIHNlZW4gaXQgdXNlZCBvbiB4ODYgYW5kIG90aGVyIGFyY2hpdGVjdHVyZXMgdG9vLlxuXG5UaGUgbmV4dCB0aG91Z2h0IGlzLCBpcyB0aGlzIHNvbWV0aGluZyB3ZSBjYW4gZnV6ej8gVGhlIHBhdGNoIHRvdWNoZXMgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYW5kIGFkZHMgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC4gT2theSwgdGhlc2UgYXJlIGFsbCBgX19pbml0YCBmdW5jdGlvbnMuIFRoYXQncyBhIGJpdCBvZiBhIGh1cmRsZS4gU3l6a2FsbGVyIGlzIHVzdWFsbHkgZm9jdXNlZCBvbiBzeXNjYWxscywgbmV0d29yayBwYWNrZXRzLCBVU0IsIGFuZCB0aGluZ3MgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhlIHN5c3RlbSBpcyB1cCBhbmQgcnVubmluZy4gQnV0IHdhaXQuLi4gY2FuIHN5emthbGxlciBmdXp6IGRldmljZSB0cmVlcyBzb21laG93PyBJIHJlbWVtYmVyIGl0ICpjYW4qIGZ1enogZGV2aWNlIHRyZWVzLCBidXQgSSB0aG91Z2h0IHRoYXQgd2FzIHRocm91Z2ggYHN5el9tb3VudF9pbWFnZWAgb3Igc29tZXRoaW5nIHNpbWlsYXI/IEFjdHVhbGx5LCBkZXZpY2UgdHJlZXMgYXJlIHR5cGljYWxseSBwcm92aWRlZCBhdCBib290LCBhcmVuJ3QgdGhleT8gU28gdGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZ2V0IHRvIHRoZXNlIGVhcmx5IGluaXRpYWxpemF0aW9uIGZ1bmN0aW9ucyB3aXRoIHN5emthbGxlcj9cblxuVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgd2UgY2FuIGxvYWQgZGV2aWNlIHRyZWUgKm92ZXJsYXlzKiBhdCBydW50aW1lLCBtYXliZSB0aHJvdWdoIGNvbmZpZ2ZzIG9yIHNvbWV0aGluZyBzaW1pbGFyLiBJZiB3ZSBjYW4sIHRoZW4gcGVyaGFwcyB3ZSBjYW4gdHJpZ2dlciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBvciBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgIHRoYXQgd2F5LiBUaW1lIHRvIGNoZWNrIGZvciB0aGF0LiBMZXQncyBzdGFydCB3aXRoIGEgc2VhcmNoIGZvciBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBhbmQgc2VlIHdoZXJlIHRoYXQgbGVhZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3ODUsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyNzo1Ny4yMjQxNzY0MTdaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MDE0MTIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMvbW0vaW5pdC5jPTEwMT12b2lkIF9faW5pdCBzZXR1cF9hcmNoX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNS1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL2FyYy9tbS9pbml0LmM6MTM2OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jLTEzNy1cXG4tLVxcbmFyY2gvYXJtL21tL2luaXQuYz0xODA9dm9pZCBfX2luaXQgYXJtX21lbWJsb2NrX2luaXQoY29uc3Qgc3RydWN0IG1hY2hpbmVfZGVzYyAqbWRlc2MpXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmMtMTkyLVxcbmFyY2gvYXJtL21tL2luaXQuYzoxOTM6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2FybS9tbS9pbml0LmMtMTk0LVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmM9MTk2PXZvaWQgX19pbml0IGFybTY0X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTI5OS1cXG5hcmNoL2FybTY0L21tL2luaXQuYzozMDA6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2FybTY0L21tL2luaXQuYy0zMDEtfVxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jPTYyPXN0YXRpYyB2b2lkIF9faW5pdCBjc2t5X21lbWJsb2NrX2luaXQodm9pZClcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYy03MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmM6NzE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNzItXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYz0zNTU9dm9pZCBfX2luaXQgcGxhdGZvcm1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmMtMzY2LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jOjM2NzpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2OC1cXHR1bmZsYXR0ZW5fYW5kX2NvcHlfZGV2aWNlX3RyZWUoKTtcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM9MTY1PWFzbWxpbmthZ2Ugdm9pZCBfX2luaXQgbW11X2luaXQodm9pZClcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjMyLVxcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmM6MjMzOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9taWNyb2JsYXplL21tL2luaXQuYy0yMzQtXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM9NjMzPXN0YXRpYyB2b2lkIF9faW5pdCBhcmNoX21lbV9pbml0KGNoYXIgKipjbWRsaW5lX3ApXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUwLVxcdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xcbmFyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYzo2NTE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmMtNjUyLVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYz0xNTk9dm9pZCBfX2luaXQgc2V0dXBfYXJjaChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYy0xODUtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYzoxODY6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL25pb3MyL2tlcm5lbC9zZXR1cC5jLTE4Ny1cXG4tLVxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmM9NDY9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX21lbW9yeSh2b2lkKVxcbi0tXFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYy04OC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jOjg5OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYy05MC1cXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jPTY0ND1zdGF0aWMgdm9pZCBfX2luaXQgZWFybHlfcmVzZXJ2ZV9tZW1fZHQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbS5jLTY1MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYzo2NTE6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYy02NTItXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYz0yMTc9c3RhdGljIHZvaWQgX19pbml0IHNldHVwX2Jvb3RtZW0odm9pZClcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTI5Ny1cXHQgKi9cXG5hcmNoL3Jpc2N2L21tL2luaXQuYzoyOTg6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTktXFxuLS1cXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM9MTEyPXN0YXRpYyB2b2lkIF9faW5pdCBzaF9vZl9tZW1fcmVzZXJ2ZSh2b2lkKVxcbi0tXFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jLTExNC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL3NoL2JvYXJkcy9vZi1nZW5lcmljLmM6MTE1OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jLTExNi19XFxuLS1cXG5hcmNoL3VtL2tlcm5lbC9kdGIuYz0xMz12b2lkIHVtbF9kdGJfaW5pdCh2b2lkKVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjUtXFxuYXJjaC91bS9rZXJuZWwvZHRiLmM6MjY6XFx0XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL3VtL2tlcm5lbC9kdGIuYy0yNy1cXHR9XFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmM9NDA9dm9pZCBfX2luaXQgYm9vdG1lbV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3h0ZW5zYS9tbS9pbml0LmMtNDktXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jOjUwOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTUxLVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz00NzI9c3RhdGljIHZvaWQgX19pbml0IGZkdF9yZXNlcnZlX2VsZmNvcmVoZHIodm9pZClcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtNDg4LS8qKlxcbmRyaXZlcnMvb2YvZmR0LmM6NDg5OiAqIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCkgLSBjcmVhdGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnNcXG5kcml2ZXJzL29mL2ZkdC5jLTQ5MC0gKlxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy00OTQtICovXFxuZHJpdmVycy9vZi9mZHQuYzo0OTU6dm9pZCBfX2luaXQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcXG5kcml2ZXJzL29mL2ZkdC5jLTQ5Ni17XFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTUwNC1cXHRmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKCk7XFxuZHJpdmVycy9vZi9mZHQuYzo1MDU6XFx0ZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuZHJpdmVycy9vZi9mZHQuYy01MDYtXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jPTEyODI9dm9pZCBfX2luaXQgdW5mbGF0dGVuX2RldmljZV90cmVlKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTEyODYtXFx0LyogU2F2ZSB0aGUgc3RhdGljYWxseS1wbGFjZWQgcmVnaW9ucyBpbiB0aGUgcmVzZXJ2ZWRfbWVtIGFycmF5ICovXFxuZHJpdmVycy9vZi9mZHQuYzoxMjg3OlxcdGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCk7XFxuZHJpdmVycy9vZi9mZHQuYy0xMjg4LVxcbi0tXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg9MTgyPXN0YXRpYyBpbmxpbmUgc3RydWN0IGRldmljZV9ub2RlICpfX29mX2dldF9kbWFfcGFyZW50KGNvbnN0IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApXFxuLS1cXG5kcml2ZXJzL29mL29mX3ByaXZhdGUuaC0xODctXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg4OmludCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmg6MTg5OnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpO1xcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oLTE5MC1cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MjY3PXN0YXRpYyB2b2lkIF9faW5pdCBfX3JtZW1fY2hlY2tfZm9yX292ZXJsYXAodm9pZClcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMjk0LS8qKlxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mjk1OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKCkgLSBTY2FuIEZEVCBhbmQgaW5pdGlhbGl6ZSByZW1haW5pbmcgcmVzZXJ2ZWRcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5Ni0gKiBtZW1vcnkgcmVnaW9ucy5cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzAyLSAqL1xcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MzAzOnZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zMDQte1xcbi0tXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYz0zNjM9c3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fYWxsb2Nfc2l6ZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lKTtcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzY1LS8qXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzozNjY6ICogZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCkgLSByZXNlcnZlIGFuZCBhbGxvY2F0ZSBtZW1vcnkgb2NjdXBpZWQgYnlcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM2Ny0gKiByZXNlcnZlZCBtZW1vcnkgcmVnaW9ucy5cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzc0LSAqL1xcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6Mzc1OmludCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNzYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaD03ND1leHRlcm4gaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpO1xcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg6NzU6ZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCk7XFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaC03Ni1leHRlcm4gdm9pZCBlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oPTk4PXN0YXRpYyBpbmxpbmUgaW50IGVhcmx5X2luaXRfZHRfc2Nhbl9jaG9zZW5fc3Rkb3V0KHZvaWQpIHsgcmV0dXJuIC1FTk9ERVY7IH1cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oOjk5OnN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKSB7fVxcbmluY2x1ZGUvbGludXgvb2ZfZmR0LmgtMTAwLXN0YXRpYyBpbmxpbmUgdm9pZCBlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYodm9pZCkge31cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjc6NTguODY0MzIzMDc1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY3MzEwODY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBMaW5lIG9mIFJlYXNvbmluZyBvbiBTeXprYWxsZXIgYW5kIERldmljZSBUcmVlIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIGNhbGxlZCByZWFsbHkgZWFybHkgb24sIGR1cmluZyB0aGUgYm9vdCBwcm9jZXNzLiBUaGV5J3JlIGBfX2luaXRgIGZ1bmN0aW9ucywgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgd29uZGVyIGlmIHN5emthbGxlciBjYW4gZXZlbiB0b3VjaCB0aGVtLiBTeXprYWxsZXIsIGZyb20gd2hhdCBJIGtub3csIHdvcmtzIGl0cyBtYWdpYyBieSBnZW5lcmF0aW5nIHN5c2NhbGxzLCB3aGljaCBvYnZpb3VzbHkgaGFwcGVuICphZnRlciogdGhlIGtlcm5lbCBpcyB1cCBhbmQgcnVubmluZy4gU28sIHRoZSBkaXJlY3QgYXBwcm9hY2ggaXMgcHJvYmFibHkgb3V0LlxuXG5CdXQgaGFuZyBvbuKApiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgYW5kIGRldmljZSB0cmVlcy4gRG9lc24ndCBpdCBoYXZlIHNvbWUgY2FwYWJpbGl0eSBpbiB0aGF0IHJlYWxtPyBEb2VzIGl0IGZlZWQgYSBjdXN0b20gRFQgdG8gdGhlIGtlcm5lbCBhdCBib290LCBvciB2aWEgc29tZSBzbmVha3kgbWVjaGFuaXNtIEknbSBmb3JnZXR0aW5nPyBJIGRvIHJlY2FsbCBgc3l6X21vdW50X2ltYWdlYCwgYnV0IHRoYXQncyBmb3IgZmlsZXN5c3RlbXMsIHJpZ2h0PyBEZWZpbml0ZWx5IG5vdCBmb3IgRFRzLlxuXG5BbHJpZ2h0LCBsZXQncyBzdGVwIGJhY2suIERvZXMgc3l6a2FsbGVyIGFjdHVhbGx5ICpmdXp6KiBkZXZpY2UgdHJlZXM/IEkgYnJpZWZseSByZW1lbWJlciBzb21lIHN1cHBvcnQsIHBlcmhhcHMgdGhyb3VnaCBzb21ldGhpbmcgbGlrZSBgc3l6X2luaXRfbmV0X3dvcmRgPyBObywgdGhhdCBkb2Vzbid0IGZlZWwgcmlnaHQuXG5cbkFoYSEgTm93IGl0J3MgY2xpY2tpbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBkZXZpY2UgdHJlZXMsIGJ1dCBpdCdzIGRvbmUgZHVyaW5nIGJvb3QuIFRoZSB3YXkgaXQgd29ya3MsIEkgYmVsaWV2ZSwgaXMgaXQgY2FuIHBhc3MgYSBmdXp6ZWQgRFRCIHRvIHRoZSBrZXJuZWwgd2hlbiBhIFZNIGlzIGxhdW5jaGVkLiBUaGUgc3l6a2FsbGVyIGFyY2hpdGVjdHVyZSBpcyBzZXQgdXAgdG8gaGFuZGxlIFZNcyBib290aW5nIHdpdGggdGhlc2UgZnV6emVkIERUQnMuIE15IG1lbW9yeSBpcyBjb3JyZWN0LCBiZWNhdXNlIHRvb2xzIGxpa2UgYHN5ei1mdXp6ZXJgIGNhbiBwYXNzIGEgRFRCIHRvIFFFTVUuXG5cblNvLCBkb2VzIHN5emthbGxlciBkbyB0aGlzIHdpdGggRFRzPyBJIHJlbWVtYmVyIHN5emthbGxlciBoYWQgRFQgZnV6emluZyBzdXBwb3J0LCB0aGF0J3Mgd2hhdCBJIGFtIHRoaW5raW5nLiBJIHNob3VsZCBjaGVjayB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBzeXprYWxsZXIgcHNldWRvLXN5c2NhbGxzIGRlZGljYXRlZCBmb3IgRFQgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxMjQsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6MDUuNTM3NDM1NDExWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTgzMDk1NDgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5el8uKmR0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODowOC4wNTU3NTM5NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NTA1NjI5MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIHNlZW1zIGludGVyZXN0aW5nLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2FpdCwgc3l6a2FsbGVyIGRvZXMgZnV6eiBkZXZpY2UgdHJlZXMsIGRvZXNuJ3QgaXQ/XCIgSSdtIHByZXR0eSBzdXJlIGl0IGdlbmVyYXRlcyB0aGVtIGFuZCBmZWVkcyB0aGVtIHRvIFFFTVUuIFRoYXQncyB0aGUga2V5LiBMZXQncyBzZWUuLi4gdGhlIHBhdGNoIGlzIHRvdWNoaW5nIGBvZl9yZXNlcnZlZF9tZW0uY2AgYW5kIGBtZW1ibG9jay5jYC4gVGhlIGNoYW5nZXMgaW52b2x2ZSBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGFuZCBtb2RpZmljYXRpb25zIHRvIGBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5YC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNvZGUgaXMgZXZlbiAqcmVhY2hhYmxlKiBpbiBhIHR5cGljYWwgUUVNVS1iYXNlZCBzZXR1cCwgYmVjYXVzZSB0aGF0J3Mgd2hhdCB0aGUgcHJvbXB0IGNhcmVzIGFib3V0LiBUaGFua2Z1bGx5LCBRRU1VIHJlbGllcyBvbiBkZXZpY2UgdHJlZXMgZm9yIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYsIHNvIHRoZSBhbnN3ZXIgaXMgeWVzLCB0aGlzIGNvZGUgKmlzKiByZWFjaGFibGUuXG5cblRoZSBwcm9tcHQgb3V0bGluZXMgc3BlY2lmaWMgc2NlbmFyaW9zIHRoYXQgZGlzcXVhbGlmeSBmdXp6aW5nLiBMZXQncyBzZWUuLi4gZG9jdW1lbnRhdGlvbiBjaGFuZ2VzLCBkZWNvcmF0aXZlIHN0dWZmIGxpa2UgbG9nZ2luZywgYW5kIHVucmVhY2hhYmxlIGNvZGUgcGF0aHMgYXJlIG5vLWdvcy4gVmVuZG9yLXNwZWNpZmljIGRyaXZlcnMgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlPyBOb3BlLiBUZWFyZG93biBjYWxsYmFja3MgdGhhdCBvbmx5IHJ1biBkdXJpbmcgaG90LXVucGx1Zz8gQWxzbyBuby4gQnV0IHRoaXMgcGF0Y2ggbG9va3MgbGlrZSBpdCdzIGltcGFjdGluZyBjb3JlIGtlcm5lbCBsb2dpYywgc3BlY2lmaWNhbGx5IGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLiBUaGF0J3MgYSBnb29kIHNpZ24uXG5cblRoZSBwcm9tcHQgc3RhdGVzIGlmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYyBvciBkcml2ZXJzLCBJIG5lZWQgdG8gdmVyaWZ5IGl0IGNhbiBiZSBleGVjdXRlZCB1c2luZyBjb2RlIHNlYXJjaCB0b29scywgYW5kIHRoZW4gcmV0dXJuIFwiV29ydGhGdXp6aW5nPXRydWUuXCIgRXhjZWxsZW50LlxuXG5BbHJpZ2h0LCBiYWNrIHRvIHN5emthbGxlciBhbmQgRFRCcy4gSXQgc2VlbXMgbXkgaW5pdGlhbCBodW5jaCB3YXMgY29ycmVjdC4gSXQgZG9lcyBmdXp6IHRoZW0sIGJ5IGdlbmVyYXRpbmcgdGhlbSBhbmQgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwuXG5cblNvLCB0aGlzIGxvb2tzIHByb21pc2luZy4gSXQncyBjb3JlIGtlcm5lbCBsb2dpYywgcmVhY2hhYmxlIHZpYSBRRU1VLCBhbmQgc3l6a2FsbGVyICpjYW4qIGZ1enogZGV2aWNlIHRyZWVzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlcXVpcmVkLiBMZXQncyBzZWUuLi4gYGRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNgIHJlcXVpcmVzIGBDT05GSUdfT0ZfUkVTRVJWRURfTUVNYCwgd2hpY2ggd2lsbCBiZSBjaGVja2VkIHZpYSB0aGUgS2NvbmZpZyBmaWxlcy4gVGhpcyBsb29rcyBsaWtlIGEgZGVmaW5pdGUgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ2LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjE2LjU2MTM4NTEwOFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTM4MTE3MDkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBPRl9SRVNFUlZFRF9NRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTk1PWNvbmZpZyBPRl9JUlFcXG4tLVxcbmRyaXZlcnMvb2YvS2NvbmZpZy05OC1cXG5kcml2ZXJzL29mL0tjb25maWc6OTk6Y29uZmlnIE9GX1JFU0VSVkVEX01FTVxcbmRyaXZlcnMvb2YvS2NvbmZpZy0xMDAtXFx0ZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6MTguMDk5NTEyMDZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTUzMzM1MjUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgTWVtb3J5IFJlc2VydmF0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBkaXJlY3RseSB0aWVkIHRvIGBPRl9FQVJMWV9GTEFUVFJFRWAuIFRoYXQncyBhIGtleSBkZXBlbmRlbmN5IHRvIHVuZGVyc3RhbmQuIFdlIG5lZWQgdG8gZGlzc2VjdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29ubmVjdGlvbiwgZXNwZWNpYWxseSBpZiB3ZSBhcmUgZGVhbGluZyB3aXRoIG1lbW9yeSByZXNlcnZhdGlvbiBzdHJhdGVnaWVzLiBMZXQncyBkZWx2ZSBpbnRvIHdoYXQgYE9GX0VBUkxZX0ZMQVRUUkVFYCBhY3R1YWxseSBlbnRhaWxzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGltcGFjdHMgb3VyIG1lbW9yeSBtYW5hZ2VtZW50LiBVbmRlcnN0YW5kaW5nIHRoZSBpbnRlcmFjdGlvbiBoZXJlIGlzIGNydWNpYWwuIEkgbmVlZCB0byBmdWxseSBncmFzcCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDAxNiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjIxLjA1Mjg1MDA2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU0Njc4NTM5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT0ZfRUFSTFlfRkxBVFRSRUVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9LY29uZmlnPTY0PWNvbmZpZyBPRl9GTEFUVFJFRVxcbi0tXFxuZHJpdmVycy9vZi9LY29uZmlnLTY5LVxcbmRyaXZlcnMvb2YvS2NvbmZpZzo3MDpjb25maWcgT0ZfRUFSTFlfRkxBVFRSRUVcXG5kcml2ZXJzL29mL0tjb25maWctNzEtXFx0ZGVmX2Jvb2wgT0YgXFx1MDAyNlxcdTAwMjYgIShTUEFSQyB8fCBBTFBIQSB8fCBIRVhBR09OIHx8IE02OEsgfHwgUEFSSVNDIHx8IFMzOTApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjIyLjU5OTY0MjQ2NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDYwMjQyNjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXM6IFJlc2VydmVkIE1lbW9yeSBpbiBFYXJseSBCb290KipcblxuT2theSwgc28gdGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGRlYWxzIHdpdGggcmVzZXJ2ZWQgbWVtb3J5IGFuZCBEZXZpY2UgVHJlZSAoRFQpIGluaXRpYWxpemF0aW9uLCB3aGljaCwgaWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSwgaXMgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG1vc3QgYXJjaGl0ZWN0dXJlcyB1c2luZyB0aGUgXCJPRlwiIGZsYWcuIE15IGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIGlkZW50aWZ5aW5nIHRoZSBtb3N0IHJlbGV2YW50IGtlcm5lbCBmdW5jdGlvbnMgZm9yIGZ1enppbmcsIGtlZXBpbmcgaW4gbWluZCB0aGUgbmVlZCB0byBhdm9pZCBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgYW5kIGluc3RlYWQgZm9jdXNpbmcgb24gbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0J3MgdGhlIGtleS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6emluZyBpc24ndCBza2V3ZWQuXG5cblRoZSBwYXRjaCB0b3VjaGVzIGEgZmV3IGtleSBhcmVhcyBpbiB0aGUgZWFybHkgYm9vdCBzZXF1ZW5jZS4gSSBrbm93IHRoYXQgYmVjYXVzZSBpdCByZWZlcmVuY2VzIHRoaW5ncyB0aGF0IGhhcHBlbiBlYXJseSwgYW5kIHRoZSBmdW5jdGlvbnMgYXJlIGFsbCBtYXJrZWQgYF9faW5pdGAuIFNwZWNpZmljYWxseSwgaXQgbW9kaWZpZXMgdGhlc2UgZnVuY3Rpb25zOiBgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeWAsIGBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZ2AsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAsIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGVgLCBhbmQgYWRkcyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLlxuXG5Ob3csIGNvbnNpZGVyaW5nIHRoZSBpbnN0cnVjdGlvbnMsIEkgbmVlZCB0byBsaXN0IHRoZSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGFkZGVkLiBJIHdhbnQgdGhlIHRoaW5ncyB0aGF0IGhhdmUgZXhwbGljaXQgc3ltYm9sIGFkZHJlc3Nlcy4gTG9va2luZyBhdCB0aGUgY29kZSwgaXQncyBwcmV0dHkgY2xlYXI6XG5cbiogICBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgXG4qICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWBcbiogICBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgXG5cbk5vdyBsZXQgbWUgZG91YmxlIGNoZWNrIHRoZSBmdW5jdGlvbiBzaWduYXR1cmVzLiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCBpcyBkZWZpbmVkIGFzIGBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKWAsIHNvIGl0J3MgYSBjYW5kaWRhdGUuIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAgaXMgYHZvaWQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlKHZvaWQpYCwgYW5kIGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgYGJvb2wgX19pbml0IG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpYC5cblxuSSBhbHNvIHNlZSB0aGF0IGBtZW1ibG9ja19vdmVybGFwc19ub21hcGAgaXMgZ2xvYmFsLCB3aGljaCBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBtZWFucyBpdCBjYW4gYmUgcmVhY2hlZC4gSSB3b25kZXIgaWYgdGhlIG90aGVycyBhcmUgYXMgd2VsbC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDI5MiwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODozMC4wNTk4ODcyNDFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MTkyNTM4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Mz1zdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE0NS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjE0NjpzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0xNDctXFx0XFx0XFx0XFx0XFx0ICAgICAgIHBoeXNfYWRkcl90IHNpemUsIGJvb2wgbm9tYXApXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE3ND1zdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTIwNi1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjIwNzpcXHRlcnIgPSBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKTtcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTIwOC1cXHRpZiAoZXJyKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjMxLjU3OTE0NjYwMVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDMzNjAyMjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFJlc2VydmVkIE1lbW9yeSBDb2RlIGFuZCBTeXprYWxsZXIncyBSZWFjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGZ1bmN0aW9uczogYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWdgLCBhbmQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCDigJMgdGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcsIGJlY2F1c2UgdGhhdCBzdWdnZXN0cyB0aGV5J3JlIGxpa2VseSBpbnRlcm5hbCB0byB0aGUgbW9kdWxlIGFuZCBwcm9iYWJseSBub3QgZGlyZWN0bHkgYWNjZXNzaWJsZSBmb3IgZnV6emluZyB2aWEgc3RhbmRhcmQgaW50ZXJmYWNlcy4gVGhlIFwibm9uLXN0YXRpY1wiIGZ1bmN0aW9ucywgbmFtZWx5IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCwgYXJlIHdoZXJlIHRoaW5ncyBnZXQgbW9yZSBpbnRlcmVzdGluZy5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBcIkNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGVzZT9cIiBUaGVzZSBmdW5jdGlvbnMgYXJlIGV4ZWN1dGVkIGR1cmluZyBlYXJseSBib290LCBhbmQgc3l6a2FsbGVyJ3MgY292ZXJhZ2UgY29sbGVjdGlvbiwgYXMgSSB1bmRlcnN0YW5kIGl0LCBzdGFydHMgKmFmdGVyKiB0aGUga2VybmVsIGlzIHVwIGFuZCBydW5uaW5nLCB1c3VhbGx5IGluIHRoZSBpbml0IHByb2Nlc3Mgb3IgbGF0ZXIuIFRoYXQgbWVhbnMgYW55IGBfX2luaXRgIGZ1bmN0aW9ucyBhcmUgbGlrZWx5IHRvIGJlIGZyZWVkIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBoYXMgYSBjaGFuY2UgdG8gbW9uaXRvciB0aGVtLiBJdCdzIHRoYXQgd2hvbGUgYF9faW5pdGAgc2VjdGlvbiBiZWluZyBmcmVlZCBhbmQgdGhlIGZhY3QgdGhhdCBjb3ZlcmFnZSBjb2xsZWN0aW9uIGlzbid0IGFjdGl2ZSBkdXJpbmcgdGhhdCBlYXJseSBib290IHBoYXNlIHRoYXQgcmVhbGx5IG1ha2VzIGl0IGEgZGVhZCBlbmQgZm9yIHN5emthbGxlci5cblxuTm93LCB3YWl0IGEgbWludXRlLCBJIHNlZW0gdG8gcmVtZW1iZXIgc29tZXRoaW5nIGFib3V0IEtDT1YuIERvZXNuJ3QgdGhhdCBnZXQgZW5hYmxlZCBlYXJseT8gT2theSwgeWVzLCBLQ09WICppcyogaW5pdGlhbGl6ZWQgZHVyaW5nIGJvb3QuIEJ1dCBzeXprYWxsZXIgb25seSBjb2xsZWN0cyBjb3ZlcmFnZSBmb3IgdGhlIHRocmVhZHMgaXQgY29udHJvbHMsIHJpZ2h0PyBBbmQgdGhpcyBlYXJseSBib290IGNvZGUgcnVucyBpbiB0aGUgaW5pdCB0YXNrLCBsb25nIGJlZm9yZSBzeXprYWxsZXIgZXZlbiBzdGFydHMgdXAuIFNvIEtDT1YsIGFzIGZhciBhcyBzeXprYWxsZXIgaXMgY29uY2VybmVkLCBpcyBhIG5vLWdvIGZvciB0aGlzIGNvZGUgYXMgd2VsbC5cblxuVGhlcmVmb3JlLCB0aGUgb2J2aW91cyBjb25jbHVzaW9uIGlzLCBhbmQgaXQncyBmcnVzdHJhdGluZywgc3l6a2FsbGVyIHByb2JhYmx5IGNhbid0IGZ1enogdGhpcyBlYXJseSBib290IGNvZGUuIEkgY2FuJ3QgdGhpbmsgb2YgYW55IG9idmlvdXMgd2F5IHRoYXQgc3l6a2FsbGVyIGNvdWxkIGdhaW4gYWNjZXNzIHRvIHRob3NlIGZ1bmN0aW9ucyBpbiB0aGVpciBub3JtYWwgc3RhdGUuIEhvd2V2ZXIsIG1heWJlIHRoZXJlJ3MgYSBiYWNrIGRvb3IuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlICpvbmx5KiBjYWxsZWQgZHVyaW5nIGVhcmx5IGJvb3QuXG5cblNvLCBsZXQncyBpbnZlc3RpZ2F0ZTogSXMgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWAgY2FsbGVkIGFueXdoZXJlIGVsc2UgaW4gdGhlIGNvZGU/IExldCdzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODozNy42MTI3NTE1MzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjcwNTcyOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJjL21tL2luaXQuYz0xMDE9dm9pZCBfX2luaXQgc2V0dXBfYXJjaF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvYXJjL21tL2luaXQuYy0xMzUtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9hcmMvbW0vaW5pdC5jOjEzNjpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvYXJjL21tL2luaXQuYy0xMzctXFxuLS1cXG5hcmNoL2FybS9tbS9pbml0LmM9MTgwPXZvaWQgX19pbml0IGFybV9tZW1ibG9ja19pbml0KGNvbnN0IHN0cnVjdCBtYWNoaW5lX2Rlc2MgKm1kZXNjKVxcbi0tXFxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5Mi1cXG5hcmNoL2FybS9tbS9pbml0LmM6MTkzOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcm0vbW0vaW5pdC5jLTE5NC1cXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTE5Nj12b2lkIF9faW5pdCBhcm02NF9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2FybTY0L21tL2luaXQuYy0yOTktXFxuYXJjaC9hcm02NC9tbS9pbml0LmM6MzAwOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9hcm02NC9tbS9pbml0LmMtMzAxLX1cXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvc2V0dXAuYz02Mj1zdGF0aWMgdm9pZCBfX2luaXQgY3NreV9tZW1ibG9ja19pbml0KHZvaWQpXFxuLS1cXG5hcmNoL2Nza3kva2VybmVsL3NldHVwLmMtNzAtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jOjcxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9jc2t5L2tlcm5lbC9zZXR1cC5jLTcyLVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL3NldHVwLmM9MzU1PXZvaWQgX19pbml0IHBsYXRmb3JtX2luaXQodm9pZClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9zZXR1cC5jLTM2Ni1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYzozNjc6XFx0ZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0oKTtcXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvc2V0dXAuYy0zNjgtXFx0dW5mbGF0dGVuX2FuZF9jb3B5X2RldmljZV90cmVlKCk7XFxuLS1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jPTE2NT1hc21saW5rYWdlIHZvaWQgX19pbml0IG1tdV9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jLTIzMi1cXG5hcmNoL21pY3JvYmxhemUvbW0vaW5pdC5jOjIzMzpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvbWljcm9ibGF6ZS9tbS9pbml0LmMtMjM0LVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jPTYzMz1zdGF0aWMgdm9pZCBfX2luaXQgYXJjaF9tZW1faW5pdChjaGFyICoqY21kbGluZV9wKVxcbi0tXFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY1MC1cXHRlYXJseV9pbml0X2ZkdF9yZXNlcnZlX3NlbGYoKTtcXG5hcmNoL21pcHMva2VybmVsL3NldHVwLmM6NjUxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jLTY1Mi1cXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmM9MTU5PXZvaWQgX19pbml0IHNldHVwX2FyY2goY2hhciAqKmNtZGxpbmVfcClcXG4tLVxcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmMtMTg1LVxcdGVhcmx5X2luaXRfZmR0X3Jlc2VydmVfc2VsZigpO1xcbmFyY2gvbmlvczIva2VybmVsL3NldHVwLmM6MTg2OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9uaW9zMi9rZXJuZWwvc2V0dXAuYy0xODctXFxuLS1cXG5hcmNoL29wZW5yaXNjL2tlcm5lbC9zZXR1cC5jPTQ2PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9tZW1vcnkodm9pZClcXG4tLVxcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtODgtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9vcGVucmlzYy9rZXJuZWwvc2V0dXAuYzo4OTpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvb3BlbnJpc2Mva2VybmVsL3NldHVwLmMtOTAtXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYz02NDQ9c3RhdGljIHZvaWQgX19pbml0IGVhcmx5X3Jlc2VydmVfbWVtX2R0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYy02NTAtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmM6NjUxOlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMtNjUyLVxcbi0tXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MjE3PXN0YXRpYyB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtKHZvaWQpXFxuLS1cXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0yOTctXFx0ICovXFxuYXJjaC9yaXNjdi9tbS9pbml0LmM6Mjk4OlxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMjk5LVxcbi0tXFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jPTExMj1zdGF0aWMgdm9pZCBfX2luaXQgc2hfb2ZfbWVtX3Jlc2VydmUodm9pZClcXG4tLVxcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTQtXFx0ZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKCk7XFxuYXJjaC9zaC9ib2FyZHMvb2YtZ2VuZXJpYy5jOjExNTpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gvc2gvYm9hcmRzL29mLWdlbmVyaWMuYy0xMTYtfVxcbi0tXFxuYXJjaC91bS9rZXJuZWwvZHRiLmM9MTM9dm9pZCB1bWxfZHRiX2luaXQodm9pZClcXG4tLVxcbmFyY2gvdW0va2VybmVsL2R0Yi5jLTI1LVxcbmFyY2gvdW0va2VybmVsL2R0Yi5jOjI2OlxcdFxcdGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKCk7XFxuYXJjaC91bS9rZXJuZWwvZHRiLmMtMjctXFx0fVxcbi0tXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jPTQwPXZvaWQgX19pbml0IGJvb3RtZW1faW5pdCh2b2lkKVxcbi0tXFxuYXJjaC94dGVuc2EvbW0vaW5pdC5jLTQ5LVxcbmFyY2gveHRlbnNhL21tL2luaXQuYzo1MDpcXHRlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmFyY2gveHRlbnNhL21tL2luaXQuYy01MS1cXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmM9NDcyPXN0YXRpYyB2b2lkIF9faW5pdCBmZHRfcmVzZXJ2ZV9lbGZjb3JlaGRyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL2ZkdC5jLTQ4OC0vKipcXG5kcml2ZXJzL29mL2ZkdC5jOjQ4OTogKiBlYXJseV9pbml0X2ZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gY3JlYXRlIHJlc2VydmVkIG1lbW9yeSByZWdpb25zXFxuZHJpdmVycy9vZi9mZHQuYy00OTAtICpcXG4tLVxcbmRyaXZlcnMvb2YvZmR0LmMtNDk0LSAqL1xcbmRyaXZlcnMvb2YvZmR0LmM6NDk1OnZvaWQgX19pbml0IGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpXFxuZHJpdmVycy9vZi9mZHQuYy00OTYte1xcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy01MDQtXFx0ZmR0X3Jlc2VydmVfZWxmY29yZWhkcigpO1xcbmRyaXZlcnMvb2YvZmR0LmM6NTA1OlxcdGZkdF9zY2FuX3Jlc2VydmVkX21lbSgpO1xcbmRyaXZlcnMvb2YvZmR0LmMtNTA2LVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYz0xMjgyPXZvaWQgX19pbml0IHVuZmxhdHRlbl9kZXZpY2VfdHJlZSh2b2lkKVxcbi0tXFxuZHJpdmVycy9vZi9mZHQuYy0xMjg2LVxcdC8qIFNhdmUgdGhlIHN0YXRpY2FsbHktcGxhY2VkIHJlZ2lvbnMgaW4gdGhlIHJlc2VydmVkX21lbSBhcnJheSAqL1xcbmRyaXZlcnMvb2YvZmR0LmM6MTI4NzpcXHRmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpO1xcbmRyaXZlcnMvb2YvZmR0LmMtMTI4OC1cXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oPTE4Mj1zdGF0aWMgaW5saW5lIHN0cnVjdCBkZXZpY2Vfbm9kZSAqX19vZl9nZXRfZG1hX3BhcmVudChjb25zdCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKVxcbi0tXFxuZHJpdmVycy9vZi9vZl9wcml2YXRlLmgtMTg3LVxcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4ODppbnQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xcbmRyaXZlcnMvb2Yvb2ZfcHJpdmF0ZS5oOjE4OTp2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKTtcXG5kcml2ZXJzL29mL29mX3ByaXZhdGUuaC0xOTAtXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTI2Nz1zdGF0aWMgdm9pZCBfX2luaXQgX19ybWVtX2NoZWNrX2Zvcl9vdmVybGFwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTI5NC0vKipcXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjI5NTogKiBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSgpIC0gU2NhbiBGRFQgYW5kIGluaXRpYWxpemUgcmVtYWluaW5nIHJlc2VydmVkXFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0yOTYtICogbWVtb3J5IHJlZ2lvbnMuXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTMwMi0gKi9cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjMwMzp2b2lkIF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZSh2b2lkKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzA0LXtcXG4tLVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM9MzYzPXN0YXRpYyBpbnQgX19pbml0IF9fcmVzZXJ2ZWRfbWVtX2FsbG9jX3NpemUodW5zaWduZWQgbG9uZyBub2RlLCBjb25zdCBjaGFyICp1bmFtZSk7XFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM2NS0vKlxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MzY2OiAqIGZkdF9zY2FuX3Jlc2VydmVkX21lbSgpIC0gcmVzZXJ2ZSBhbmQgYWxsb2NhdGUgbWVtb3J5IG9jY3VwaWVkIGJ5XFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYy0zNjctICogcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvbnMuXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTM3NC0gKi9cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jOjM3NTppbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMzc2LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvb2ZfZmR0Lmg9NzQ9ZXh0ZXJuIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKTtcXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oOjc1OmV4dGVybiB2b2lkIGVhcmx5X2luaXRfZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtKHZvaWQpO1xcbmluY2x1ZGUvbGludXgvb2ZfZmR0LmgtNzYtZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaD05OD1zdGF0aWMgaW5saW5lIGludCBlYXJseV9pbml0X2R0X3NjYW5fY2hvc2VuX3N0ZG91dCh2b2lkKSB7IHJldHVybiAtRU5PREVWOyB9XFxuaW5jbHVkZS9saW51eC9vZl9mZHQuaDo5OTpzdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZCkge31cXG5pbmNsdWRlL2xpbnV4L29mX2ZkdC5oLTEwMC1zdGF0aWMgaW5saW5lIHZvaWQgZWFybHlfaW5pdF9mZHRfcmVzZXJ2ZV9zZWxmKHZvaWQpIHt9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjM5LjEzOTgxNDI2NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MzEzOTUzNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkVhcmx5IEJvb3QgQ29kZSBhbmQgU3l6a2FsbGVyIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgaXMgb25seSBjYWxsZWQgZnJvbSBgZWFybHlfaW5pdF9mZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCB3aGljaCBpdHNlbGYgaXMgb25seSBjYWxsZWQgZHVyaW5nIHRoZSBhcmNoaXRlY3R1cmUgc2V0dXAsIHZlcnkgZWFybHkgaW4gdGhlIGJvb3QgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGNhbiBzeXprYWxsZXIgZXZlbiB0b3VjaCB0aGlzPyBJdCBzZWVtcyB1bmxpa2VseSBiZWNhdXNlIHN5emthbGxlciB1c3VhbGx5IGdldHMgY292ZXJhZ2UgZmVlZGJhY2sgZnJvbSB1c2VyLXNwYWNlIHByb2Nlc3NlcyB2aWEgS0NPViwgYW5kIHRoYXQncyBub3QgYWN0aXZlIGF0IHRoaXMgc3RhZ2UuXG5cbkJ1dCB3YWl0LCBJIHJlbWVtYmVyIHNvbWV0aGluZyBhYm91dCBzeXprYWxsZXIgZG9pbmcgXCJib290IGZ1enppbmdcIiBvciBcIkRUIGZ1enppbmdcIiB3aGVyZSBpdCBwYXNzZXMgYSBmdXp6ZWQgRGV2aWNlIFRyZWUgQmxvYiAoRFRCKSB0byBRRU1VIGFuZCBjaGVja3MgZm9yIGtlcm5lbCBjcmFzaGVzIGR1cmluZyB0aGUgYm9vdC4gRG9lcyBzeXprYWxsZXIgYWN0dWFsbHkgKmRvKiB0aGlzPyBJIGNhbid0IHJlbWVtYmVyIGlmIGl0IGhhcyBhIGBzeXMvbGludXgvZGV2aWNldHJlZWAgZW50cnkuLi4gSSBkb24ndCB0aGluayBzbywgYnV0IGl0IGRlZmluaXRlbHkgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIGJvb3QgcHJvY2VzcyBmdXp6aW5nLlxuXG5Ob3csIHRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZiB0aGlzIGNvZGUgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQgYW5kIHRoZW4gZGV0ZXJtaW5lIGlmIGl0IGlzIFdvcnRoRnV6emluZz10cnVlLiBXZWxsLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBzbyBJIG5lZWQgdG8gY2hlY2sgc29tZSB0aGluZ3MuXG5cbkZpcnN0LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlcXVpcmVkIGBDT05GSUdfYCBvcHRpb25zLiBJIHNlZSB0aGF0IGBPRl9SRVNFUlZFRF9NRU1gIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCBpZiBgT0ZfRUFSTFlfRkxBVFRSRUVgIGlzIGVuYWJsZWQuIEFuZCwgZnVydGhlciwgYE9GX0VBUkxZX0ZMQVRUUkVFYCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgaWYgYE9GYCBpcyBlbmFibGVkIGFuZCB0aGUgYXJjaGl0ZWN0dXJlIGlzbid0IHNvbWV0aGluZyBvYnNjdXJlIGxpa2UgU1BBUkMgb3IgQUxQSEEuIFNvIGl0IGxvb2tzIGxpa2UgYE9GYCBpcyB0aGUgbWFpbiBjb25maWd1cmF0aW9uIG9wdGlvbiB0byBsb29rIGZvci4gTGV0J3MgbGlzdCBgT0ZgIGFuZCBgT0ZfUkVTRVJWRURfTUVNYCBpbiB0aGUgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgaG9sZCBvbiwgYE9GX1JFU0VSVkVEX01FTWAgaXMganVzdCBgZGVmX2Jvb2wgT0ZfRUFSTFlfRkxBVFRSRUVgLCBzbyBJIGRvbid0IHRlY2huaWNhbGx5IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgaXQsIGJ1dCBpdCBzaG91bGRuJ3QgaHVydCB0byBoYXZlIGl0IHRoZXJlLlxuXG5Ob3csIEknbGwgY2hlY2sgaWYgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYCBpcyBleHBvcnRlZC4gTm9wZSwgaXQncyBqdXN0IGEgZ2xvYmFsIHZhcmlhYmxlLiBPa2F5LCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGUgZm9sbG93aW5nIHN5bWJvbHM6IGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1gLCBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgLCBhbmQgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYC5cblxuSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSByZXZpZXcgdGhlIGRyaXZlciBmaWxlIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI4OjQ4LjQ1Mzc3NzAxOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUxODI2MzE2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1ibG9ja19vdmVybGFwc19ub21hcFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jPTE0Nj1zdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE1Ni1cXHRcXHQgICAgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmM6MTU3OlxcdFxcdCAgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTU4LVxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jLTE2My1cXHRpZiAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XFxuZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYzoxNjQ6XFx0ICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKVxcbmRyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmMtMTY1LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmg9MTQ5PXVuc2lnbmVkIGxvbmcgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChwaHlzX2FkZHJfdCBiYXNlMSwgcGh5c19hZGRyX3Qgc2l6ZTEsXFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oLTE1MC1cXHRcXHRcXHRcXHQgICAgIHBoeXNfYWRkcl90IGJhc2UyLCBwaHlzX2FkZHJfdCBzaXplMik7XFxuaW5jbHVkZS9saW51eC9tZW1ibG9jay5oOjE1MTpib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xcbmluY2x1ZGUvbGludXgvbWVtYmxvY2suaC0xNTItYm9vbCBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXFxuLS1cXG5tbS9tZW1ibG9jay5jPTE5OT1tZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXFxuLS1cXG5tbS9tZW1ibG9jay5jLTIwNC1cXG5tbS9tZW1ibG9jay5jOjIwNTpib29sIF9faW5pdCBtZW1ibG9ja19vdmVybGFwc19ub21hcChwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxcbm1tL21lbWJsb2NrLmMtMjA2LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjg6NDkuOTcyMDQ2OTI5WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjg2NDcxOTk2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIC0gQSBQcm9taXNpbmcgVGFyZ2V0KipcblxuT2theSwgbGV0J3Mgc2VlLi4uIEkndmUgc3BvdHRlZCBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGluIGBtbS9tZW1ibG9jay5jYC4gSG1tLCBJJ20gdGhpbmtpbmcsIGNvdWxkIHRoaXMgYmUgZnV6emFibGU/IEl0IGRvZXMgbG9vayBsaWtlIGEgcG90ZW50aWFsIHRhcmdldC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBhbiBgX19pbml0YCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gYSBnb29kIGluZGljYXRvciBvZiBpbml0aWFsIHN5c3RlbSBzZXR1cC4gQmVjYXVzZSBpdCdzIHdpdGhpbiB0aGUgY29yZSBrZXJuZWwgbG9naWMg4oCTIHNwZWNpZmljYWxseSwgcmVsYXRlZCB0byBkZXZpY2UgdHJlZSBwYXJzaW5nIGFuZCBtZW1vcnkgYmxvY2sgcmVzZXJ2YXRpb24sIGl04oCZcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSB3aXRoaW4gYSBRRU1VIGVudmlyb25tZW50LiBUaGlzIG1ha2VzIGl0IGEgc29saWQgY2FuZGlkYXRlLlxuXG5HaXZlbiBhbGwgdGhpcywgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nYCB0byBgdHJ1ZWAuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLiBJJ20gZ29pbmcgdG8gcHJpb3JpdGl6ZSB0aGVzZSBzeW1ib2xzOiBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtYCwgYGZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlYCwgYW5kLCBvZiBjb3Vyc2UsIHRoZSB0YXJnZXQgZnVuY3Rpb24gaXRzZWxmOiBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgLlxuXG5Ob3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGVuYWJsaW5nIHRoZSByaWdodCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEknbSBnb2luZyB0byBzdGFydCB3aXRoIGBPRmAgYW5kIGBPRl9SRVNFUlZFRF9NRU1gLiBMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgT0ZfUkVTRVJWRURfTUVNYCBpcyBjb3JyZWN0IGZvciB0aGlzLiBZZXMsIGxvb2tpbmcgYXQgdGhlIGNvZGUsIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBpcyBjb21waWxlZCBiYXNlZCBvbiB0aGF0IGNvbmZpZyBzZXR0aW5nLiBHb29kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE5NywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyODo1OC42MTkyNDk1MDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMzc0MjA5MDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2ZfcmVzZXJ2ZWRfbWVtLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9vZi9NYWtlZmlsZT0xMD1vYmotJChDT05GSUdfT0ZfVU5JVFRFU1QpICs9IHVuaXR0ZXN0Lm9cXG5kcml2ZXJzL29mL01ha2VmaWxlOjExOm9iai0kKENPTkZJR19PRl9SRVNFUlZFRF9NRU0pICs9IG9mX3Jlc2VydmVkX21lbS5vXFxuZHJpdmVycy9vZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfT0ZfUkVTT0xWRSkgICs9IHJlc29sdmVyLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MDAuOTU2Njc3NzQzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExODkzODI0OTk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFBhdGNoJ3MgV29ydGhpbmVzcyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoZSBwYXRjaCB0b3VjaGVzIG9uIGBDT05GSUdfT0ZfUkVTRVJWRURfTUVNYC4gSSBzaG91bGQgYWxzbyBjb25zaWRlciBgQ09ORklHX09GX0VBUkxZX0ZMQVRUUkVFYCwgYXMgaXQgc2VlbXMgcmVsYXRlZC4gSSdsbCBpbmNsdWRlIGJvdGggYE9GYCwgYE9GX1JFU0VSVkVEX01FTWAsIGFuZCBgT0ZfRUFSTFlfRkxBVFRSRUVgIGluIG15IGV2YWx1YXRpb24uXG5cbldhaXQsIHRoZSBpbnN0cnVjdGlvbnMgZXhwbGljaXRseSBzdGF0ZSB0aGF0IEkgc2hvdWxkIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGUgY2hhbmdlcyBhcmUgdW5yZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gQnV0IHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gUUVNVSwgcGFydGljdWxhcmx5IG9uIEFSTSwgQVJNNjQsIGFuZCBSSVNDLVYgc3lzdGVtcyB0aGF0IGxldmVyYWdlIHRoZSBEZXZpY2UgVHJlZS5cblxuTm93LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBiZWluZyBtb2RpZmllZCBvciBhZGRlZCBhbmQgaWYgdGhleSBhcmUgc3RhdGljLlxuSSBjYW4gc2VlIHRoYXQgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCwgYF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnYCwgYGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnlgLCBgcmVjb3JkX3Jlc2VydmVfZmFpbGVkX25vZGVgIGFuZCBgcmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWRgIGFyZSBzdGF0aWMgZnVuY3Rpb25zLlxuVGhpcyBzdWdnZXN0cyB0aGV5IGFyZSBub3QgdGhlIHByaW1hcnkgZm9jdXMgb2YgdGhlIGNoYW5nZXMuXG5cblRoZSBub24tc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBhZGRlZCBhcmU6XG4qICAgYGZkdF9zY2FuX3Jlc2VydmVkX21lbWBcbiogICBgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGVgXG4qICAgYG1lbWJsb2NrX292ZXJsYXBzX25vbWFwYFxuXG5UaGVzZSB0aHJlZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGFkZGl0aW9ucyBhbmQgY2hhbmdlcyB3aXRoaW4gdGhlIHBhdGNoLiBUaGV5J3JlIG15ICpGb2N1c1N5bWJvbHMqLlxuXG5VbHRpbWF0ZWx5LCB0aGUgcGF0Y2ggaXMgYWJvdXQgY2hhbmdlcyB0byB0aGUgRGV2aWNlIFRyZWUncyByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGludHJvZHVjZXMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyAqZnVuZGFtZW50YWwqIGtlcm5lbCBib290IGxvZ2ljLCBhbmQgaW1wb3J0YW50bHksIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIGVudmlyb25tZW50cyBsaWtlIFFFTVUsIGVzcGVjaWFsbHkgb24gQVJNNjQgYW5kIFJJU0MtViwgd2hpY2ggaGVhdmlseSB1dGlsaXplIHRoZSBEZXZpY2UgVHJlZS5cblxuVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODEwLCJPdXRwdXRUb2tlbnMiOjE0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xOFQxMDoyOToxMi44NTA1MDU3MTlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTQxNTEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT0ZcIixcbiAgICBcIk9GX1JFU0VSVkVEX01FTVwiLFxuICAgIFwiT0ZfRUFSTFlfRkxBVFRSRUVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1cIixcbiAgICBcImZkdF9zY2FuX3Jlc2VydmVkX21lbV9sYXRlXCIsXG4gICAgXCJtZW1ibG9ja19vdmVybGFwc19ub21hcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRldmljZSB0cmVlIHJlc2VydmVkIG1lbW9yeSBpbml0aWFsaXphdGlvbiBhbmQgYWRkcyBhIGNoZWNrIGZvciBvdmVybGFwcGluZyBgbm9tYXBgIG1lbW9yeSByZWdpb25zLiBUaGlzIGlzIGNvcmUga2VybmVsIGJvb3QgbG9naWMgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKGVzcGVjaWFsbHkgb24gYXJjaGl0ZWN0dXJlcyB1c2luZyBEZXZpY2UgVHJlZSBsaWtlIEFSTTY0IGFuZCBSSVNDLVYpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9GXCIsXG4gICAgXCJPRl9SRVNFUlZFRF9NRU1cIixcbiAgICBcIk9GX0VBUkxZX0ZMQVRUUkVFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtXCIsXG4gICAgXCJmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZVwiLFxuICAgIFwibWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgaW5pdGlhbGl6YXRpb24gYW5kIGFkZHMgYSBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgYG5vbWFwYCBtZW1vcnkgcmVnaW9ucy4gVGhpcyBpcyBjb3JlIGtlcm5lbCBib290IGxvZ2ljIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChlc3BlY2lhbGx5IG9uIGFyY2hpdGVjdHVyZXMgdXNpbmcgRGV2aWNlIFRyZWUgbGlrZSBBUk02NCBhbmQgUklTQy1WKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MTIuOTIxOTI2NTI1WiIsIlNlcSI6MjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAxNjE0NzE4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI5OjEyLjkyMjU4OTM2NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoyMDAxNTQ3NzExNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDBiNWJlZWIxYTEzYmEzZDgxZjE2N2Q1ZTQ2MGY4NGRjZmZlZDhhN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgQXVnIDE4IDEwOjI3OjQ2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9vZl9yZXNlcnZlZF9tZW0uYyBiL2RyaXZlcnMvb2Yvb2ZfcmVzZXJ2ZWRfbWVtLmNcbmluZGV4IDhjOWQ2Mzk1ZDZhMzkuLjAwOTBmYTg2ZGQxMGMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG4rKysgYi9kcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jXG5AQCAtMzIsNiArMzIsMzAgQEAgc3RhdGljIHN0cnVjdCByZXNlcnZlZF9tZW0gKnJlc2VydmVkX21lbSBfX3JlZmRhdGEgPSByZXNlcnZlZF9tZW1fYXJyYXk7XG4gc3RhdGljIGludCB0b3RhbF9yZXNlcnZlZF9tZW1fY250ID0gTUFYX1JFU0VSVkVEX1JFR0lPTlM7XG4gc3RhdGljIGludCByZXNlcnZlZF9tZW1fY291bnQ7XG4gXG4rc3RhdGljIGludCByZXNlcnZlX2ZhaWxlZF9ub2Rlc1tNQVhfUkVTRVJWRURfUkVHSU9OU10gX19pbml0ZGF0YTtcbitzdGF0aWMgaW50IHJlc2VydmVfZmFpbGVkX25vZGVzX2NudCBfX2luaXRkYXRhO1xuK1xuK3N0YXRpYyBib29sIF9faW5pdCByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZChpbnQgbm9kZSlcbit7XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHJlc2VydmVfZmFpbGVkX25vZGVzX2NudDsgaSsrKVxuK1x0XHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNbaV0gPT0gbm9kZSlcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGJvb2wgX19pbml0IHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlKGludCBub2RlLCBjb25zdCBjaGFyICp1bmFtZSlcbit7XG4rXHRpZiAocmVzZXJ2ZV9mYWlsZWRfbm9kZXNfY250ID09IE1BWF9SRVNFUlZFRF9SRUdJT05TKSB7XG4rXHRcdHByX2VycihcInRvbyBtYW55IGZhaWxlZCByZWdpb25zLCAnJXMnIHJlc2VydmF0aW9uIGZhaWxlZFxcblwiLCB1bmFtZSk7XG4rXHRcdHJldHVybiBmYWxzZTtcbitcdH1cbitcbitcdHJlc2VydmVfZmFpbGVkX25vZGVzW3Jlc2VydmVfZmFpbGVkX25vZGVzX2NudCsrXSA9IG5vZGU7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4gc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9hbGxvY19yZXNlcnZlZF9tZW1vcnlfYXJjaChwaHlzX2FkZHJfdCBzaXplLFxuIFx0cGh5c19hZGRyX3QgYWxpZ24sIHBoeXNfYWRkcl90IHN0YXJ0LCBwaHlzX2FkZHJfdCBlbmQsIGJvb2wgbm9tYXAsXG4gXHRwaHlzX2FkZHJfdCAqcmVzX2Jhc2UpXG5AQCAtMTEyLDcgKzEzNiw4IEBAIHN0YXRpYyBpbnQgX19pbml0IGFsbG9jX3Jlc2VydmVkX21lbV9hcnJheSh2b2lkKVxuIH1cbiBcbiBzdGF0aWMgdm9pZCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuK1x0XHRcdFx0ICAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUsXG4rXHRcdFx0XHQgICAgICAgYm9vbCBkeW5hbWljKTtcbiBzdGF0aWMgaW50IGZkdF92YWxpZGF0ZV9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRcdFx0XHRcdCAgcGh5c19hZGRyX3QgKmFsaWduKTtcbiBzdGF0aWMgaW50IGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsXG5AQCAtMTI4LDExICsxNTMsMTcgQEAgc3RhdGljIGludCBfX2luaXQgZWFybHlfaW5pdF9kdF9yZXNlcnZlX21lbW9yeShwaHlzX2FkZHJfdCBiYXNlLFxuIFx0XHQgKiBpZiB0aGUgcmVnaW9uIGlzbid0IG1lbW9yeSBhcyBpdCB3b24ndCBiZSBtYXBwZWQuXG4gXHRcdCAqL1xuIFx0XHRpZiAobWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKFx1MDAyNm1lbWJsb2NrLm1lbW9yeSwgYmFzZSwgc2l6ZSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBtZW1ibG9ja19pc19yZWdpb25fcmVzZXJ2ZWQoYmFzZSwgc2l6ZSkpXG4rXHRcdCAgICAobWVtYmxvY2tfaXNfcmVnaW9uX3Jlc2VydmVkKGJhc2UsIHNpemUpIHx8XG4rXHRcdCAgICAgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAoYmFzZSwgc2l6ZSkpKVxuIFx0XHRcdHJldHVybiAtRUJVU1k7XG4gXG4gXHRcdHJldHVybiBtZW1ibG9ja19tYXJrX25vbWFwKGJhc2UsIHNpemUpO1xuIFx0fVxuK1xuK1x0aWYgKG1lbWJsb2NrX2lzX3JlZ2lvbl9yZXNlcnZlZChiYXNlLCBzaXplKSB8fFxuK1x0ICAgIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKGJhc2UsIHNpemUpKVxuK1x0XHRyZXR1cm4gLUVCVVNZO1xuK1xuIFx0cmV0dXJuIG1lbWJsb2NrX3Jlc2VydmUoYmFzZSwgc2l6ZSk7XG4gfVxuIFxuQEAgLTE0MSw3ICsxNzIsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KHBoeXNfYWRkcl90IGJhc2UsXG4gICogZmlyc3QgZW50cnkgaW4gJ3JlZycgcHJvcGVydHlcbiAgKi9cbiBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4tXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUpXG4rXHRcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqdW5hbWUsXG4rXHRcdFx0XHRcdCAgICAgYm9vbCAqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSlcbiB7XG4gXHRwaHlzX2FkZHJfdCBiYXNlLCBzaXplO1xuIFx0aW50IGxlbiwgZXJyO1xuQEAgLTE0OSw2ICsxODEsOCBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9yZXNlcnZlX3JlZyh1bnNpZ25lZCBsb25nIG5vZGUsXG4gXHRib29sIG5vbWFwO1xuIFx0dTY0IGIsIHM7XG4gXG4rXHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IGZhbHNlO1xuK1xuIFx0cHJvcCA9IG9mX2ZsYXRfZHRfZ2V0X2FkZHJfc2l6ZV9wcm9wKG5vZGUsIFwicmVnXCIsIFx1MDAyNmxlbik7XG4gXHRpZiAoIXByb3AgfHwgIWxlbilcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG5AQCAtMTY3LDE0ICsyMDEsMjAgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fcmVzZXJ2ZV9yZWcodW5zaWduZWQgbG9uZyBub2RlLFxuIFx0YmFzZSA9IGI7XG4gXHRzaXplID0gcztcbiBcbi1cdGlmIChzaXplIFx1MDAyNlx1MDAyNiBlYXJseV9pbml0X2R0X3Jlc2VydmVfbWVtb3J5KGJhc2UsIHNpemUsIG5vbWFwKSA9PSAwKSB7XG4tXHRcdGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTtcbi1cdFx0cHJfZGVidWcoXCJSZXNlcnZlZCBtZW1vcnk6IHJlc2VydmVkIHJlZ2lvbiBmb3Igbm9kZSAnJXMnOiBiYXNlICVwYSwgc2l6ZSAlbHUgTWlCXFxuXCIsXG4tXHRcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4tXHR9IGVsc2Uge1xuK1x0aWYgKCFzaXplKVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcbitcdGVyciA9IGVhcmx5X2luaXRfZHRfcmVzZXJ2ZV9tZW1vcnkoYmFzZSwgc2l6ZSwgbm9tYXApO1xuK1x0aWYgKGVycikge1xuK1x0XHQqc2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSA9IHRydWU7XG4gXHRcdHByX2VycihcIlJlc2VydmVkIG1lbW9yeTogZmFpbGVkIHRvIHJlc2VydmUgbWVtb3J5IGZvciBub2RlICclcyc6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cIixcbiBcdFx0ICAgICAgIHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4rXHRcdHJldHVybiBlcnI7XG4gXHR9XG4rXG4rXHRmZHRfZml4dXBfcmVzZXJ2ZWRfbWVtX25vZGUobm9kZSwgYmFzZSwgc2l6ZSk7XG4rXHRwcl9kZWJ1ZyhcIlJlc2VydmVkIG1lbW9yeTogcmVzZXJ2ZWQgcmVnaW9uIGZvciBub2RlICclcyc6IGJhc2UgJXBhLCBzaXplICVsdSBNaUJcXG5cIixcbitcdFx0IHVuYW1lLCBcdTAwMjZiYXNlLCAodW5zaWduZWQgbG9uZykoc2l6ZSAvIFNaXzFNKSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzA2LDEwICszNDYsMTQgQEAgdm9pZCBfX2luaXQgZmR0X3NjYW5fcmVzZXJ2ZWRfbWVtX2xhdGUodm9pZClcbiBcdFx0YmFzZSA9IGI7XG4gXHRcdHNpemUgPSBzO1xuIFxuLVx0XHRpZiAoc2l6ZSkge1xuLVx0XHRcdHVuYW1lID0gZmR0X2dldF9uYW1lKGZkdCwgY2hpbGQsIE5VTEwpO1xuLVx0XHRcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKGNoaWxkLCB1bmFtZSwgYmFzZSwgc2l6ZSk7XG4tXHRcdH1cbitcdFx0aWYgKCFzaXplKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRpZiAocmVzZXJ2ZWRfbWVtX25vZGVfcmVzZXJ2ZV9mYWlsZWQoY2hpbGQpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHR1bmFtZSA9IGZkdF9nZXRfbmFtZShmZHQsIGNoaWxkLCBOVUxMKTtcbitcdFx0ZmR0X2luaXRfcmVzZXJ2ZWRfbWVtX25vZGUoY2hpbGQsIHVuYW1lLCBiYXNlLCBzaXplLCBmYWxzZSk7XG4gXHR9XG4gXG4gXHQvKiBjaGVjayBmb3Igb3ZlcmxhcHBpbmcgcmVzZXJ2ZWQgcmVnaW9ucyAqL1xuQEAgLTM0OSw2ICszOTMsNyBAQCBpbnQgX19pbml0IGZkdF9zY2FuX3Jlc2VydmVkX21lbSh2b2lkKVxuIFxuIFx0ZmR0X2Zvcl9lYWNoX3N1Ym5vZGUoY2hpbGQsIGZkdCwgbm9kZSkge1xuIFx0XHRjb25zdCBjaGFyICp1bmFtZTtcbitcdFx0Ym9vbCBzaG91bGRfcmVjb3JkX2ZhaWxlZF9ub2RlO1xuIFx0XHRpbnQgZXJyO1xuIFxuIFx0XHRpZiAoIW9mX2ZkdF9kZXZpY2VfaXNfYXZhaWxhYmxlKGZkdCwgY2hpbGQpKVxuQEAgLTM1Niw5ICs0MDEsMTQgQEAgaW50IF9faW5pdCBmZHRfc2Nhbl9yZXNlcnZlZF9tZW0odm9pZClcbiBcbiBcdFx0dW5hbWUgPSBmZHRfZ2V0X25hbWUoZmR0LCBjaGlsZCwgTlVMTCk7XG4gXG4tXHRcdGVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSk7XG4rXHRcdGVyciA9IF9fcmVzZXJ2ZWRfbWVtX3Jlc2VydmVfcmVnKGNoaWxkLCB1bmFtZSxcbitcdFx0XHRcdFx0XHQgXHUwMDI2c2hvdWxkX3JlY29yZF9mYWlsZWRfbm9kZSk7XG4gXHRcdGlmICghZXJyKVxuIFx0XHRcdGNvdW50Kys7XG4rXHRcdGVsc2UgaWYgKHNob3VsZF9yZWNvcmRfZmFpbGVkX25vZGUgXHUwMDI2XHUwMDI2XG4rXHRcdFx0ICFyZWNvcmRfcmVzZXJ2ZV9mYWlsZWRfbm9kZShjaGlsZCwgdW5hbWUpKVxuK1x0XHRcdC8qIEtlZXAgYSBzbG90IGZvciB0aGUgdW50cmFja2VkIG5vZGUncyBsYXRlIGluaXRpYWxpemF0aW9uLiAqL1xuK1x0XHRcdGNvdW50Kys7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIFNhdmUgdGhlIG5vZGVzIGZvciB0aGUgZHluYW1pY2FsbHktcGxhY2VkIHJlZ2lvbnNcbkBAIC01MTgsNyArNTY4LDcgQEAgc3RhdGljIGludCBfX2luaXQgX19yZXNlcnZlZF9tZW1fYWxsb2Nfc2l6ZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1cbiBcdH1cbiBcbiBcdGZkdF9maXh1cF9yZXNlcnZlZF9tZW1fbm9kZShub2RlLCBiYXNlLCBzaXplKTtcbi1cdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplKTtcbitcdGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKG5vZGUsIHVuYW1lLCBiYXNlLCBzaXplLCB0cnVlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC02MjcsMTMgKzY3NywxNSBAQCBzdGF0aWMgaW50IF9faW5pdCBfX3Jlc2VydmVkX21lbV9pbml0X25vZGUoc3RydWN0IHJlc2VydmVkX21lbSAqcm1lbSxcbiAgKiBAdW5hbWU6IG5hbWUgb2YgdGhlIHJlc2VydmVkIG1lbW9yeSBub2RlXG4gICogQGJhc2U6IGJhc2UgYWRkcmVzcyBvZiB0aGUgcmVzZXJ2ZWQgbWVtb3J5IHJlZ2lvblxuICAqIEBzaXplOiBzaXplIG9mIHRoZSByZXNlcnZlZCBtZW1vcnkgcmVnaW9uXG4rICogQGR5bmFtaWM6IHdoZXRoZXIgdGhlIHJlZ2lvbiB3YXMgZHluYW1pY2FsbHkgYWxsb2NhdGVkXG4gICpcbiAgKiBUaGlzIGZ1bmN0aW9uIGNhbGxzIHRoZSByZWdpb24tc3BlY2lmaWMgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gZm9yIGFcbiAgKiByZXNlcnZlZCBtZW1vcnkgcmVnaW9uIGFuZCBzYXZlcyBhbGwgcmVnaW9uLXNwZWNpZmljIGRhdGEgdG8gdGhlXG4gICogcmVzZXJ2ZWRfbWVtIGFycmF5IHRvIGFsbG93IG9mX3Jlc2VydmVkX21lbV9sb29rdXAoKSB0byBmaW5kIGl0LlxuICAqL1xuIHN0YXRpYyB2b2lkIF9faW5pdCBmZHRfaW5pdF9yZXNlcnZlZF9tZW1fbm9kZSh1bnNpZ25lZCBsb25nIG5vZGUsIGNvbnN0IGNoYXIgKnVuYW1lLFxuLVx0XHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplKVxuK1x0XHRcdFx0XHQgICAgICBwaHlzX2FkZHJfdCBiYXNlLCBwaHlzX2FkZHJfdCBzaXplLFxuK1x0XHRcdFx0XHQgICAgICBib29sIGR5bmFtaWMpXG4ge1xuIFx0aW50IGVyciA9IDA7XG4gXHRib29sIG5vbWFwO1xuQEAgLTY1Nyw5ICs3MDksMTAgQEAgc3RhdGljIHZvaWQgX19pbml0IGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlKHVuc2lnbmVkIGxvbmcgbm9kZSwgY29uc3QgY2hhciAqdW5cbiBcdFx0cHJfaW5mbyhcIm5vZGUgJXMgY29tcGF0aWJsZSBtYXRjaGluZyBmYWlsXFxuXCIsIHJtZW0tXHUwMDNlbmFtZSk7XG4gXHRcdHJtZW0tXHUwMDNlbmFtZSA9IE5VTEw7XG4gXG4tXHRcdGlmIChub21hcClcbitcdFx0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbi1cdFx0ZWxzZVxuK1xuK1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbiBcdFx0cmV0dXJuO1xuIFx0fSBlbHNlIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmggYi9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbmluZGV4IGQ2MmRiOWU3NzZjZjkuLjI3ZDY4ZmJiMzE1NzUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21lbWJsb2NrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbWVtYmxvY2suaFxuQEAgLTE0OCw2ICsxNDgsNyBAQCBpbnQgbWVtYmxvY2tfcGh5c21lbV9hZGQocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSk7XG4gdm9pZCBtZW1ibG9ja190cmltX21lbW9yeShwaHlzX2FkZHJfdCBhbGlnbik7XG4gdW5zaWduZWQgbG9uZyBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSxcbiBcdFx0XHRcdCAgICAgcGh5c19hZGRyX3QgYmFzZTIsIHBoeXNfYWRkcl90IHNpemUyKTtcbitib29sIG1lbWJsb2NrX292ZXJsYXBzX25vbWFwKHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGJvb2wgbWVtYmxvY2tfb3ZlcmxhcHNfcmVnaW9uKHN0cnVjdCBtZW1ibG9ja190eXBlICp0eXBlLFxuIFx0XHRcdCAgICAgIHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpO1xuIGJvb2wgbWVtYmxvY2tfdmFsaWRhdGVfbnVtYV9jb3ZlcmFnZSh1bnNpZ25lZCBsb25nIHRocmVzaG9sZF9ieXRlcyk7XG5kaWZmIC0tZ2l0IGEvbW0vbWVtYmxvY2suYyBiL21tL21lbWJsb2NrLmNcbmluZGV4IDljZTg2MzQ5YTI5ZmEuLjRjYWJmZTM2NWFjNDYgMTAwNjQ0XG4tLS0gYS9tbS9tZW1ibG9jay5jXG4rKysgYi9tbS9tZW1ibG9jay5jXG5AQCAtMjAyLDYgKzIwMiwyMCBAQCBtZW1ibG9ja19hZGRyc19vdmVybGFwKHBoeXNfYWRkcl90IGJhc2UxLCBwaHlzX2FkZHJfdCBzaXplMSwgcGh5c19hZGRyX3QgYmFzZTIsXG4gXHRyZXR1cm4gKChiYXNlMSBcdTAwM2MgKGJhc2UyICsgc2l6ZTIpKSBcdTAwMjZcdTAwMjYgKGJhc2UyIFx1MDAzYyAoYmFzZTEgKyBzaXplMSkpKTtcbiB9XG4gXG4rYm9vbCBfX2luaXQgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXAocGh5c19hZGRyX3QgYmFzZSwgcGh5c19hZGRyX3Qgc2l6ZSlcbit7XG4rXHRzdHJ1Y3QgbWVtYmxvY2tfcmVnaW9uICpyZWdpb247XG4rXG4rXHRtZW1ibG9ja19jYXBfc2l6ZShiYXNlLCBcdTAwMjZzaXplKTtcbitcdGZvcl9lYWNoX21lbV9yZWdpb24ocmVnaW9uKSB7XG4rXHRcdGlmIChtZW1ibG9ja19pc19ub21hcChyZWdpb24pIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbWVtYmxvY2tfYWRkcnNfb3ZlcmxhcChiYXNlLCBzaXplLCByZWdpb24tXHUwMDNlYmFzZSwgcmVnaW9uLVx1MDAzZXNpemUpKVxuK1x0XHRcdHJldHVybiB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBib29sIF9faW5pdF9tZW1ibG9jayBtZW1ibG9ja19vdmVybGFwc19yZWdpb24oc3RydWN0IG1lbWJsb2NrX3R5cGUgKnR5cGUsXG4gXHRcdFx0XHRcdHBoeXNfYWRkcl90IGJhc2UsIHBoeXNfYWRkcl90IHNpemUpXG4ge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMThUMTA6Mjk6MTIuOTIyNTkwMTQ1WiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMDE1NDQxOTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1lbW9yeSBTYWZldHkgSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoLiBJIHNlZSBtb2RpZmljYXRpb25zIGluIGBkcml2ZXJzL29mL29mX3Jlc2VydmVkX21lbS5jYCBhbmQgYG1tL21lbWJsb2NrLmNgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBteSBhdHRlbnRpb24g4oCTIGFueXRoaW5nIHRvdWNoaW5nIG1lbW9yeSBtYW5hZ2VtZW50IG9yIERldmljZSBUcmVlIGlzIHdvcnRoIGEgY2xvc2VyIGxvb2suIFRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBhcm91bmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmVkIG1lbW9yeSBub2RlcywgdHJhY2tpbmcgdGhlbSB3aXRoIGByZXNlcnZlX2ZhaWxlZF9ub2Rlc2AsIGFuZCBwcmV2ZW50aW5nIHRoZWlyIGxhdGVyIGluaXRpYWxpemF0aW9uIGluIGBmZHRfc2Nhbl9yZXNlcnZlZF9tZW1fbGF0ZWAuIFRoZXJlJ3MgYWxzbyBhIGNoZWNrIGZvciBgbWVtYmxvY2tfb3ZlcmxhcHNfbm9tYXBgIGFuZCBzb21lIGFkanVzdG1lbnRzIHRvIGhvdyBtZW1vcnkgaXMgZnJlZWQgaW4gYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYC5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgYWx3YXlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBTbywgSSBuZWVkIHRvIHZlcmlmeSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IG5ldyByaXNrcy4gTGV0J3Mgc2VlLi4uIHRoZSBgcmVzZXJ2ZV9mYWlsZWRfbm9kZXNgIGFycmF5IGlzIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGFuZCBgX19pbml0ZGF0YWAsIHdoaWNoIG1lYW5zIGl0J3MgZ3VhcmFudGVlZCB0byBiZSB6ZXJvLWluaXRpYWxpemVkLiBUaGUgYHJlc2VydmVfZmFpbGVkX25vZGVzX2NudGAgdmFyaWFibGUgaXMgYWxzbyBgX19pbml0ZGF0YWAgYW5kIHplcm9lZC4gYHJlY29yZF9yZXNlcnZlX2ZhaWxlZF9ub2RlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBwb3B1bGF0ZXMgdGhpcyBhcnJheSwgYW5kIGByZXNlcnZlZF9tZW1fbm9kZV9yZXNlcnZlX2ZhaWxlZGAgY2hlY2tzIGl0LiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHNvIGZhci5cblxuTm93LCBsZXQncyBjb25zaWRlciB1c2VyLXNwYWNlIGV4cG9zdXJlLiBObyBuZXcgc3RydWN0dXJlcyBhcmUgYmVpbmcgZXhwb3NlZCwgYW5kIG5vIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBmaWVsZHMgYXJlIGJlaW5nIGFsbG9jYXRlZC4gVGhlIHBhdGNoIGRvZXNuJ3QgYXBwZWFyIHRvIGludHJvZHVjZSBhbnkgY2hhbmdlcyB0byBib3VuZHMgY2hlY2tzIG9yIGJ1ZmZlciBsZW5ndGhzIHRoYXQgY291bGQgbGVhZCB0byBzb21lb25lIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgaW4gZXhpc3RpbmcgYnVmZmVycy4gVGhlIGZvY3VzIGlzIGNsZWFybHkgb24gZWFybHkgYm9vdCBtZW1vcnkgcmVzZXJ2YXRpb24uXG5cblRoZSBwYXRjaCBzZWVtcyBmaW5lLiBJJ20gbm90IHNlZWluZyBhbnl0aGluZyB0aGF0IHdvdWxkIG5lY2Vzc2l0YXRlIEtNU0FOIChLZXJuZWwgTWVtb3J5IFNhbml0aXplcikuIEtBU0FOIChLZXJuZWwgQWRkcmVzcyBTYW5pdGl6ZXIpIGFuZCBzdGFuZGFyZCB0b29saW5nIGFyZSBzdWZmaWNpZW50IGZvciB0aGlzIGVhcmx5IGJvb3QgbG9naWMuIFRoZSByaXNrcyBJIHNlZSBhcmUgdGhlIHR5cGljYWwgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5UbyBiZSBleHRyYSBzdXJlLCBsZXQncyBxdWlja2x5IHJldmlldyB0aGUgYGZkdF9pbml0X3Jlc2VydmVkX21lbV9ub2RlYCBjaGFuZ2VzLiBUaGUgY29kZSBub3cgbG9va3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4tXHRcdGlmIChub21hcClcbitcdFx0aWYgKGR5bmFtaWMgXHUwMDI2XHUwMDI2IG5vbWFwKVxuIFx0XHRcdG1lbWJsb2NrX2NsZWFyX25vbWFwKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbi1cdFx0ZWxzZVxuK1xuK1x0XHRpZiAoZHluYW1pYyB8fCAhbm9tYXApXG4gXHRcdFx0bWVtYmxvY2tfcGh5c19mcmVlKHJtZW0tXHUwMDNlYmFzZSwgcm1lbS1cdTAwM2VzaXplKTtcbmBgYFxuXG5UaGlzIGp1c3QgY2hhbmdlcyB3aGVuIG1lbW9yeSBpcyBmcmVlZCBvciBoYXMgYG5vbWFwYCBjbGVhcmVkIGluIGNhc2VzIG9mIGZhaWx1cmUuIEl0IGRvZXNuJ3QgYXBwZWFyIHRvIGJlIHRvdWNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG4qKkNvbmNsdXNpb246IE5lZWRzS01TQU4gPSBmYWxzZS4qKiBUaGUgcGF0Y2ggZm9jdXNlcyBvbiBpbXByb3ZpbmcgZWFybHkgYm9vdCBEZXZpY2UgVHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIHBhcnRpY3VsYXJseSBieSB0cmFja2luZyBhbmQgaGFuZGxpbmcgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgYnkgYWRkaW5nIGEgY2hlY2sgZm9yIGBub21hcGAgb3ZlcmxhcHMuIFRoZSBjaGFuZ2VzIGRvbid0IGludHJvZHVjZSBhbnkgbmV3IHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgY29tcGxleCBhbGxvY2F0aW9ucyB3aXRoIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBTdGFuZGFyZCBLQVNBTiBpcyBzdWl0YWJsZSBmb3IgYWRkcmVzc2luZyBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgaW4gdGhpcyBhcmVhLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NzgyLCJPdXRwdXRUb2tlbnMiOjEwMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTE4VDEwOjI5OjMyLjkzODAzODQwMVoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZWFybHkgYm9vdCBkZXZpY2UgdHJlZSByZXNlcnZlZCBtZW1vcnkgbG9naWMsIGFkZGluZyB0cmFja2luZyBmb3IgZmFpbGVkIHJlc2VydmF0aW9ucyBhbmQgY2hlY2tpbmcgZm9yIG92ZXJsYXBzIHdpdGggbm9tYXAgcmVnaW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZC4gU3RhbmRhcmQgS0FTQU4gaXMgc3VmZmljaWVudCB0byBjYXRjaCBhbnkgcG90ZW50aWFsIG1lbW9yeSBjb3JydXB0aW9uIG9yIG91dC1vZi1ib3VuZHMgYnVncyBpbiB0aGlzIGNvZGUuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflow8dddz[1] Phase: Succeeded StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 10:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 10:29:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2] Phase: Succeeded StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 10:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-18 10:29:43 +0000 UTC FinishedAt: 2026-08-18 10:29:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8dddz/series-workflow8dddz-convert-artifact-1591720906/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-18 10:29:53 +0000 UTC FinishedAt: 2026-08-18 10:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-18 10:29:53 +0000 UTC FinishedAt: 2026-08-18 10:46:51 +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:*26cae0ff-c8f1-4238-96d8-3d292eebe565,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-workflow8dddz/series-workflow8dddz-convert-artifact-1591720906/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": "16a89cf5-34ca-4e44-a63f-d55a64b96cb7", "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-workflow8dddz/series-workflow8dddz-build-action-2452902840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-18 10:29:53 +0000 UTC FinishedAt: 2026-08-18 10:46:41 +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:*26cae0ff-c8f1-4238-96d8-3d292eebe565,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-workflow8dddz/series-workflow8dddz-convert-artifact-1591720906/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": "16a89cf5-34ca-4e44-a63f-d55a64b96cb7", "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-workflow8dddz/series-workflow8dddz-build-action-2452902840/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-18 10:46:51 +0000 UTC FinishedAt: 2026-08-18 10:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-18 10:46:51 +0000 UTC FinishedAt: 2026-08-18 10:46:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-18 10:46:51 +0000 UTC FinishedAt: 2026-08-18 10:47:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-18 10:46:51 +0000 UTC FinishedAt: 2026-08-18 10:46:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8dddz/series-workflow8dddz-convert-artifact-4258371685/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-18 10:47:01 +0000 UTC FinishedAt: 2026-08-18 10:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-18 10:47:01 +0000 UTC FinishedAt: 2026-08-18 10:48:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16a89cf5-34ca-4e44-a63f-d55a64b96cb7,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-workflow8dddz/series-workflow8dddz-build-action-2452902840/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-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-18 10:49:08 +0000 UTC FinishedAt: 2026-08-18 10:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-18 10:49:08 +0000 UTC FinishedAt: 2026-08-18 10:49:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-18 10:49:08 +0000 UTC FinishedAt: 2026-08-18 11:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-18 10:49:08 +0000 UTC FinishedAt: 2026-08-18 11:10:03 +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:*26cae0ff-c8f1-4238-96d8-3d292eebe565,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-workflow8dddz/series-workflow8dddz-convert-artifact-4258371685/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": "3abda4d3-f5e6-4bfa-88b2-11a23ea38f6a", "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-workflow8dddz/series-workflow8dddz-build-action-2585029809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-18 10:49:08 +0000 UTC FinishedAt: 2026-08-18 11:09:43 +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:*26cae0ff-c8f1-4238-96d8-3d292eebe565,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-workflow8dddz/series-workflow8dddz-convert-artifact-4258371685/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": "3abda4d3-f5e6-4bfa-88b2-11a23ea38f6a", "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-workflow8dddz/series-workflow8dddz-build-action-2585029809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-18 11:10:03 +0000 UTC FinishedAt: 2026-08-18 11:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-18 11:10:03 +0000 UTC FinishedAt: 2026-08-18 11:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-18 11:10:03 +0000 UTC FinishedAt: 2026-08-18 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-18 11:10:03 +0000 UTC FinishedAt: 2026-08-18 11:11: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:*3abda4d3-f5e6-4bfa-88b2-11a23ea38f6a,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-workflow8dddz/series-workflow8dddz-build-action-2585029809/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-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},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:*16a89cf5-34ca-4e44-a63f-d55a64b96cb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3abda4d3-f5e6-4bfa-88b2-11a23ea38f6a,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-workflow8dddz/series-workflow8dddz-build-action-2452902840/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-workflow8dddz/series-workflow8dddz-build-action-2585029809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 11:12:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 11:12:06 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},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-workflow8dddz/series-workflow8dddz-convert-artifact-1364162538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-18 11:12:02 +0000 UTC FinishedAt: 2026-08-18 11:12:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-18 11:12:12 +0000 UTC FinishedAt: 2026-08-18 14:15:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8dddz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["fdt_scan_reserved_mem","fdt_scan_reserved_mem_late","memblock_overlaps_nomap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"e6664f2b33db9b6811eb4cec109f06cb2b4f458d","config_name":"upstream-apparmor-kasan.config","enable_configs":["OF","OF_RESERVED_MEM","OF_EARLY_FLATTREE"],"series_id":"dd7009bd-3fcc-4f09-bf24-8b5e4ae6fda4","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-18 11:12:12 +0000 UTC FinishedAt: 2026-08-18 14:14:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*16a89cf5-34ca-4e44-a63f-d55a64b96cb7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3abda4d3-f5e6-4bfa-88b2-11a23ea38f6a,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-workflow8dddz/series-workflow8dddz-build-action-2452902840/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-workflow8dddz/series-workflow8dddz-build-action-2585029809/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-workflow8dddz/series-workflow8dddz-convert-artifact-1364162538/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,}