Name: series-workflow5vcrb Phase: Succeeded StartedAt: 2026-07-14 16:22:33 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[0] Phase: Succeeded StartedAt: 2026-07-14 16:22:33 +0000 UTC FinishedAt: 2026-07-14 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[0].run-triage Phase: Succeeded StartedAt: 2026-07-14 16:22:33 +0000 UTC FinishedAt: 2026-07-14 16:39:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY" ], "series_id": "c7190507-6348-4054-8a30-5bca4dfb97b1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "yt8824_probe", "yt8824_config_init", "yt8824_config_aneg", "yt8824_read_status", "yt8824_soft_reset", "yt8824_suspend", "yt8824_resume", "yt8824_config_intr", "yt8824_handle_interrupt", "yt8824_aneg_done", "yt8824_read_page", "yt8824_write_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6Mzc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA1MDcxNjA1YTFhMTE3YS4uZTZmOTNlZDQzNDljYWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsOSAmIzQzOzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4mIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MzsgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG5AQCAtMTIsMTIgJiM0MzsxMywxNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovXG4mIzQzOyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcbiYjNDM7XG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXHRcdDB4MDAwMDAxMGFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcdFx0MHgwMDAwMDExYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlx0XHQweDRmNTFlOTI4XG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXHRcdDB4NGY1MWU5MWJcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXHRcdDB4NGY1MWU5MWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcdFx0MHg0ZjUxZWExOVxuJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTI5LDYgJiM0MzszNCwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XG4mIzQzOyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0VVRQIE1JSVx0XHRcdHxcdEZJQkVSIE1JSVx0ICAgICAgICB8XG4mIzQzOyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdEZJQkVSIFRvcCBFeHRlbmRlZFx0fFxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqL1xuJiM0MztcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzUsNiAmIzQzOzM5MiwxMiBAQFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVx0MFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcdFx0MVxuIFxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVx0XHRcdCgweDEpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXHRcdFx0KDB4MClcbiYjNDM7I2RlZmluZSBSRUdfTUlJX01NRF9DVFJMXHRcdFx0MHgwRFxuJiM0MzsjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEFcdFx0XHQweDBFXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzkxLDggJiM0Mzs0MTQsMjkgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdCAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURURcbiBcdCAqL1xuIFx0dTggcmVnX3BhZ2U7XG4mIzQzO1x0LyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovXG4mIzQzO1x0dTggcGh5X2Jhc2VfYWRkcjtcbiYjNDM7XHQvKiB0b3AgZXh0ZW5kIHJlZyBhZGRyICovXG4mIzQzO1x0dTggdG9wX3BoeV9hZGRyO1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXMtXHUwMDNld3JpdGUoYnVzLCBwcml2LVx1MDAzZXRvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ1cy1cdTAwM2VyZWFkKGJ1cywgcHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICYjNDM7NDc1LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOlRoZSBjYWxsZXIgbXVzdCBoYXZlIHRha2VuIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOlRoZSBjYWxsZXIgbXVzdCBoYXZlIHRha2VuIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuJiM0MztcdFx0XHQgICAgICAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4mIzQzO1x0XHRcdFx0XHQgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNTIxLDYgJiM0Mzs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdCAgIHUxNiBkZXZpY2UsIHUxNiByZWcsXG4mIzQzO1x0XHRcdCAgIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfQ1RSTCwgZGV2aWNlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0RBVEEsIHJlZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X2dldF93b2woKSAtIHJlcG9ydCB3aGV0aGVyIHdha2Utb24tbGFuIGlzIGVuYWJsZWRcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTMwNTksOTkgJiM0MzszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbi1cdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFwmIzM0Oyxcbi1cdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUxMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUxMV93cml0ZV9wYWdlLFxuLVx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxuLVx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUyMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbi1cdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuLVx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuLVx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuLVx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbi1cdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuY29uZmlnX2FuZWdcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUzMV9wcm9iZSxcbi1cdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUzMV9jb25maWdfaW5pdCxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dDg1MzFfc2V0X3dvbCxcbi1cdFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbi1cdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuLVx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuLVx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuLVx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZXCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4tXHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4tXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4tXHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbi1cdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSykgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpXG4mIzQzO1x0XHRyZXR1cm4gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofigweDEpKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0XHRyZXQgPSAgeXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDAwODQsIDB4MjAwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHQvKiBpc29sYXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0IHw9IEJJVCgxMCk7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRvIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmV0cnkgPSAxMjtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdG1zbGVlcCg1MCk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHRlbXBsYXRlIHRlc3QgbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4mIzQzO1x0XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcbiYjNDM7XHRcdFx0XHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcbiYjNDM7XHRcdFx0XHQgKiAqIG9ubHkgZm9yIHJlY29yZGluZy5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmV0cnkgPSAxMjtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfkJJVCgxMCk7XG4mIzQzO1x0XHRcdC8qIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdG1zbGVlcCg1MCk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gaXNzdWUgYSBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogZm9yIGludGVybmFsIFlUODgyNFxuJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuJiM0MzsgKiAyKSB1dHAgcmVzdGFydFxuJiM0MzsgKiAzKSBkaXNhYmxlIHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbiYjNDM7ICogZm9yIGV4dGVybmFsIFlUODgyNFxuJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuJiM0MzsgKiAyKSBlbmFibGUgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogMykgdXRwIHJlc3RhcnRcbiYjNDM7ICogNCkgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXG4mIzQzOyAqIDUpIGRpc2FibGUgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGV4dGVybmFsIFlUODgyNCBpbml0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIHJlYWQgZWZ1c2UgKi9cbiYjNDM7XHRcdHZhbF8xID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdFx0aWYgKHZhbF8yIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTtcbiYjNDM7XHRcdGlmICh2YWxfMyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdFx0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSBcdTAwM2VcdTAwM2UgNik7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuJiM0MztcdFx0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpIFx1MDAzZVx1MDAzZSA0KTtcbiYjNDM7XHRcdFx0cmV0IHw9IHRtcDtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSBcdTAwM2VcdTAwM2UgMik7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuJiM0MztcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbiYjNDM7XHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAxNywgMHgyMDA3KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAwMCwgMHg5MDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGVuYWJsZSBuaWJibGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpbnRlcm5hbCBZVDg4MjQgaW5pdFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcG9ydCA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4MTkwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikge1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDAzLCAweDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NzFmLCAweDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHg4NCwgMHgyMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4OTE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgdXBkYXRlIGZvciBpbnRlcm5hbCBZVDg4MjQqL1xuJiM0MztcdFx0cHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyID0gMHg0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSAweDk7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9pbmZvKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkLCBwaHkgYmFzZSBhZGRyID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcjtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcbiYjNDM7XHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCBcdTAwMjYgKH5CSVQoNikpKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbiYjNDM7XHRcdCAqIGJpdDUgaW50cl9waHlfcHVsc2VfZW4gMSYjMzk7YjAgbGV2ZWwsIDEmIzM5O2IxIHB1bHNlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogdG9wIGV4dCByZWcgMHhhMDE4IHBoeV9wdWxzZV9sdGggYml0MTQ6OFxuJiM0MztcdFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xuJiM0MztcdFx0ICogYml0MTQ6OCBwaHlfcHVsc2VfbHRoIGJpdDg6NyB0aW1lcl90aWNrX3NlbCAgIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwN2FcdFx0IDB4MDAwMlx0XHQgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwNjRcdFx0IDB4MDAwMVx0XHQgICAgICAgICAxbXMgcHVsc2Ugd2lkdGhcbiYjNDM7XHRcdCAqIDB4MDA0ZVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwMDlcdFx0IDB4MDAwMFx0XHQgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoKGRlZmF1bHQpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHg3ZjAwO1xuJiM0MztcdFx0cmV0IHw9ICgweDAwMDkgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHgxODA7XG4mIzQzO1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuJiM0MztcdFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0NyAgUEhZMyBsaW5rIGRvd24gMTogcGh5MyBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0NCAgUEhZMCBsaW5rIGRvd24gMTogcGh5MCBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYVxuJiM0MztcdFx0ICogYml0NSBpbnRuX3dvbF9tb2RlIDEmIzM5O2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XG4mIzQzO1x0XHQgKiBiaXQ0IGludG5fbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+QklUKDUpO1xuJiM0MztcdFx0cmV0IHw9IEJJVCg0KTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2tcbiYjNDM7XHRcdCAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCB8PSAoQklUKHBvcnQgJiM0MzsgOCkgfCBCSVQocG9ydCAmIzQzOyA0KSB8IEJJVChwb3J0KSk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMWIsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuJiM0MztcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cbiYjNDM7ICogb3BlcmF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsXG4mIzQzO1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cGFnZSBcdTAwMjY9IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcbiYjNDM7XHQqbHBhID0gcmV0O1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHQqc3RhdHVzID0gcmV0O1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9ICEhKCpzdGF0dXMgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdGlmIChsaW5rIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGxpbms7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4mIzQzO1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH5CTUNSX1BET1dOO1xuJiM0MztcdHJldCBcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBwaHlfY3RybCA9IDA7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xuJiM0MztcdHUzMiBwaHlfYmFzZV9hZGRyO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0LyogZ2V0IGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgZm9yIGV4dGVybmFsIFlUODgyNCAqL1xuJiM0MztcdGlmICghZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7bW90b3Jjb21tLGJhc2UtYWRkcmVzc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZwaHlfYmFzZV9hZGRyKSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IHBoeV9iYXNlX2FkZHI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSBwcml2LVx1MDAzZXBoeV9iYXNlX2FkZHIgJiM0MzsgNDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUxMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUxMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MTFfd3JpdGVfcGFnZSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MjFfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdD0geXQ4NTIxX2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuJiM0MztcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuJiM0MztcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MzFfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dDg1MzFfc2V0X3dvbCxcbiYjNDM7XHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxuJiM0MztcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuJiM0MztcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MjFfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdD0geXQ4NTIxX2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyMSAyLjVHYnBzIFBIWVwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuJiM0MztcdFx0LmdldF93b2xcdFx0PSB5dHBoeV9nZXRfd29sLFxuJiM0MztcdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHRcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuJiM0MztcdFx0LmFuZWdfZG9uZVx0XHQ9IHl0ODgyMV9hbmVnX2RvbmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2VcdFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuIFx0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGVcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzE2MSw2ICYjNDM7NDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eXQ4ODI0X3Byb2JlJiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3l0ODgyNF9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9zdXNwZW5kJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZXN1bWUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3l0ODgyNF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9hbmVnX2RvbmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfcGFnZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfd3JpdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgWVQ4ODI0IFBIWSBJRC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmluZCB0aGUgbmV3IFBIWSBkcml2ZXIgYW5kIGV4ZWN1dGUgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzdGF0ZSBtYWNoaW5lIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTY6Mzc6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggNTA3MTYwNWExYTExN2EuLmU2ZjkzZWQ0MzQ5Y2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDkgJiM0MzsxLDEwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwpAQCAtMTIsMTIgJiM0MzsxMywxNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovCiYjNDM7I2RlZmluZSBQSFlfQkFTRV9BRERSICgxKQomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5LDYgJiM0MzszNCwxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CUZJQkVSIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlGSUJFUiBFeHRlbmRlZAkJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CUZJQkVSIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM3NSw2ICYjNDM7MzkyLDEyIEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRQkJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgUkVHX01JSV9NTURfQ1RSTAkJCTB4MEQKJiM0MzsjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEEJCQkweDBFCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTEsOCAmIzQzOzQxNCwyOSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCSAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURUQKIAkgKi8KIAl1OCByZWdfcGFnZTsKJiM0MzsJLyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovCiYjNDM7CXU4IHBoeV9iYXNlX2FkZHI7CiYjNDM7CS8qIHRvcCBleHRlbmQgcmVnIGFkZHIgKi8KJiM0MzsJdTggdG9wX3BoeV9hZGRyOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtLAomIzQzOwkJCQkgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtJmd0O21kaW8uYnVzOwomIzQzOwomIzQzOwlyZXR1cm4gYnVzLSZndDt3cml0ZShidXMsIHByaXYtJmd0O3RvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1cy0mZ3Q7cmVhZChidXMsIHByaXYtJmd0O3RvcF9waHlfYWRkciwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC00MzEsNiAmIzQzOzQ3NSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCByZWdudW0pOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkJCSB1MTYgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIHJlZ251bSwgdmFsKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qKgogICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNTIxLDYgJiM0Mzs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgIHUxNiBkZXZpY2UsIHUxNiByZWcsCiYjNDM7CQkJICAgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCByZWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCB2YWx1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC0zMDU5LDk5ICYjNDM7MzE4NywxNjIwIEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAotCQkuY29uZmlnX2luaXQJPSB5dDg1MTFfY29uZmlnX2luaXQsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKLQkJLnJlYWRfcGFnZQk9IHl0ODUxMV9yZWFkX3BhZ2UsCi0JCS53cml0ZV9wYWdlCT0geXQ4NTExX3dyaXRlX3BhZ2UsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MjEgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAotCQkuZ2V0X2ZlYXR1cmVzCT0geXQ4NTIxX2dldF9mZWF0dXJlcywKLQkJLnByb2JlCQk9IHl0ODUyMV9wcm9iZSwKLQkJLnJlYWRfcGFnZQk9IHl0ODUyMV9yZWFkX3BhZ2UsCi0JCS53cml0ZV9wYWdlCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCi0JCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKLQkJLnNldF93b2wJPSB5dHBoeV9zZXRfd29sLAotCQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCi0JCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjFfY29uZmlnX2luaXQsCi0JCS5yZWFkX3N0YXR1cwk9IHl0ODUyMV9yZWFkX3N0YXR1cywKLQkJLnNvZnRfcmVzZXQJPSB5dDg1MjFfc29mdF9yZXNldCwKLQkJLnN1c3BlbmQJPSB5dDg1MjFfc3VzcGVuZCwKLQkJLnJlc3VtZQkJPSB5dDg1MjFfcmVzdW1lLAotCQkubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLAotCQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKLQkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXQmIzM0OywKLQkJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjJfY29uZmlnX2luaXQsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKLQl9LAotCXsKLQkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLAotCQkubmFtZQkJPSAmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCi0JCS5wcm9iZQkJPSB5dDg1MzFfcHJvYmUsCi0JCS5jb25maWdfaW5pdAk9IHl0ODUzMV9jb25maWdfaW5pdCwKLQkJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKLQkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAotCQkuZ2V0X3dvbAk9IHl0cGh5X2dldF93b2wsCi0JCS5zZXRfd29sCT0geXQ4NTMxX3NldF93b2wsCi0JCS5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LAotCQkubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLAotCQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKLQkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksCi0JCS5uYW1lCQk9ICYjMzQ7WVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0JiMzNDssCi0JCS5nZXRfZmVhdHVyZXMJPSB5dDg1MjFfZ2V0X2ZlYXR1cmVzLAotCQkucHJvYmUJCT0geXQ4NTIxX3Byb2JlLAotCQkucmVhZF9wYWdlCT0geXQ4NTIxX3JlYWRfcGFnZSwKLQkJLndyaXRlX3BhZ2UJPSB5dDg1MjFfd3JpdGVfcGFnZSwKLQkJLmdldF93b2wJPSB5dHBoeV9nZXRfd29sLAotCQkuc2V0X3dvbAk9IHl0cGh5X3NldF93b2wsCi0JCS5jb25maWdfYW5lZwk9IHl0ODUyMV9jb25maWdfYW5lZywKLQkJLmFuZWdfZG9uZQk9IHl0ODUyMV9hbmVnX2RvbmUsCi0JCS5jb25maWdfaW5pdAk9IHl0ODUyMV9jb25maWdfaW5pdCwKLQkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAotCQkuc29mdF9yZXNldAk9IHl0ODUyMV9zb2Z0X3Jlc2V0LAotCQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAotCQkucmVzdW1lCQk9IHl0ODUyMV9yZXN1bWUsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSwKLQkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZJiMzNDssCi0JCS5nZXRfZmVhdHVyZXMJCT0geXQ4ODIxX2dldF9mZWF0dXJlcywKLQkJLnJlYWRfcGFnZQkJPSB5dDg1MjFfcmVhZF9wYWdlLAotCQkud3JpdGVfcGFnZQkJPSB5dDg1MjFfd3JpdGVfcGFnZSwKLQkJLmdldF93b2wJCT0geXRwaHlfZ2V0X3dvbCwKLQkJLnNldF93b2wJCT0geXRwaHlfc2V0X3dvbCwKLQkJLmNvbmZpZ19hbmVnCQk9IGdlbnBoeV9jb25maWdfYW5lZywKLQkJLmFuZWdfZG9uZQkJPSB5dDg4MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJCT0geXQ4ODIxX2NvbmZpZ19pbml0LAotCQkuZ2V0X3JhdGVfbWF0Y2hpbmcJPSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsCi0JCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjFfcmVhZF9zdGF0dXMsCi0JCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyMV9zb2Z0X3Jlc2V0LAotCQkuc3VzcGVuZAkJPSB5dDg4MjFfc3VzcGVuZCwKLQkJLnJlc3VtZQkJCT0geXQ4ODIxX3Jlc3VtZSwKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwomIzQzOwlpZiAoKG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0spID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKQomIzQzOwkJcmV0dXJuIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFOwomIzQzOwomIzQzOwlyZXR1cm4gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofigweDEpKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKG9sZF9wYWdlICZndDs9IDApIHsKJiM0MzsJCWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7CiYjNDM7CQkJcmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlpZiAob2xkX3BhZ2UgJmd0Oz0gMCkgewomIzQzOwkJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQkvKiBpc29sYXRpb24gKi8KJiM0MzsJCQlyZXQgfD0gQklUKDEwKTsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkbyBZVDg4MjQgVVRQIHNvZnRyZXNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZXRyeSA9IDEyOwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChvbGRfcGFnZSAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZG8gewomIzQzOwkJCQltc2xlZXAoNTApOwomIzQzOwkJCQlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQl9IHdoaWxlICgocmV0ICZhbXA7IEJNQ1JfUkVTRVQpICZhbXA7JmFtcDsgLS1yZXRyeSk7CiYjNDM7CQkJaWYgKHJldCAmYW1wOyBCTUNSX1JFU0VUKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkaXNhYmxlIFlUODgyNCB0ZW1wbGF0ZSB0ZXN0IG1vZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkJIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChvbGRfcGFnZSAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDAwODQsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikgewomIzQzOwkJCQkvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbiwKJiM0MzsJCQkJICogKiBvbmx5IGZvciByZWNvcmRpbmcuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7CiYjNDM7CQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHJldHJ5ID0gMTI7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKG9sZF9wYWdlICZndDs9IDApIHsKJiM0MzsJCWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCQlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJLyogZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCQlyZXQgJmFtcDs9IH5CSVQoMTApOwomIzQzOwkJCS8qIHNvZnQgcmVzZXQgKi8KJiM0MzsJCQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCWRvIHsKJiM0MzsJCQkJbXNsZWVwKDUwKTsKJiM0MzsJCQkJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJCQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJfSB3aGlsZSAoKHJldCAmYW1wOyBCTUNSX1JFU0VUKSAmYW1wOyZhbXA7IC0tcmV0cnkpOwomIzQzOwkJCWlmIChyZXQgJmFtcDsgQk1DUl9SRVNFVCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBpc3N1ZSBhIFBIWSBzb2Z0d2FyZSByZXNldAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBmb3IgaW50ZXJuYWwgWVQ4ODI0CiYjNDM7ICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGUKJiM0MzsgKiAyKSB1dHAgcmVzdGFydAomIzQzOyAqIDMpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZQomIzQzOyAqIGZvciBleHRlcm5hbCBZVDg4MjQKJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZQomIzQzOyAqIDIpIGVuYWJsZSBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIDMpIHV0cCByZXN0YXJ0CiYjNDM7ICogNCkgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlCiYjNDM7ICogNSkgZGlzYWJsZSBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBzb2Z0IHJlc2V0ICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZXh0ZXJuYWwgWVQ4ODI0IGluaXQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7CiYjNDM7CXUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwcml2LSZndDtwaHlfYmFzZV9hZGRyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJCXZhbF8xID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CQlpZiAodmFsXzEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8yID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZik7CiYjNDM7CQlpZiAodmFsXzIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CQlpZiAodmFsXzMgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCWlmIChwb3J0ID09IDApIHsKJiM0MzsJCQkvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogYW5hbG9nIENEUiAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJCXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSAmZ3Q7Jmd0OyA2KTsKJiM0MzsJCQlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCgxKSB8IEJJVCgwKSk7CiYjNDM7CQkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpICZndDsmZ3Q7IDQpOwomIzQzOwkJCXJldCB8PSB0bXA7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCgxMykgfCBCSVQoMTIpKTsKJiM0MzsJCQl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIExETyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwkJCXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSAmZ3Q7Jmd0OyAyKTsKJiM0MzsJCQlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyA0KTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CQkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpICZndDsmZ3Q7IDUpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyAmZ3Q7IDggKi8KJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDE3LCAweDIwMDcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4OTAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJLyogcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4MTkwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXphdGlvbiB1dHAgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNzFmLCAweDAwMzYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZjLCAweDE4MTgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBFTUMgUkUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGludGVybmFsIFlUODgyNCBpbml0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcG9ydCA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXBvcnQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHByaXYtJmd0O3BoeV9iYXNlX2FkZHI7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4MTkwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikgewomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDAzLCAweDMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRlMiwgMHgxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMCB0ZW1wYXRlIE1BVSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MjAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIHVwZGF0ZSBmb3IgaW50ZXJuYWwgWVQ4ODI0Ki8KJiM0MzsJCXByaXYtJmd0O3BoeV9iYXNlX2FkZHIgPSAweDQ7CiYjNDM7CQlwcml2LSZndDt0b3BfcGh5X2FkZHIgPSAweDk7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LAomIzQzOwkJICAgICYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkLCBwaHkgYmFzZSBhZGRyID0gJWRcbiYjMzQ7LAomIzQzOwkJICAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgcHJpdi0mZ3Q7cGh5X2Jhc2VfYWRkcik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwcml2LSZndDtwaHlfYmFzZV9hZGRyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMDAKJiM0MzsJCSAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0ICZhbXA7ICh+QklUKDYpKSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMTkKJiM0MzsJCSAqIGJpdDUgaW50cl9waHlfcHVsc2VfZW4gMSYjMzk7YjAgbGV2ZWwsIDEmIzM5O2IxIHB1bHNlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjgKJiM0MzsJCSAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjcKJiM0MzsJCSAqIGJpdDE0OjggcGh5X3B1bHNlX2x0aCBiaXQ4OjcgdGltZXJfdGlja19zZWwgICBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDdhCQkgMHgwMDAyCQkgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNjQJCSAweDAwMDEJCSAgICAgICAgIDFtcyBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDRlCQkgMHgwMDAwCQkgICAgICAgICAxMDBtcyBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDA5CQkgMHgwMDAwCQkgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoKGRlZmF1bHQpCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfjB4N2YwMDsKJiM0MzsJCXJldCB8PSAoMHgwMDA5ICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+MHgxODA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwMCAmbHQ7Jmx0OyA3KTsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJCSAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0MTAgUEhZMiBpbnRlcnJ1cHQgMTogcGh5MiBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxYQomIzQzOwkJICogYml0NSBpbnRuX3dvbF9tb2RlIDEmIzM5O2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0CiYjNDM7CQkgKiBiaXQ0IGludG5fbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0CiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfkJJVCg1KTsKJiM0MzsJCXJldCB8PSBCSVQoNCk7CiYjNDM7CQlyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMWEsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2sKJiM0MzsJCSAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKgomIzQzOwkJICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0IHw9IChCSVQocG9ydCAmIzQzOyA4KSB8IEJJVChwb3J0ICYjNDM7IDQpIHwgQklUKHBvcnQpKTsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYiwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpICZhbXA7CiYjNDM7CQkJICAgICBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LCAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxuJiMzNDssCiYjNDM7CQkgICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyLCBsaW5rKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0bwomIzQzOyAqIG9wZXJhdGUuCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsCiYjNDM7CQkJCSAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwYWdlICZhbXA7PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7CiYjNDM7CSpscGEgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSAhISgqc3RhdHVzICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgbGluazsKJiM0MzsJaW50IGxwYTsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7c3BlZWQgPSBTUEVFRF9VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwomIzQzOwlsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCVlUODgyNF9SU1NSX1VUUF9TUEFDRSwgJmFtcDt2YWwsICZhbXA7bHBhKTsKJiM0MzsJaWYgKGxpbmsgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGxpbms7CiYjNDM7CiYjNDM7CWlmIChsaW5rKSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAxOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9ICEhKGxwYSAmYW1wOyBCSVQoMTApKTsKJiM0MzsJCXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9ICEhKGxwYSAmYW1wOyBCSVQoMTEpKTsKJiM0MzsKJiM0MzsJCS8qIHVwZGF0ZSBzcGVlZCAmYW1wOyBkdXBsZXggKi8KJiM0MzsJCXl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O3BhdXNlID0gMDsKJiM0MzsJCXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gRFVQTEVYX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJICAgICAgIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9QRE9XTjsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwLCBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHBoeV9jdHJsID0gMDsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJICAgICAgcGh5ZGV2LSZndDthZHZlcnRpc2luZykpCiYjNDM7CQlwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLAomIzQzOwkJCQkgICAgIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjsKJiM0MzsJdTMyIHBoeV9iYXNlX2FkZHI7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CS8qIGdldCBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIGZvciBleHRlcm5hbCBZVDg4MjQgKi8KJiM0MzsJaWYgKCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O21vdG9yY29tbSxiYXNlLWFkZHJlc3MmIzM0OywKJiM0MzsJCQkJICAgICAgJmFtcDtwaHlfYmFzZV9hZGRyKSkKJiM0MzsJCXByaXYtJmd0O3BoeV9iYXNlX2FkZHIgPSBwaHlfYmFzZV9hZGRyOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dG9wX3BoeV9hZGRyID0gcHJpdi0mZ3Q7cGh5X2Jhc2VfYWRkciAmIzQzOyA0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUxMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MTFfY29uZmlnX2luaXQsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwkJLnJlYWRfcGFnZQk9IHl0ODUxMV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQk9IHl0ODUxMV93cml0ZV9wYWdlLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUyMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCT0geXQ4NTIxX2dldF9mZWF0dXJlcywKJiM0MzsJCS5wcm9iZQkJPSB5dDg1MjFfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlCT0geXQ4NTIxX3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCiYjNDM7CQkuZ2V0X3dvbAk9IHl0cGh5X2dldF93b2wsCiYjNDM7CQkuc2V0X3dvbAk9IHl0cGh5X3NldF93b2wsCiYjNDM7CQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCT0geXQ4NTIxX2FuZWdfZG9uZSwKJiM0MzsJCS5jb25maWdfaW5pdAk9IHl0ODUyMV9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwk9IHl0ODUyMV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CT0geXQ4NTIxX3NvZnRfcmVzZXQsCiYjNDM7CQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSB5dDg1MjFfcmVzdW1lLAomIzQzOwkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCwKJiM0MzsJCS5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LAomIzQzOwkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSwKJiM0MzsJCS5uYW1lCQk9ICYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MjJfY29uZmlnX2luaXQsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkucHJvYmUJCT0geXQ4NTMxX3Byb2JlLAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTMxX2NvbmZpZ19pbml0LAomIzQzOwkJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKJiM0MzsJCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKJiM0MzsJCS5zZXRfd29sCT0geXQ4NTMxX3NldF93b2wsCiYjNDM7CQkubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSwKJiM0MzsJCS5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKJiM0MzsJCS5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLAomIzQzOwkJLm5hbWUJCT0gJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5nZXRfZmVhdHVyZXMJPSB5dDg1MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnByb2JlCQk9IHl0ODUyMV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UJPSB5dDg1MjFfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJPSB5dDg1MjFfd3JpdGVfcGFnZSwKJiM0MzsJCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKJiM0MzsJCS5zZXRfd29sCT0geXRwaHlfc2V0X3dvbCwKJiM0MzsJCS5jb25maWdfYW5lZwk9IHl0ODUyMV9jb25maWdfYW5lZywKJiM0MzsJCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTIxX2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAomIzQzOwkJLnNvZnRfcmVzZXQJPSB5dDg1MjFfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCT0geXQ4NTIxX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQk9IHl0ODUyMV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSwKJiM0MzsJCS5uYW1lCQkJPSAmIzM0O1lUODgyMSAyLjVHYnBzIFBIWSYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg1MjFfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCiYjNDM7CQkuZ2V0X3dvbAkJPSB5dHBoeV9nZXRfd29sLAomIzQzOwkJLnNldF93b2wJCT0geXRwaHlfc2V0X3dvbCwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyMV9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODIxX2NvbmZpZ19pbml0LAomIzQzOwkJLmdldF9yYXRlX21hdGNoaW5nCT0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyMV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyMV9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjFfcmVzdW1lLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHl0ODgyMV9nZXRfZmVhdHVyZXMsCiYjNDM7CQkucmVhZF9wYWdlCQk9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQkJPSB5dDg4MjRfd3JpdGVfcGFnZSwKJiM0MzsJCS5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLAomIzQzOwkJLmhhbmRsZV9pbnRlcnJ1cHQJPSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5wcm9iZQkJICAgICAgICA9IHl0ODgyNF9wcm9iZSwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSB5dDg4MjRfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODI0X2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyNF9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODI0X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjRfcmVzdW1lLAogCX0sCiB9OwogCiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtQZXRlciBHZWlzJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O0ZyYW5rJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtLeWxlJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0gewpAQCAtMzE2MSw2ICYjNDM7NDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0gewogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sCiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sCiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSwKJiM0MzsJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0KIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXcgUEhZIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBDbGVhcmx5LCB0aGlzIGlzIGEgZmFpcmx5IHN1YnN0YW50aWFsIGFkZGl0aW9uLCB3aXRoIGEgbG90IG9mIGNvZGUgZm9yIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgcmVzZXQsIGFuZCBpbml0aWFsaXphdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBhIFBIWSBkcml2ZXIuIFRoZSBZVDg4MjQgaXMgYSBNb3RvcmNvbW0gcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZLCBoYXJkd2FyZS1zcGVjaWZpYywgb2YgY291cnNlLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgZXhlY3V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGlzIHdoZXJlIGEgbG90IG9mIG15IGRlYnVnZ2luZyBoYXBwZW5zLiBOb3JtYWxseSwgd2l0aCBQSFkgZHJpdmVycywgeW914oCZcmUgc3R1Y2sgd2l0aCB0aGUgaGFyZHdhcmUsIG9yIHlvdSBuZWVkIHNvbWUga2luZCBvZiBNRElPIGJ1cyBlbXVsYXRpb24gdG8gZXZlbiBnZXQgdGhlIGRyaXZlciBsb2FkZWQuIFlvdSYjMzk7ZCBuZWVkIGEgd2F5IHRvIGVtdWxhdGUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBMaW51eCBQSFkgZHJpdmVycyBiaW5kIHRvIE1ESU8gZGV2aWNlcyBiYXNlZCBvbiB0aGVpciBQSFkgSUQuCgpDYW4gSSBpbnN0YW50aWF0ZSB0aGlzIGRyaXZlciB0aHJvdWdoIHNvZnR3YXJlLCB3aXRob3V0IHRoZSBhY3R1YWwgWVQ4ODI0IHByZXNlbnQ/IE1vc3QgbGlrZWx5IG5vdCBkaXJlY3RseS4gSSYjMzk7dmUgdXNlZCBgbWFjYmAgYW5kIG90aGVyIGVtdWxhdGVkIE5JQ3MgYmVmb3JlLCBidXQgdGhleSB1c3VhbGx5IGNvbWUgd2l0aCB0aGVpciBvd24gcHJlLWNvbmZpZ3VyZWQgb3IgZ2VuZXJpYyBQSFlzLiBJIHN0YXJ0IHRoaW5raW5nIG9mIHdheXMgdG8gZ2V0IGF0IHRoaXMgY29kZS4uLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmljayB1cCBpdHMgc2xlZXZlIGZvciBpbmplY3RpbmcgTURJTyBkZXZpY2VzLCBvciBtYXliZSBpdCBjYW4gdXNlIGBmYWtlZGV2YCBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcz8gTmFoLCBzeXprYWxsZXLigJlzIG5vdCB1c3VhbGx5IGluIHRoZSBidXNpbmVzcyBvZiBmdWxsIE1ESU8gUEhZIGVtdWxhdGlvbiwgdW5sZXNzIHRoZXJlIGlzIGEgY3VzdG9tIHZpcnR1YWwgTURJTyBkcml2ZXIuCgpPa2F5LCBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyB2aXJ0dWFsIE1ESU8gZHJpdmVyIHNvbWV3aGVyZSBpbiB0aGUga2VybmVsLiBNYXliZSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJiMzOTtkIGJldHRlciBjaGVjayBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFVzZXJzcGFjZSBDb250cm9sIG9mIFBIWSBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBwcmFjdGljYWwgbWV0aG9kIHRvIGludGVyYWN0IHdpdGggUEhZIGRyaXZlcnMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIEl0JiMzOTtzIHNvbWV0aGluZyBJJiMzOTt2ZSBjb25zaWRlcmVkIGJlZm9yZSwgYW5kIEkgc2VlbSB0byByZWNhbGwgY2VydGFpbiBzY2VuYXJpb3Mgd2hlcmUgdXNlcnNwYWNlIGNhbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgY2FzZXMgdXNpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBvciBzaW1pbGFyIG9uZXMsIHJpZ2h0PyBIb3dldmVyLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSB3aGF0IEkgYW0gbG9va2luZyBmb3IuCgpOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIGZpbGUuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBzeXNmcyBvciBuZXRsaW5rIGludGVyZmFjZSBleHBvc2VkIHRoZXJlLCBhbHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgZHVyaW5nIGJvb3QgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIG9yIGJ5IFBDSSBkZXZpY2VzIHJlZ2lzdGVyaW5nIE1ESU8gYnVzZXMuCgpJJiMzOTttIHdvbmRlcmluZy4uLiBJcyB0aGVyZSBzdWNoIGEgdGhpbmcgYXMgYSB2aXJ0dWFsIE1ESU8gYnVzPyBJZiBzbywgdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGVuYWJsZXIuIFRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJiMzOTtsbCBzZWFyY2ggdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgYW55IG9jY3VycmVuY2VzIG9mICYjMzQ7bWRpbyYjMzQ7IGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0dWFsLiptZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw9MTc9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTE5LSAgICBlbnVtOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbDoyMDogICAgICAtIHZpcnR1YWwsbWRpby1ncGlvXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTIxLSAgICAgIC0gbWljcm9jaGlwLG1kaW8tc21pMFxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw9NDE9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00Ny0gICAgbWRpbzA6IG1kaW8ge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbDo0ODogICAgICBjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTQ5LSAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzPTE1Mj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktZGxpbmstZG5zLTMxMy5kdHM6MTUzOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzLTE1NC1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMTBiLmR0cz02Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzOjY4Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMTBiLmR0cy02OS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cz02Nj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIyMGIuZHRzOjY3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cy02OC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5zMjUwMi5kdHM9MzI9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5zMjUwMi5kdHM6MzM6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cy0zNC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM9NTk9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM6NjA6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktcnV0MXh4LmR0cy02MS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cz03MT1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc2w5MzUxMnIuZHRzOjcyOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cy03My1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cz01Nj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc3EyMDEuZHRzOjU3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cy01OC1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNzaTEzMjguZHRzPTMyPVx0bWRpbzA6IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0czozMzpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0cy0zNC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cz01Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktdmVyYmF0aW0tczA4djE5MDEtZDEuZHRzOjU4Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cy01OS1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDExMS5kdHM9NzE9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDExMS5kdHM6NzI6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cy03My1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM9NzA9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM6NzE6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMjIyLmR0cy03Mi1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cz0xNjM9XHRtZGlvX2dwaW86IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktcmR1MS5kdHM6MTY0Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cy0xNjUtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NTEtemlpLXNjdTItbWV6ei5kdHM9NDA9XHRtZGlvX2dwaW86IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0czo0MTpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0cy00Mi1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cS1ieDUwdjMuZHRzaT05Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2k6OTg6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2ktOTktXHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzIgNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBtZGMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxZGwtemlpLXJkdTIuZHRzaT0xOT1cdG1kaW8xOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpOjIwOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxZGwtemlpLXJkdTIuZHRzaS0yMS1cdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHM9NTM9XHRtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHM6NTQ6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHMtNTUtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM9NTU9XHRtZGlvMDogbWRpby0wIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHMtNTYtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzOjU3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzLTU4LVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNnFjb21fcGlubXV4IDEgR1BJT19BQ1RJVkVfSElHSFx1MDAzZSxcbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzPTE4MD1cdG1kaW8xOiBtZGlvLTEge1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODEtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzOjE4MjpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODMtXHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2cWNvbV9waW5tdXggMTEgR1BJT19BQ1RJVkVfSElHSFx1MDAzZSxcbi0tXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzPTExOD1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxMzNjLXByaWhtYi5kdHM6MTE5Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzLTEyMC1cdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM9Mzg9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWMuZHRzOjM5Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWMuZHRzLTQwLVx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFsLmR0c2k9NDQ9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaTo0NTpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFsLmR0c2ktNDYtXHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXEtemlpLXVsdHJhLmR0c2k9MTg9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXEtemlpLXVsdHJhLmR0c2k6MTk6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaS0yMC1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjE5ODpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OywgfSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMTk5LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCxtZGlvLXNtaTBcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbXVsYXRpbmcgYSBQSFkgRGV2aWNlIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHRlc3QgdGhlIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIuIFRoZSBjaGFsbGVuZ2UgaXMsIGhvdyBkbyBJIGdldCB0aGUga2VybmVsIHRvIGxvYWQgaXQgd2l0aG91dCBhbiBhY3R1YWwgUEhZIGRldmljZT8gSG1tLCBgbWRpby1ncGlvYCBpcyBhIGJpdC1iYW5naW5nIGRyaXZlciwgc28gdGhhdCYjMzk7cyBvdXQuIENhbiBJIHNvbWVob3cgZW11bGF0ZSBhIFBIWSBpbiBzb2Z0d2FyZT8gYG1hYzgwMjExX2h3c2ltYCwgYGR1bW15YCwgYG5ldGRldnNpbWAsIGB0dW5gL2B0YXBgLCBgdmV0aGAg4oCTIG5vbmUgb2YgdGhvc2Ugc2VlbSB0byBoYXZlIGFueXRoaW5nIFBIWS1yZWxhdGVkLgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgYHVzYm5ldGA/IFNvbWUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKmRvKiBoYXZlIFBIWXMhIEFuZCwgY3J1Y2lhbCBwb2ludCwgc3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgYGR1bW15X2hjZGAuCgpUaGUgaWRlYSBpczogaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0ICpleHBvc2VzKiBhbiBNRElPIGJ1cywgdGhlbiBpdCBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgUEhZIElEcy4gVGhlIGtlcm5lbCBzaG91bGQgdGhlbiBiaW5kIHRoZSBjb3JyZXNwb25kaW5nIFBIWSBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBtb3RvcmNvbW1gIGRyaXZlciEKCkxldCYjMzk7cyBzZWUuIEFyZSB0aGVyZSBhbnkgVVNCIG5ldHdvcmsgZHJpdmVycyB0aGF0IHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBsZXQgdGhlIGRldmljZSBzcGVjaWZ5IHRoZSBQSFkgSUQsIG9yIGF0IGxlYXN0IHNjYW4gdGhlIGJ1cz8gQmluZ28hIExvb2tzIGxpa2UgYHNtc2M5NXh4YCwgYGFzaXhgLCBgcjgxNTJgLCBgbGFuNzh4eGAsIG1heWJlIGV2ZW4gYGNkY19ldGhlcmAsIGFuZCBgYXg4ODE3OV8xNzhhYC4KCkFoYSEgU28sIGlmIGEgVVNCIGRldmljZSBleHBvc2VzIGFuIE1ESU8gYnVzLCB0aGUga2VybmVsIHdpbGwgcHJvYmUgdGhhdCBidXMuIFRoZSBVU0IgZGV2aWNlICh3aGljaCBzeXprYWxsZXIgd2lsbCBlbXVsYXRlKSBjYW4gdGhlbiAqcmVzcG9uZCogdG8gdGhvc2UgTURJTyByZWFkIHJlcXVlc3RzIOKAkyBzcGVjaWZpY2FsbHksIGZvciByZWdpc3RlcnMgMiBhbmQgMywgd2hpY2ggY29udGFpbiB0aGUgUEhZIElEIOKAkyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBrZXJuZWwgKnNob3VsZCogbG9hZCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYW5kIHNvIG9uLgoKTm93LCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpyZWFjaCogTURJTyB0aHJvdWdoIFVTQj8gU3l6a2FsbGVyIGhhcyBVU0IgZnV6emluZyAoYHN5el91c2JfY29ubmVjdGApLiBJdCBjYW4gZGVmaW5pdGVseSBlbXVsYXRlIGEgVVNCIGRldmljZS4gSWYgSSBtYWtlIGl0IGVtdWxhdGUgYSBVU0IgZGV2aWNlIHRoYXQgdXNlcyBhIGRyaXZlciBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgb3IgYGFzaXhgLCB0aG9zZSBkcml2ZXJzICpyZWdpc3RlciogYW4gTURJTyBidXMuIFdoZW4gdGhlIE1ESU8gYnVzIGdldHMgc2Nhbm5lZCwgdGhlIGRyaXZlciBoYXMgdG8gdHJhbnNsYXRlIE1ESU8gcmVhZHMgaW50byBVU0IgY29udHJvbCBtZXNzYWdlcy4gU3l6a2FsbGVyIHNob3VsZCBpbnRlcmNlcHQgdGhvc2UgVVNCIGNvbnRyb2wgbWVzc2FnZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBwZXJmZWN0IG9wcG9ydHVuaXR5IHRvIHJldHVybiB0aGUgY3VzdG9tIFBIWSBJRC4KCk9rYXksIG5vdyBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYGxhbjc4eHhgIG9yIGBzbXNjOTV4eGAgKmRvZXMqIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCB3ZSYjMzk7cmUgaW4gYnVzaW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwOTE9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFlUODgyNCBQSFkgRHJpdmVyIHZpYSBVU0IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGV4Y2l0aW5nLiBJJiMzOTt2ZSBnb3QgdGhpcyBmaWd1cmVkIG91dDogYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBgYXNpeGAsIGFuZCBgYXg4ODE3MmFgIOKAkyB0aGV5IGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCBNRElPIGJ1cywgd2hlbiByZWdpc3RlcmVkLCBnZXRzIHNjYW5uZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggcmVhZHMgUEhZIHJlZ2lzdGVycyAyIGFuZCAzIHRvIGdyYWIgdGhlIFBIWSBJRC4gVGhlIFVTQiBkcml2ZXIgY2xldmVybHkgdHJhbnNsYXRlcyB0aG9zZSBNRElPIHJlYWRzIGludG8gVVNCIGNvbnRyb2wgdHJhbnNmZXJzLiBUaGlzIG1lYW5zIHRoYXQgU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKmNhbiogcmVzcG9uZCB0byB0aG9zZSBjb250cm9sIHRyYW5zZmVycyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gdGhlIGtlcm5lbCB3aWxsLCBubyBxdWVzdGlvbiwgaW5zdGFudGlhdGUgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIGFuZCBjYWxsIGl0cyBtZXRob2RzLiBUaGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNvbWUgdGFyZ2V0ZWQgVVNCIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGludHJvZHVjZWQsIGFuZCB3aGF0IHdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYFlUODgyNGAgUEhZLiBJIGNhbiBzZWUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZDoKCiogICBgeXQ4ODI0X3JlYWRfcGFnZWAKKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldGAKKiAgIGB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWRgCiogICBgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkYAoqICAgYHl0ODgyNF9jb25maWdfaW5pdGAKKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgCiogICBgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgeXQ4ODI0X2FuZWdfZG9uZWAKKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWRgCiogICBgeXQ4ODI0X3JlYWRfc3RhdHVzYAoqICAgYHl0ODgyNF91dHBfcG93ZXJfb25gCiogICBgeXQ4ODI0X3V0cF9wb3dlcl9kb3duYAoqICAgYHl0ODgyNF9wb3dlcl9vbmAKKiAgIGB5dDg4MjRfcmVzdW1lYAoqICAgYHl0ODgyNF9wb3dlcl9kb3duYAoqICAgYHl0ODgyNF9zdXNwZW5kYAoqICAgYHl0ODgyNF9jb25maWdfYW5lZ2AKKiAgIGB5dDg4MjRfcHJvYmVgCgpBbHNvLCBzb21lIGhlbHBlciBmdW5jdGlvbnMgZ290IGFkZGVkOgoKKiAgIGB5dHBoeV90b3Bfd3JpdGVgCiogICBgeXRwaHlfdG9wX3JlYWRgCiogICBgeXRwaHlfcmVhZF90b3BfZXh0YAoqICAgYHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2tgCiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dGAKKiAgIGB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9ja2AKKiAgIGB5dHBoeV93cml0ZV9tbWRgCgpCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgUEhZIGRyaXZlciBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYHl0ODgyNF9wcm9iZWAKKiAgIGB5dDg4MjRfY29uZmlnX2luaXRgCiogICBgeXQ4ODI0X2NvbmZpZ19hbmVnYAoqICAgYHl0ODgyNF9yZWFkX3N0YXR1c2AKKiAgIGB5dDg4MjRfc29mdF9yZXNldGAKKiAgIGB5dDg4MjRfc3VzcGVuZGAKKiAgIGB5dDg4MjRfcmVzdW1lYAoqICAgYHl0ODgyNF9jb25maWdfaW50cmAKKiAgIGB5dDg4MjRfaGFuZGxlX2ludGVycnVwdGAKKiAgIGB5dDg4MjRfYW5lZ19kb25lYAoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQuIFRoZSBmaWxlIGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGVuYWJsZXMgdGhpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQb3RlbnRpYWwgTG9jYXRpb246IEludmVzdGlnYXRpbmcgdGhlIFBIWSBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIFBIWSBjb25maWd1cmF0aW9uLiBJIGluaXRpYWxseSBoYWQgYSBodW5jaCwgYnV0IGl0JiMzOTtzIG5vdCBxdWl0ZSB3b3JraW5nIG91dCB0aGUgd2F5IEkgdGhvdWdodC4gSW5zdGVhZCBvZiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBQSFkgZHJpdmVycywgYW5kIHRoZSBNYWtlZmlsZSBzaG91bGQsIGF0IGEgbWluaW11bSwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhvc2UgZHJpdmVycyBhcmUgYnVpbHQgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHRoZSBhbnN3ZXIgZGlyZWN0bHkgaW4gdGhlIE1ha2VmaWxlIG9yIGF0IGxlYXN0IGEgcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIG9yIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdG9yY29tbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODI9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXHQmIzQzOz0gbXNjYy9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcdCYjNDM7PSBtb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTg0LW9iai0kKENPTkZJR19OQVRJT05BTF9QSFkpXHQmIzQzOz0gbmF0aW9uYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtJiMzOTtzIGhpZ2hsaWdodGluZyBgQ09ORklHX01PVE9SQ09NTV9QSFlgLiBSaWdodCwgdGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgTW90b3JDb21tIFBIWSwgbGlrZWx5IGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gR2l2ZW4gdGhhdCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSByZWxhdGVkIHRvIG5ldHdvcmsgUEhZIGRyaXZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgbG9jYXRlIHRoZSBkZWZpbml0aW9uIGZvciBgTU9UT1JDT01NX1BIWWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgaGFyZHdhcmUgaXRzZWxmIG9yIHBvc3NpYmx5IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoaXMgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU9UT1JDT01NX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMzOD1jb25maWcgTUlDUk9TRU1JX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM0Ni1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM0Nzpjb25maWcgTU9UT1JDT01NX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ4LVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFBIWXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NDYKCQkJCQkJCW91dHB1dDogMjY4CgkJCQkJCQl0aG91Z2h0czogOTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBZVDg4MjQgUEhZIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byByZWFjaCB0aGlzIG5ldyBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIgY29kZS4gVGhlIHBhdGNoIGl0c2VsZiBvbmx5IHRvdWNoZXMgYG1vdG9yY29tbS5jYCwgc28gSSYjMzk7bSB0aGlua2luZyB0aGUgYE1PVE9SQ09NTV9QSFlgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgbmV3IG9uZSBuZWVkZWQuIFNpbmNlIHRoZSBnb2FsIGlzIHRvIHJlYWNoIHRoaXMgdGhyb3VnaCBVU0IgbmV0d29yayBkcml2ZXJzLCBsaWtlIGBVU0JfTEFONzhYWGAgb3IgYFVTQl9ORVRfU01TQzk1WFhgLCBJIHRoaW5rIHRob3NlIGFyZSBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyJiMzOTtzIGRlZmF1bHRzLiBTbywgSSYjMzk7bGwgc3RhcnQgd2l0aCBqdXN0IHNwZWNpZnlpbmcgYE1PVE9SQ09NTV9QSFlgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlkZW50aWZ5aW5nIHJlYWNoYWJsZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhY2Nlc3NpYmxlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGAuaGFuZGxlX2ludGVycnVwdGAuIFRoZSBQSFkgZnJhbWV3b3JrIGNhbGxzIHRoaXMgd2hlbiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQuIElmIEkgY2FuIHRyaWdnZXIgUEhZIGludGVycnVwdHMg4oCTIG1heWJlIHRocm91Z2ggZmFrZWRldiBvciBVU0IgaW50ZXJydXB0IGVuZHBvaW50cyDigJMgdGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIGhpdCB0aGF0IGZ1bmN0aW9uLiBFdmVuIGlmIHRoYXQgcHJvdmVzIHRyaWNreSwgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYHJlYWRfc3RhdHVzYCwgYHNvZnRfcmVzZXRgLCBgY29uZmlnX2FuZWdgLCBgc3VzcGVuZGAsIGFuZCBgcmVzdW1lYCDigJMgYXJlICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZHVyaW5nIHRoZSBub3JtYWwgUEhZIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnMuCgpTbywgbGV0JiMzOTtzIGxpc3Qgb3V0IGFsbCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gSSYjMzk7dmUgZ290OgoKKiAgIGB5dDg4MjRfcHJvYmVgCiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YAoqICAgYHl0ODgyNF9jb25maWdfYW5lZ2AKKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNgCiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgCiogICBgeXQ4ODI0X3N1c3BlbmRgCiogICBgeXQ4ODI0X3Jlc3VtZWAKKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgCiogICBgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgeXQ4ODI0X2FuZWdfZG9uZWAKKiAgIGB5dDg4MjRfcmVhZF9wYWdlYAoqICAgYHl0ODgyNF93cml0ZV9wYWdlYAoKTG9va2luZyBhdCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBkZWZpbml0aW9uLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIEkgY2FuIHJlYWNoIGFsbCBvZiB0aGVzZSBkdXJpbmcgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGUgcGF0Y2ggZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSBoaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KS4gVGhpcyByZWdpc3RlcnMgYW4gTURJTyBidXMuIFRoZW4gcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipDb25maWc6KiogYE1PVE9SQ09NTV9QSFlgCiogICAqKkZvY3VzIFN5bWJvbHM6KiogKGxpc3RlZCBhYm92ZSkKCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkuIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzowMy4yNjk2OTYxNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUxNTQ1NzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MDMuMjY5NzAyMDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE1MzI1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDE2OjM3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbmluZGV4IDUwNzE2MDVhMWExMTdhLi5lNmY5M2VkNDM0OWNhYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSw5ICsxLDEwIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG5AQCAtMTIsMTIgKzEzLDE2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuIFxcbisvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovXFxuKyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTI5LDYgKzM0LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbisgKiB8XFx0VVRQIFRvcCBFeHRlbmRlZFxcdHxcXHRGSUJFUiBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zNzUsNiArMzkyLDEyIEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFXFx0XFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFJFR19NSUlfTU1EX0NUUkxcXHRcXHRcXHQweDBEXFxuKyNkZWZpbmUgUkVHX01JSV9NTURfREFUQVxcdFxcdFxcdDB4MEVcXG4rXFxuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXFxuIFxcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xcbkBAIC0zOTEsOCArNDE0LDI5IEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdCAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURURcXG4gXFx0ICovXFxuIFxcdHU4IHJlZ19wYWdlO1xcbitcXHQvKiBZVDg4MjQgcmVnIHNwYWNlIGFkZHIgKi9cXG4rXFx0dTggcGh5X2Jhc2VfYWRkcjtcXG4rXFx0LyogdG9wIGV4dGVuZCByZWcgYWRkciAqL1xcbitcXHR1OCB0b3BfcGh5X2FkZHI7XFxuIH07XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3Bfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0ICB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRyZXR1cm4gYnVzLVxcdTAwM2V3cml0ZShidXMsIHByaXYtXFx1MDAzZXRvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRyZXR1cm4gYnVzLVxcdTAwM2VyZWFkKGJ1cywgcHJpdi1cXHUwMDNldG9wX3BoeV9hZGRyLCByZWdudW0pO1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNDMxLDYgKzQ3NSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXFxuKyAqXFxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXFxuKyAqXFxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgcmVnbnVtLCB2YWwpO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC01MjEsNiArNjI5LDI2IEBAIHN0YXRpYyBpbnQgeXRwaHlfbW9kaWZ5X2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0ICAgdTE2IGRldmljZSwgdTE2IHJlZyxcXG4rXFx0XFx0XFx0ICAgdTE2IHZhbHVlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0NUUkwsIGRldmljZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgcmVnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0RBVEEsIHZhbHVlKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC0zMDU5LDk5ICszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG4tXFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbi1cXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbi1cXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcbi1cXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbi1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4tXFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MjFfcHJvYmUsXFxuLVxcdFxcdC5yZWFkX3BhZ2VcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4tXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0PSB5dHBoeV9zZXRfd29sLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmFuZWdfZG9uZVxcdD0geXQ4NTIxX2FuZWdfZG9uZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbi1cXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0geXQ4NTIxX3Jlc3VtZSxcXG4tXFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4tXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuLVxcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbi1cXHR9LFxcbi1cXHR7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG4tXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjJfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQucHJvYmVcXHRcXHQ9IHl0ODUzMV9wcm9iZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4tXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG4tXFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuLVxcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXFxuLVxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbi1cXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbi1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLVxcdFxcdC5nZXRfZmVhdHVyZXNcXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXFxuLVxcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbi1cXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxcbi1cXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbi1cXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuLVxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuLVxcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4tXFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxcbi1cXHRcXHQuc3VzcGVuZFxcdD0geXQ4NTIxX3N1c3BlbmQsXFxuLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbi1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuLVxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuLVxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4tXFx0XFx0LmdldF93b2xcXHRcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODIxX2FuZWdfZG9uZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5nZXRfcmF0ZV9tYXRjaGluZ1xcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcXG4tXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbi1cXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuLVxcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXG4rXFx0aWYgKChvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKVxcbitcXHRcXHRyZXR1cm4gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0U7XFxuK1xcbitcXHRyZXR1cm4gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH4oMHgxKSk7XFxuK1xcdGRhdGEgfD0gcGFnZTtcXG4rXFxuK1xcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0LyogaXNvbGF0aW9uICovXFxuK1xcdFxcdFxcdHJldCB8PSBCSVQoMTApO1xcbitcXHRcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkbyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XFxuK1xcdFxcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0bXNsZWVwKDUwKTtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0fSB3aGlsZSAoKHJldCBcXHUwMDI2IEJNQ1JfUkVTRVQpIFxcdTAwMjZcXHUwMDI2IC0tcmV0cnkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjYgQk1DUl9SRVNFVClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkaXNhYmxlIFlUODgyNCB0ZW1wbGF0ZSB0ZXN0IG1vZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDAwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikge1xcbitcXHRcXHRcXHRcXHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcXG4rXFx0XFx0XFx0XFx0ICogKiBvbmx5IGZvciByZWNvcmRpbmcuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZXRyeSA9IDEyO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH5CSVQoMTApO1xcbitcXHRcXHRcXHQvKiBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdFxcdHJldCB8PSBCTUNSX1JFU0VUO1xcbitcXHRcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRcXHRtc2xlZXAoNTApO1xcbitcXHRcXHRcXHRcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHR9IHdoaWxlICgocmV0IFxcdTAwMjYgQk1DUl9SRVNFVCkgXFx1MDAyNlxcdTAwMjYgLS1yZXRyeSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAyNiBCTUNSX1JFU0VUKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gaXNzdWUgYSBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIGZvciBpbnRlcm5hbCBZVDg4MjRcXG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcXG4rICogMikgdXRwIHJlc3RhcnRcXG4rICogMykgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXFxuKyAqIGZvciBleHRlcm5hbCBZVDg4MjRcXG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcXG4rICogMikgZW5hYmxlIHNlcmRlcyBpc29sYXRlXFxuKyAqIDMpIHV0cCByZXN0YXJ0XFxuKyAqIDQpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxcbisgKiA1KSBkaXNhYmxlIHNlcmRlcyBpc29sYXRlXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAzX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgc29mdCByZXNldCAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBleHRlcm5hbCBZVDg4MjQgaW5pdFxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRwb3J0ID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgLSBwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyO1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRcXHR2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2UpO1xcbitcXHRcXHRpZiAodmFsXzEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xcbitcXHRcXHRpZiAodmFsXzIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMyA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xcbitcXHRcXHRpZiAodmFsXzMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRpZiAocG9ydCA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogYW5hbG9nIENEUiAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgVkNPICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikpIFxcdTAwM2VcXHUwMDNlIDYpO1xcbitcXHRcXHRcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyAxMik7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpIFxcdTAwM2VcXHUwMDNlIDQpO1xcbitcXHRcXHRcXHRyZXQgfD0gdG1wO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogU2VyZGVzIExETyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSBcXHUwMDNlXFx1MDAzZSAyKTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSBcXHUwMDNlXFx1MDAzZSA1KTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDE3LCAweDIwMDcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4OTAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHQvKiBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGludGVybmFsIFlUODgyNCBpbml0XFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0ID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHByaXYtXFx1MDAzZXBoeV9iYXNlX2FkZHI7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgMHgxOTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwIHRlbXBhdGUgTUFVKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDIwMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIHVwZGF0ZSBmb3IgaW50ZXJuYWwgWVQ4ODI0Ki9cXG4rXFx0XFx0cHJpdi1cXHUwMDNlcGh5X2Jhc2VfYWRkciA9IDB4NDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNldG9wX3BoeV9hZGRyID0gMHg5O1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldixcXG4rXFx0XFx0ICAgIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWQsIHBoeSBiYXNlIGFkZHIgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgcHJpdi1cXHUwMDNlcGh5X2Jhc2VfYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRwb3J0ID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgLSBwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyO1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAwMFxcbitcXHRcXHQgKiBiaXQ2IGludF9wb2xhcml0eSAxJ2IwIGxvdyBhY3RpdmUsIDEnYjEgaGlnaCBhY3RpdmVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0IFxcdTAwMjYgKH5CSVQoNikpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOVxcbitcXHRcXHQgKiBiaXQ1IGludHJfcGh5X3B1bHNlX2VuIDEnYjAgbGV2ZWwsIDEnYjEgcHVsc2VcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcXG4rXFx0XFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xcbitcXHRcXHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDdhXFx0XFx0IDB4MDAwMlxcdFxcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDY0XFx0XFx0IDB4MDAwMVxcdFxcdCAgICAgICAgIDFtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKiAweDAwNGVcXHRcXHQgMHgwMDAwXFx0XFx0ICAgICAgICAgMTAwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDA5XFx0XFx0IDB4MDAwMFxcdFxcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGgoZGVmYXVsdClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+MHg3ZjAwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwOSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4weDE4MDtcXG4rXFx0XFx0cmV0IHw9ICgweDAwMDAgXFx1MDAzY1xcdTAwM2MgNyk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcXG4rXFx0XFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0XFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0XFx0ICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXFxuK1xcdFxcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XFxuK1xcdFxcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH5CSVQoNSk7XFxuK1xcdFxcdHJldCB8PSBCSVQoNCk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYiBpbnRlcnJ1cHQgbWFza1xcbitcXHRcXHQgKiBiaXQxMSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0NyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0MyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDEwIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKiBiaXQ2IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKiBiaXQyIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0OSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0NSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0MSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDggMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqIGJpdDQgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqIGJpdDAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IHw9IChCSVQocG9ydCArIDgpIHwgQklUKHBvcnQgKyA0KSB8IEJJVChwb3J0KSk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYiwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpXFxuK1xcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ3ICBQSFkzIGxpbmsgZG93biAxOiBwaHkzIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ0ICBQSFkwIGxpbmsgZG93biAxOiBwaHkwIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK1xcdG5ldGRldl9pbmZvKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cXG4rICogb3BlcmF0ZS5cXG4rICpcXG4rICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsXFxuK1xcdFxcdFxcdFxcdCAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHBhZ2UgXFx1MDAyNj0gWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xcbitcXHQqbHBhID0gcmV0O1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHQqc3RhdHVzID0gcmV0O1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gISEoKnN0YXR1cyBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rO1xcbitcXHRpbnQgbHBhO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VwYXVzZSA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlbGluayA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbitcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbitcXG4rXFx0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXFx1MDAyNnZhbCwgXFx1MDAyNmxwYSk7XFxuK1xcdGlmIChsaW5rIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGxpbms7XFxuK1xcbitcXHRpZiAobGluaykge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDEwKSk7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9ICEhKGxwYSBcXHUwMDI2IEJJVCgxMSkpO1xcbitcXG4rXFx0XFx0LyogdXBkYXRlIHNwZWVkIFxcdTAwMjYgZHVwbGV4ICovXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VwYXVzZSA9IDA7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+Qk1DUl9QRE9XTjtcXG4rXFx0cmV0IFxcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqIG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBwaHlfY3RybCA9IDA7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjtcXG4rXFx0dTMyIHBoeV9iYXNlX2FkZHI7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0LyogZ2V0IGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgZm9yIGV4dGVybmFsIFlUODgyNCAqL1xcbitcXHRpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFxcXCJtb3RvcmNvbW0sYmFzZS1hZGRyZXNzXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBoeV9iYXNlX2FkZHIpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyID0gcGh5X2Jhc2VfYWRkcjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXRvcF9waHlfYWRkciA9IHByaXYtXFx1MDAzZXBoeV9iYXNlX2FkZHIgKyA0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbitcXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MjFfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0PSB5dHBoeV9zZXRfd29sLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdD0geXQ4NTIxX2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0geXQ4NTIxX3Jlc3VtZSxcXG4rXFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4rXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuK1xcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjJfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQucHJvYmVcXHRcXHQ9IHl0ODUzMV9wcm9iZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG4rXFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuK1xcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXFxuK1xcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbitcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbitcXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbitcXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdD0geXQ4NTIxX3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmdldF93b2xcXHRcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODIxX2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfcmF0ZV9tYXRjaGluZ1xcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0XFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxcbitcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxcbitcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyNF9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjRfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcXG4gXFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJQZXRlciBHZWlzXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkt5bGVcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuQEAgLTMxNjEsNiArNDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzowNC4wNjIxNzM1MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NzIyOTY4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJ5dDg4MjRfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwieXQ4ODI0X2FuZWdfZG9uZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgWVQ4ODI0IFBIWSBJRC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmluZCB0aGUgbmV3IFBIWSBkcml2ZXIgYW5kIGV4ZWN1dGUgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzdGF0ZSBtYWNoaW5lIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMWE4YzNlMTNmMGY3ZGFlNTA3ZTUzNWRlODgwMTk2ODQ1ZWQ2NjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNjozNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggNTA3MTYwNWExYTExN2EuLmU2ZjkzZWQ0MzQ5Y2FiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDkgKzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbisgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG5AQCAtMTIsMTIgKzEzLDE2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4rLyogdXNlZCBmb3IgcGh5ODgyNCBiYXNlYWRkciAqL1xuKyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yOSw2ICszNCwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0RklCRVIgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzUsNiArMzkyLDEyIEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVx0XHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgUkVHX01JSV9NTURfQ1RSTFx0XHRcdDB4MERcbisjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEFcdFx0XHQweDBFXG4rXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTEsOCArNDE0LDI5IEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQgKiBZVDg1MjFfUlNTUl9UT19CRV9BUkJJVFJBVEVEXG4gXHQgKi9cbiBcdHU4IHJlZ19wYWdlO1xuK1x0LyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovXG4rXHR1OCBwaHlfYmFzZV9hZGRyO1xuK1x0LyogdG9wIGV4dGVuZCByZWcgYWRkciAqL1xuK1x0dTggdG9wX3BoeV9hZGRyO1xuIH07XG4gXG4rc3RhdGljIGlubGluZSBpbnQgeXRwaHlfdG9wX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0cmV0dXJuIGJ1cy1cdTAwM2V3cml0ZShidXMsIHByaXYtXHUwMDNldG9wX3BoeV9hZGRyLCByZWdudW0sIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiByZWdudW0pXG4re1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0cmV0dXJuIGJ1cy1cdTAwM2VyZWFkKGJ1cywgcHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIsIHJlZ251bSk7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICs0NzUsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuKyAqXG4rICogTk9URTpUaGUgY2FsbGVyIG11c3QgaGF2ZSB0YWtlbiB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiB5dHBoeV90b3BfcmVhZChwaHlkZXYsIFlUUEhZX1BBR0VfREFUQSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXG4rICpcbisgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdFx0XHQgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCByZWdudW0sIHZhbCk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTUyMSw2ICs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHQgICB1MTYgZGV2aWNlLCB1MTYgcmVnLFxuK1x0XHRcdCAgIHUxNiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgcmVnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0NUUkwsIGRldmljZSB8IDB4NDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCB2YWx1ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC0zMDU5LDk5ICszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUxMSBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MTFfY29uZmlnX2luaXQsXG4tXHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MTFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MTFfd3JpdGVfcGFnZSxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuLVx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4tXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuLVx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHl0ODUyMV9yZXN1bWUsXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFwiLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXG4tXHRcdC5uYW1lXHRcdD0gXCJZVDg1MzEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuLVx0XHQucHJvYmVcdFx0PSB5dDg1MzFfcHJvYmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXG4tXHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXQ4NTMxX3NldF93b2wsXG4tXHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxuLVx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbi1cdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxuLVx0XHQubmFtZVx0XHQ9IFwiWVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuLVx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4tXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuLVx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHl0ODUyMV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSksXG4tXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyMSAyLjVHYnBzIFBIWVwiLFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4tXHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4tXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4tXHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbi1cdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXG4rXHRpZiAoKG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSlcbitcdFx0cmV0dXJuIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFO1xuK1xuK1x0cmV0dXJuIFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH4oMHgxKSk7XG4rXHRkYXRhIHw9IHBhZ2U7XG4rXG4rXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdFx0cmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcbitcdFx0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0LyogaXNvbGF0aW9uICovXG4rXHRcdFx0cmV0IHw9IEJJVCgxMCk7XG4rXHRcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHR9XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRvIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRyZXQgfD0gQk1DUl9SRVNFVDtcbitcdFx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0bXNsZWVwKDUwKTtcbitcdFx0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fSB3aGlsZSAoKHJldCBcdTAwMjYgQk1DUl9SRVNFVCkgXHUwMDI2XHUwMDI2IC0tcmV0cnkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogZGlzYWJsZSBZVDg4MjQgdGVtcGxhdGUgdGVzdCBtb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4MDA4NCwgMHgwMDAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdFx0XHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcbitcdFx0XHRcdCAqICogb25seSBmb3IgcmVjb3JkaW5nLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdFx0cmV0IFx1MDAyNj0gfkJJVCgxMCk7XG4rXHRcdFx0Lyogc29mdCByZXNldCAqL1xuK1x0XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0bXNsZWVwKDUwKTtcbitcdFx0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fSB3aGlsZSAoKHJldCBcdTAwMjYgQk1DUl9SRVNFVCkgXHUwMDI2XHUwMDI2IC0tcmV0cnkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBpc3N1ZSBhIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogZm9yIGludGVybmFsIFlUODgyNFxuKyAqIDEpIHNldCB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXG4rICogMikgdXRwIHJlc3RhcnRcbisgKiAzKSBkaXNhYmxlIHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbisgKiBmb3IgZXh0ZXJuYWwgWVQ4ODI0XG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbisgKiAyKSBlbmFibGUgc2VyZGVzIGlzb2xhdGVcbisgKiAzKSB1dHAgcmVzdGFydFxuKyAqIDQpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuKyAqIDUpIGRpc2FibGUgc2VyZGVzIGlzb2xhdGVcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiB1dHAgc29mdCByZXNldCAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGV4dGVybmFsIFlUODgyNCBpbml0XG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHRpbnQgcG9ydDtcbitcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNlKTtcbitcdFx0aWYgKHZhbF8xIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0dmFsXzIgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTtcbitcdFx0aWYgKHZhbF8yIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTtcbitcdFx0aWYgKHZhbF8zIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuK1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkgXHUwMDNlXHUwMDNlIDQpO1xuK1x0XHRcdHJldCB8PSB0bXA7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpIFx1MDAzZVx1MDAzZSAyKTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAxNywgMHgyMDA3KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDkwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHQvKiBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGludGVybmFsIFlUODgyNCBpbml0XG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0ICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHBvcnQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgxLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgMHgxOTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBFTUMgQ1MgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIEVNQyBSRSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MjAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogYmFzZSBhZGRyIGFuZCB0b3AgYWRkciB1cGRhdGUgZm9yIGludGVybmFsIFlUODgyNCovXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IDB4NDtcbitcdFx0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSAweDk7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LFxuK1x0XHQgICAgXCIlcyBkb25lLCBwaHkgYWRkcjogJWQsIHBoeSBiYXNlIGFkZHIgPSAlZFxcblwiLFxuK1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdGludCBwb3J0O1xuK1xuK1x0cG9ydCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwcml2LVx1MDAzZXBoeV9iYXNlX2FkZHI7XG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDAwXG4rXHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEnYjAgbG93IGFjdGl2ZSwgMSdiMSBoaWdoIGFjdGl2ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQgXHUwMDI2ICh+QklUKDYpKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbitcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV90b3BfcmVhZChwaHlkZXYsIDB4YTAxOSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTggcGh5X3B1bHNlX2x0aCBiaXQxNDo4XG4rXHRcdCAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjdcbitcdFx0ICogYml0MTQ6OCBwaHlfcHVsc2VfbHRoIGJpdDg6NyB0aW1lcl90aWNrX3NlbCAgIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA3YVx0XHQgMHgwMDAyXHRcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDY0XHRcdCAweDAwMDFcdFx0ICAgICAgICAgMW1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA0ZVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDAwOVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGgoZGVmYXVsdClcbitcdFx0ICovXG4rXHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4weDdmMDA7XG4rXHRcdHJldCB8PSAoMHgwMDA5IFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfjB4MTgwO1xuK1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4rXHRcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbitcdFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdFx0ICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKlxuK1x0XHQgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXG4rXHRcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XG4rXHRcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfkJJVCg1KTtcbitcdFx0cmV0IHw9IEJJVCg0KTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDFhLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFiIGludGVycnVwdCBtYXNrXG4rXHRcdCAqIGJpdDExIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQ3IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQzIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0MTAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqIGJpdDYgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqIGJpdDIgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKlxuK1x0XHQgKiBiaXQ5IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQ1IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQxIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0OCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICogYml0NCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICogYml0MCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV90b3BfcmVhZChwaHlkZXYsIDB4YTAxYik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgfD0gKEJJVChwb3J0ICsgOCkgfCBCSVQocG9ydCArIDQpIHwgQklUKHBvcnQpKTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDFiLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpXG4rXHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGxpbmsgPSAwO1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXHUwMDI2XG4rXHRcdFx0ICAgICBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwiLFxuK1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cbisgKiBvcGVyYXRlLlxuKyAqXG4rICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxuK1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHBhZ2UgXHUwMDI2PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuK1x0KmxwYSA9IHJldDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSAhISgqc3RhdHVzIFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGxpbms7XG4rXHRpbnQgbHBhO1xuK1x0aW50IHZhbDtcbitcbitcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuK1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1xuK1x0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuK1x0aWYgKGxpbmsgXHUwMDNjIDApXG4rXHRcdHJldHVybiBsaW5rO1xuK1xuK1x0aWYgKGxpbmspIHtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuK1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuK1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9ICEhKGxwYSBcdTAwMjYgQklUKDExKSk7XG4rXG4rXHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuK1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuK1x0XHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0ICAgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4rXHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKClcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQ7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbitcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbitcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXY7XG4rXHR1MzIgcGh5X2Jhc2VfYWRkcjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHQvKiBnZXQgYmFzZSBhZGRyIGFuZCB0b3AgYWRkciBmb3IgZXh0ZXJuYWwgWVQ4ODI0ICovXG4rXHRpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwibW90b3Jjb21tLGJhc2UtYWRkcmVzc1wiLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2cGh5X2Jhc2VfYWRkcikpXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IHBoeV9iYXNlX2FkZHI7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IFBIWV9CQVNFX0FERFI7XG4rXG4rXHRwcml2LVx1MDAzZXRvcF9waHlfYWRkciA9IHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciArIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTExX2NvbmZpZ19pbml0LFxuK1x0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4rXHRcdC5yZWFkX3BhZ2VcdD0geXQ4NTExX3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2VcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMSksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MjEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbitcdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbitcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuK1x0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuK1x0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbitcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcIixcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbitcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUyMl9jb25maWdfaW5pdCxcbitcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLFxuK1x0XHQubmFtZVx0XHQ9IFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcIixcbitcdFx0LnByb2JlXHRcdD0geXQ4NTMxX3Byb2JlLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxX2NvbmZpZ19pbml0LFxuK1x0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4rXHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4rXHRcdC5zZXRfd29sXHQ9IHl0ODUzMV9zZXRfd29sLFxuK1x0XHQubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSxcbitcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbitcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG4rXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcbitcdFx0Lm5hbWVcdFx0PSBcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbitcdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbitcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJZVDg4MjEgMi41R2JwcyBQSFlcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuK1x0XHQuZ2V0X3dvbFx0XHQ9IHl0cGh5X2dldF93b2wsXG4rXHRcdC5zZXRfd29sXHRcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuK1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODIxX2FuZWdfZG9uZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODIxX2NvbmZpZ19pbml0LFxuK1x0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjFfcmVhZF9zdGF0dXMsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODIxX3NvZnRfcmVzZXQsXG4rXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4rXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQuY29uZmlnX2ludHIgICAgICAgICAgICA9IHl0ODgyNF9jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTYxLDYgKzQ4MTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjM3OjA0LjA2MjE3NTM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTg4NzEyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXcgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZhaXJseSBzdWJzdGFudGlhbCBhZGRpdGlvbiwgd2l0aCBhIGxvdCBvZiBjb2RlIGZvciByZWdpc3RlciBtYW5pcHVsYXRpb24sIHJlc2V0LCBhbmQgaW5pdGlhbGl6YXRpb24g4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBQSFkgZHJpdmVyLiBUaGUgWVQ4ODI0IGlzIGEgTW90b3Jjb21tIHF1YWQtcG9ydCAyLjVHYnBzIEV0aGVybmV0IFBIWSwgaGFyZHdhcmUtc3BlY2lmaWMsIG9mIGNvdXJzZS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgZXhlY3V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGlzIHdoZXJlIGEgbG90IG9mIG15IGRlYnVnZ2luZyBoYXBwZW5zLiBOb3JtYWxseSwgd2l0aCBQSFkgZHJpdmVycywgeW914oCZcmUgc3R1Y2sgd2l0aCB0aGUgaGFyZHdhcmUsIG9yIHlvdSBuZWVkIHNvbWUga2luZCBvZiBNRElPIGJ1cyBlbXVsYXRpb24gdG8gZXZlbiBnZXQgdGhlIGRyaXZlciBsb2FkZWQuIFlvdSdkIG5lZWQgYSB3YXkgdG8gZW11bGF0ZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuIExpbnV4IFBIWSBkcml2ZXJzIGJpbmQgdG8gTURJTyBkZXZpY2VzIGJhc2VkIG9uIHRoZWlyIFBIWSBJRC5cblxuQ2FuIEkgaW5zdGFudGlhdGUgdGhpcyBkcml2ZXIgdGhyb3VnaCBzb2Z0d2FyZSwgd2l0aG91dCB0aGUgYWN0dWFsIFlUODgyNCBwcmVzZW50PyBNb3N0IGxpa2VseSBub3QgZGlyZWN0bHkuIEkndmUgdXNlZCBgbWFjYmAgYW5kIG90aGVyIGVtdWxhdGVkIE5JQ3MgYmVmb3JlLCBidXQgdGhleSB1c3VhbGx5IGNvbWUgd2l0aCB0aGVpciBvd24gcHJlLWNvbmZpZ3VyZWQgb3IgZ2VuZXJpYyBQSFlzLiBJIHN0YXJ0IHRoaW5raW5nIG9mIHdheXMgdG8gZ2V0IGF0IHRoaXMgY29kZS4uLlxuXG5XYWl0LCBkb2Vzbid0IHN5emthbGxlciBoYXZlIHNvbWUgdHJpY2sgdXAgaXRzIHNsZWV2ZSBmb3IgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcywgb3IgbWF5YmUgaXQgY2FuIHVzZSBgZmFrZWRldmAgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXM/IE5haCwgc3l6a2FsbGVy4oCZcyBub3QgdXN1YWxseSBpbiB0aGUgYnVzaW5lc3Mgb2YgZnVsbCBNRElPIFBIWSBlbXVsYXRpb24sIHVubGVzcyB0aGVyZSBpcyBhIGN1c3RvbSB2aXJ0dWFsIE1ESU8gZHJpdmVyLlxuXG5Pa2F5LCBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHZpcnR1YWwgTURJTyBkcml2ZXIgc29tZXdoZXJlIGluIHRoZSBrZXJuZWwuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/IEknZCBiZXR0ZXIgY2hlY2sgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MTEuMTIxMDQ5MjM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzk0NzQzMTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MTcuODYwNTMxOTI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwMjc5MzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgVXNlcnNwYWNlIENvbnRyb2wgb2YgUEhZIERyaXZlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUncyBhIHByYWN0aWNhbCBtZXRob2QgdG8gaW50ZXJhY3Qgd2l0aCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSXQncyBzb21ldGhpbmcgSSd2ZSBjb25zaWRlcmVkIGJlZm9yZSwgYW5kIEkgc2VlbSB0byByZWNhbGwgY2VydGFpbiBzY2VuYXJpb3Mgd2hlcmUgdXNlcnNwYWNlIGNhbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgY2FzZXMgdXNpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBvciBzaW1pbGFyIG9uZXMsIHJpZ2h0PyBIb3dldmVyLCB0aGF0J3Mgbm90IHF1aXRlIHdoYXQgSSBhbSBsb29raW5nIGZvci5cblxuTm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCBmaWxlLiBQZXJoYXBzIHRoZXJlJ3MgYSBzeXNmcyBvciBuZXRsaW5rIGludGVyZmFjZSBleHBvc2VkIHRoZXJlLCBhbHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgZHVyaW5nIGJvb3QgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIG9yIGJ5IFBDSSBkZXZpY2VzIHJlZ2lzdGVyaW5nIE1ESU8gYnVzZXMuXG5cbkknbSB3b25kZXJpbmcuLi4gSXMgdGhlcmUgc3VjaCBhIHRoaW5nIGFzIGEgdmlydHVhbCBNRElPIGJ1cz8gSWYgc28sIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBlbmFibGVyLiBUbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSdsbCBzZWFyY2ggdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgYW55IG9jY3VycmVuY2VzIG9mIFwibWRpb1wiIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MjMuOTYzMzI3NTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDM3NzQ5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbC4qbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sPTE3PXByb3BlcnRpZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTE5LSAgICBlbnVtOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw6MjA6ICAgICAgLSB2aXJ0dWFsLG1kaW8tZ3Bpb1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWwtMjEtICAgICAgLSBtaWNyb2NoaXAsbWRpby1zbWkwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sPTQxPWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00Ny0gICAgbWRpbzA6IG1kaW8ge1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw6NDg6ICAgICAgY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00OS0gICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktZGxpbmstZG5zLTMxMy5kdHM9MTUyPVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzOjE1MzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzLTE1NC1cXHRcXHQvKiBVc2VzIE1EQyBhbmQgTURJTyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjEwYi5kdHM9Njc9XFx0bWRpbzA6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzOjY4OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzLTY5LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cz02Nj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjIwYi5kdHM6Njc6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjIwYi5kdHMtNjgtXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8wIDIyIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlLCAvKiBNREMgKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cz0zMj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uczI1MDIuZHRzOjMzOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cy0zNC1cXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzAgMjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIE1EQyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1ydXQxeHguZHRzPTU5PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM6NjA6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1ydXQxeHguZHRzLTYxLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cz03MT1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zbDkzNTEyci5kdHM6NzI6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zbDkzNTEyci5kdHMtNzMtXFx0XFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc3EyMDEuZHRzPTU2PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0czo1NzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cy01OC1cXHRcXHQvKiBVc2VzIE1EQyBhbmQgTURJTyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0cz0zMj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0czozMzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNzaTEzMjguZHRzLTM0LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cz01Nz1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS12ZXJiYXRpbS1zMDh2MTkwMS1kMS5kdHM6NTg6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS12ZXJiYXRpbS1zMDh2MTkwMS1kMS5kdHMtNTktXFx0XFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cz03MT1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQxMTEuZHRzOjcyOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cy03My1cXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzAgMjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIE1EQyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQyMjIuZHRzPTcwPVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM6NzE6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQyMjIuZHRzLTcyLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cz0xNjM9XFx0bWRpb19ncGlvOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0czoxNjQ6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktcmR1MS5kdHMtMTY1LVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1zY3UyLW1lenouZHRzPTQwPVxcdG1kaW9fZ3BpbzogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0czo0MTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1zY3UyLW1lenouZHRzLTQyLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxLWJ4NTB2My5kdHNpPTk3PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxLWJ4NTB2My5kdHNpOjk4OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2ktOTktXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8yIDUgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIG1kYyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cWRsLXppaS1yZHUyLmR0c2k9MTk9XFx0bWRpbzE6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpOjIwOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpLTIxLVxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cXAtcHJ0d2QzLmR0cz01Mz1cXHRtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxcC1wcnR3ZDMuZHRzOjU0OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHMtNTUtXFx0XFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM9NTU9XFx0bWRpbzA6IG1kaW8tMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy01Ni1cXHRcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0czo1NzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzLTU4LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZxY29tX3Bpbm11eCAxIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cz0xODA9XFx0bWRpbzE6IG1kaW8tMSB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODEtXFx0XFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM6MTgyOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHMtMTgzLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZxY29tX3Bpbm11eCAxMSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxMzNjLXByaWhtYi5kdHM9MTE4PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzOjExOTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzLTEyMC1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM9Mzg9XFx0bWRpbzA6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM6Mzk6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFjLmR0cy00MC1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxbC5kdHNpPTQ0PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaTo0NTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaS00Ni1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaT0xOD1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1xLXppaS11bHRyYS5kdHNpOjE5OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaS0yMC1cXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxOTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsbWRpby1zbWkwXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzoyOS45MDcxMTEwNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTExOTM4MjY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbXVsYXRpbmcgYSBQSFkgRGV2aWNlIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byB0ZXN0IHRoZSBgbW90b3Jjb21tYCBQSFkgZHJpdmVyLiBUaGUgY2hhbGxlbmdlIGlzLCBob3cgZG8gSSBnZXQgdGhlIGtlcm5lbCB0byBsb2FkIGl0IHdpdGhvdXQgYW4gYWN0dWFsIFBIWSBkZXZpY2U/IEhtbSwgYG1kaW8tZ3Bpb2AgaXMgYSBiaXQtYmFuZ2luZyBkcml2ZXIsIHNvIHRoYXQncyBvdXQuIENhbiBJIHNvbWVob3cgZW11bGF0ZSBhIFBIWSBpbiBzb2Z0d2FyZT8gYG1hYzgwMjExX2h3c2ltYCwgYGR1bW15YCwgYG5ldGRldnNpbWAsIGB0dW5gL2B0YXBgLCBgdmV0aGAg4oCTIG5vbmUgb2YgdGhvc2Ugc2VlbSB0byBoYXZlIGFueXRoaW5nIFBIWS1yZWxhdGVkLlxuXG5CdXQgd2FpdCwgd2hhdCBhYm91dCBgdXNibmV0YD8gU29tZSBVU0IgbmV0d29yayBhZGFwdGVycyAqZG8qIGhhdmUgUEhZcyEgQW5kLCBjcnVjaWFsIHBvaW50LCBzeXprYWxsZXIgKmNhbiogZW11bGF0ZSBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYC5cblxuVGhlIGlkZWEgaXM6IGlmIHN5emthbGxlciBlbXVsYXRlcyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCAqZXhwb3NlcyogYW4gTURJTyBidXMsIHRoZW4gaXQgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IFBIWSBJRHMuIFRoZSBrZXJuZWwgc2hvdWxkIHRoZW4gYmluZCB0aGUgY29ycmVzcG9uZGluZyBQSFkgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgbW90b3Jjb21tYCBkcml2ZXIhXG5cbkxldCdzIHNlZS4gQXJlIHRoZXJlIGFueSBVU0IgbmV0d29yayBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGxldCB0aGUgZGV2aWNlIHNwZWNpZnkgdGhlIFBIWSBJRCwgb3IgYXQgbGVhc3Qgc2NhbiB0aGUgYnVzPyBCaW5nbyEgTG9va3MgbGlrZSBgc21zYzk1eHhgLCBgYXNpeGAsIGByODE1MmAsIGBsYW43OHh4YCwgbWF5YmUgZXZlbiBgY2RjX2V0aGVyYCwgYW5kIGBheDg4MTc5XzE3OGFgLlxuXG5BaGEhIFNvLCBpZiBhIFVTQiBkZXZpY2UgZXhwb3NlcyBhbiBNRElPIGJ1cywgdGhlIGtlcm5lbCB3aWxsIHByb2JlIHRoYXQgYnVzLiBUaGUgVVNCIGRldmljZSAod2hpY2ggc3l6a2FsbGVyIHdpbGwgZW11bGF0ZSkgY2FuIHRoZW4gKnJlc3BvbmQqIHRvIHRob3NlIE1ESU8gcmVhZCByZXF1ZXN0cyDigJMgc3BlY2lmaWNhbGx5LCBmb3IgcmVnaXN0ZXJzIDIgYW5kIDMsIHdoaWNoIGNvbnRhaW4gdGhlIFBIWSBJRCDigJMgd2l0aCB0aGUgTW90b3Jjb21tIFBIWSBJRCAoYDB4NGY1MWU4YjhgKS4gVGhhdCdzIHRoZSBrZXkuIFRoZSBrZXJuZWwgKnNob3VsZCogbG9hZCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYW5kIHNvIG9uLlxuXG5Ob3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiBNRElPIHRocm91Z2ggVVNCPyBTeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIChgc3l6X3VzYl9jb25uZWN0YCkuIEl0IGNhbiBkZWZpbml0ZWx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLiBJZiBJIG1ha2UgaXQgZW11bGF0ZSBhIFVTQiBkZXZpY2UgdGhhdCB1c2VzIGEgZHJpdmVyIGxpa2UgYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBvciBgYXNpeGAsIHRob3NlIGRyaXZlcnMgKnJlZ2lzdGVyKiBhbiBNRElPIGJ1cy4gV2hlbiB0aGUgTURJTyBidXMgZ2V0cyBzY2FubmVkLCB0aGUgZHJpdmVyIGhhcyB0byB0cmFuc2xhdGUgTURJTyByZWFkcyBpbnRvIFVTQiBjb250cm9sIG1lc3NhZ2VzLiBTeXprYWxsZXIgc2hvdWxkIGludGVyY2VwdCB0aG9zZSBVU0IgY29udHJvbCBtZXNzYWdlcywgYW5kIHRoYXQncyB0aGUgcGVyZmVjdCBvcHBvcnR1bml0eSB0byByZXR1cm4gdGhlIGN1c3RvbSBQSFkgSUQuXG5cbk9rYXksIG5vdyBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgbGFuNzh4eGAgb3IgYHNtc2M5NXh4YCAqZG9lcyogcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIHdlJ3JlIGluIGJ1c2luZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzo0NS4wMjY0OTU3NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDU4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6NDUuMjMyNTU5MzcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4NTQ1MTA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFlUODgyNCBQSFkgRHJpdmVyIHZpYSBVU0IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZXhjaXRpbmcuIEkndmUgZ290IHRoaXMgZmlndXJlZCBvdXQ6IGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGFzaXhgLCBhbmQgYGF4ODgxNzJhYCDigJMgdGhleSBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQgTURJTyBidXMsIHdoZW4gcmVnaXN0ZXJlZCwgZ2V0cyBzY2FubmVkIGJ5IHRoZSBrZXJuZWwsIHdoaWNoIHJlYWRzIFBIWSByZWdpc3RlcnMgMiBhbmQgMyB0byBncmFiIHRoZSBQSFkgSUQuIFRoZSBVU0IgZHJpdmVyIGNsZXZlcmx5IHRyYW5zbGF0ZXMgdGhvc2UgTURJTyByZWFkcyBpbnRvIFVTQiBjb250cm9sIHRyYW5zZmVycy4gVGhpcyBtZWFucyB0aGF0IFN5emthbGxlcidzIFVTQiBmdXp6ZXIgKmNhbiogcmVzcG9uZCB0byB0aG9zZSBjb250cm9sIHRyYW5zZmVycyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gdGhlIGtlcm5lbCB3aWxsLCBubyBxdWVzdGlvbiwgaW5zdGFudGlhdGUgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIGFuZCBjYWxsIGl0cyBtZXRob2RzLiBUaGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNvbWUgdGFyZ2V0ZWQgVVNCIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGFjdHVhbGx5IGJlaW5nIGludHJvZHVjZWQsIGFuZCB3aGF0IHdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYFlUODgyNGAgUEhZLiBJIGNhbiBzZWUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZDpcblxuKiAgIGB5dDg4MjRfcmVhZF9wYWdlYFxuKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWBcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWRgXG4qICAgYHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkYFxuKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZGBcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWRgXG4qICAgYHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkYFxuKiAgIGB5dDg4MjRfc29mdF9yZXNldGBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkYFxuKiAgIGB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWRgXG4qICAgYHl0ODgyNF9jb25maWdfaW5pdGBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbnRyYFxuKiAgIGB5dDg4MjRfaGFuZGxlX2ludGVycnVwdGBcbiogICBgeXQ4ODI0X2FuZWdfZG9uZWBcbiogICBgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkYFxuKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNgXG4qICAgYHl0ODgyNF91dHBfcG93ZXJfb25gXG4qICAgYHl0ODgyNF91dHBfcG93ZXJfZG93bmBcbiogICBgeXQ4ODI0X3Bvd2VyX29uYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfcG93ZXJfZG93bmBcbiogICBgeXQ4ODI0X3N1c3BlbmRgXG4qICAgYHl0ODgyNF9jb25maWdfYW5lZ2BcbiogICBgeXQ4ODI0X3Byb2JlYFxuXG5BbHNvLCBzb21lIGhlbHBlciBmdW5jdGlvbnMgZ290IGFkZGVkOlxuXG4qICAgYHl0cGh5X3RvcF93cml0ZWBcbiogICBgeXRwaHlfdG9wX3JlYWRgXG4qICAgYHl0cGh5X3JlYWRfdG9wX2V4dGBcbiogICBgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9ja2BcbiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dGBcbiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2tgXG4qICAgYHl0cGh5X3dyaXRlX21tZGBcblxuQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGlzIFBIWSBkcml2ZXIgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nOlxuXG4qICAgYHl0ODgyNF9wcm9iZWBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YFxuKiAgIGB5dDg4MjRfY29uZmlnX2FuZWdgXG4qICAgYHl0ODgyNF9yZWFkX3N0YXR1c2BcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgXG4qICAgYHl0ODgyNF9zdXNwZW5kYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgXG4qICAgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGB5dDg4MjRfYW5lZ19kb25lYFxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlncy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQuIFRoZSBmaWxlIGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGVuYWJsZXMgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDAuMDg3MDczNTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM1NzcxMjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDAuODUwNjU5Mzc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDIwMzA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUG90ZW50aWFsIExvY2F0aW9uOiBJbnZlc3RpZ2F0aW5nIHRoZSBQSFkgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgUEhZIGNvbmZpZ3VyYXRpb24uIEkgaW5pdGlhbGx5IGhhZCBhIGh1bmNoLCBidXQgaXQncyBub3QgcXVpdGUgd29ya2luZyBvdXQgdGhlIHdheSBJIHRob3VnaHQuIEluc3RlYWQgb2YgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlLCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBQSFkgZHJpdmVycywgYW5kIHRoZSBNYWtlZmlsZSBzaG91bGQsIGF0IGEgbWluaW11bSwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhvc2UgZHJpdmVycyBhcmUgYnVpbHQgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIGFuc3dlciBkaXJlY3RseSBpbiB0aGUgTWFrZWZpbGUgb3IgYXQgbGVhc3QgYSBwb2ludGVyIHRvIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgb3IgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozODowNS4wNTI2OTI2MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzkxNzAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3RvcmNvbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04Mj1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcXHQrPSBtc2NjL1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcXHQrPSBtb3RvcmNvbW0ub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04NC1vYmotJChDT05GSUdfTkFUSU9OQUxfUEhZKVxcdCs9IG5hdGlvbmFsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDUuMzYwNjE1NzgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDU4MTY1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgdGhlIHN5c3RlbSdzIGhpZ2hsaWdodGluZyBgQ09ORklHX01PVE9SQ09NTV9QSFlgLiBSaWdodCwgdGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBNb3RvckNvbW0gUEhZLCBsaWtlbHkgYSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlLiBHaXZlbiB0aGF0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBuZXR3b3JrIFBIWSBkcml2ZXJzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgbG9jYXRlIHRoZSBkZWZpbml0aW9uIGZvciBgTU9UT1JDT01NX1BIWWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoZSBoYXJkd2FyZSBpdHNlbGYgb3IgcG9zc2libHkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgaW4gdGhpcyBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDkuMjY2NDM2NTkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg1ODA0MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1PVE9SQ09NTV9QSFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzM4PWNvbmZpZyBNSUNST1NFTUlfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDYtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzQ3OmNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ4LVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDkuNDk1MDIzNDA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk4MjM1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBZVDg4MjQgUEhZIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBuZXcgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgb25seSB0b3VjaGVzIGBtb3RvcmNvbW0uY2AsIHNvIEknbSB0aGlua2luZyB0aGUgYE1PVE9SQ09NTV9QSFlgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgbmV3IG9uZSBuZWVkZWQuIFNpbmNlIHRoZSBnb2FsIGlzIHRvIHJlYWNoIHRoaXMgdGhyb3VnaCBVU0IgbmV0d29yayBkcml2ZXJzLCBsaWtlIGBVU0JfTEFONzhYWGAgb3IgYFVTQl9ORVRfU01TQzk1WFhgLCBJIHRoaW5rIHRob3NlIGFyZSBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyJ3MgZGVmYXVsdHMuIFNvLCBJJ2xsIHN0YXJ0IHdpdGgganVzdCBzcGVjaWZ5aW5nIGBNT1RPUkNPTU1fUEhZYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlkZW50aWZ5aW5nIHJlYWNoYWJsZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhY2Nlc3NpYmxlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHJlZ2lzdGVyZWQgYXMgYC5oYW5kbGVfaW50ZXJydXB0YC4gVGhlIFBIWSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB3aGVuIHRoZXJlJ3MgYW4gaW50ZXJydXB0LiBJZiBJIGNhbiB0cmlnZ2VyIFBIWSBpbnRlcnJ1cHRzIOKAkyBtYXliZSB0aHJvdWdoIGZha2VkZXYgb3IgVVNCIGludGVycnVwdCBlbmRwb2ludHMg4oCTIHRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBoaXQgdGhhdCBmdW5jdGlvbi4gRXZlbiBpZiB0aGF0IHByb3ZlcyB0cmlja3ksIHRoZSBvdGhlciBmdW5jdGlvbnMg4oCTIGBwcm9iZWAsIGBjb25maWdfaW5pdGAsIGByZWFkX3N0YXR1c2AsIGBzb2Z0X3Jlc2V0YCwgYGNvbmZpZ19hbmVnYCwgYHN1c3BlbmRgLCBhbmQgYHJlc3VtZWAg4oCTIGFyZSAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGR1cmluZyB0aGUgbm9ybWFsIFBIWSBzdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb25zLlxuXG5TbywgbGV0J3MgbGlzdCBvdXQgYWxsIHRoZSBmb2N1cyBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkndmUgZ290OlxuXG4qICAgYHl0ODgyNF9wcm9iZWBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YFxuKiAgIGB5dDg4MjRfY29uZmlnX2FuZWdgXG4qICAgYHl0ODgyNF9yZWFkX3N0YXR1c2BcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgXG4qICAgYHl0ODgyNF9zdXNwZW5kYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgXG4qICAgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGB5dDg4MjRfYW5lZ19kb25lYFxuKiAgIGB5dDg4MjRfcmVhZF9wYWdlYFxuKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWBcblxuTG9va2luZyBhdCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBkZWZpbml0aW9uLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgSSBjYW4gcmVhY2ggYWxsIG9mIHRoZXNlIGR1cmluZyBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgaGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkuIFRoaXMgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLiBUaGVuIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElEIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuXG5cblNvLCB0byBzdW1tYXJpemU6XG5cbiogICAqKkNvbmZpZzoqKiBgTU9UT1JDT01NX1BIWWBcbiogICAqKkZvY3VzIFN5bWJvbHM6KiogKGxpc3RlZCBhYm92ZSlcblxuT2theSwgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc0NiwiT3V0cHV0VG9rZW5zIjoyNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6NDEuNDkzMjYyMjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxODcwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5vcrb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-14 16:22:33 +0000 UTC FinishedAt: 2026-07-14 16:38:43 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MOTORCOMM_PHY" ], "series_id": "c7190507-6348-4054-8a30-5bca4dfb97b1" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "yt8824_probe", "yt8824_config_init", "yt8824_config_aneg", "yt8824_read_status", "yt8824_soft_reset", "yt8824_suspend", "yt8824_resume", "yt8824_config_intr", "yt8824_handle_interrupt", "yt8824_aneg_done", "yt8824_read_page", "yt8824_write_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdWwgMTQgMTY6Mzc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jIGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG5pbmRleCA1MDcxNjA1YTFhMTE3YS4uZTZmOTNlZDQzNDljYWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuQEAgLTEsOSAmIzQzOzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7XG4gLypcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXG4mIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxuICAqXG4gICogQXV0aG9yOiBQZXRlciBHZWlzIFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cdTAwM2VcbiAgKiBBdXRob3I6IEZyYW5rIFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVx1MDAzZVxuJiM0MzsgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG5AQCAtMTIsMTIgJiM0MzsxMywxNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuIFxuJiM0MzsvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovXG4mIzQzOyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcbiYjNDM7XG4gI2RlZmluZSBQSFlfSURfWVQ4NTExXHRcdDB4MDAwMDAxMGFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjFcdFx0MHgwMDAwMDExYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMlx0XHQweDRmNTFlOTI4XG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxXHRcdDB4NGY1MWU5MWJcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTXHRcdDB4NGY1MWU5MWFcbiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjFcdFx0MHg0ZjUxZWExOVxuJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcdFx0MHg0ZjUxZThiOFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xuICAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4gICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuQEAgLTI5LDYgJiM0MzszNCwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbiYjNDM7LyogWVQ4ODI0IFJlZ2lzdGVyIE92ZXJ2aWV3XG4mIzQzOyAqXHRVVFAgUmVnaXN0ZXIgc3BhY2VcdHxcdEZJQkVSIFJlZ2lzdGVyIHNwYWNlXG4mIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7ICogfFx0VVRQIE1JSVx0XHRcdHxcdEZJQkVSIE1JSVx0ICAgICAgICB8XG4mIzQzOyAqIHxcdFVUUCBNTURcdFx0XHR8XHRcdFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4mIzQzOyAqIHxcdFVUUCBUb3AgRXh0ZW5kZWRcdHxcdEZJQkVSIFRvcCBFeHRlbmRlZFx0fFxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuJiM0MzsgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzOyAqL1xuJiM0MztcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzUsNiAmIzQzOzM5MiwxMiBAQFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVx0MFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9GT1JDRV9CWDI1MDBcdFx0MVxuIFxuJiM0MzsjZGVmaW5lIFlUODgyNF9SU1NSX1NQQUNFX01BU0tcdFx0XHRCSVQoMClcbiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVx0XHRcdCgweDEpXG4mIzQzOyNkZWZpbmUgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFXHRcdFx0KDB4MClcbiYjNDM7I2RlZmluZSBSRUdfTUlJX01NRF9DVFJMXHRcdFx0MHgwRFxuJiM0MzsjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEFcdFx0XHQweDBFXG4mIzQzO1xuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQvKiBjb21ib19hZHZlcnRpc2luZyBpcyB1c2VkIGZvciBjYXNlIG9mIFlUODUyMSBpbiBjb21ibyBtb2RlLFxuIFx0ICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzXG5AQCAtMzkxLDggJiM0Mzs0MTQsMjkgQEAgc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdCAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURURcbiBcdCAqL1xuIFx0dTggcmVnX3BhZ2U7XG4mIzQzO1x0LyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovXG4mIzQzO1x0dTggcGh5X2Jhc2VfYWRkcjtcbiYjNDM7XHQvKiB0b3AgZXh0ZW5kIHJlZyBhZGRyICovXG4mIzQzO1x0dTggdG9wX3BoeV9hZGRyO1xuIH07XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtLFxuJiM0MztcdFx0XHRcdCAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtXHUwMDNlbWRpby5idXM7XG4mIzQzO1xuJiM0MztcdHJldHVybiBidXMtXHUwMDNld3JpdGUoYnVzLCBwcml2LVx1MDAzZXRvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cdTAwM2VtZGlvLmJ1cztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGJ1cy1cdTAwM2VyZWFkKGJ1cywgcHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIsIHJlZ251bSk7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICYjNDM7NDc1LDcwIEBAIHN0YXRpYyBpbnQgeXRwaHlfcmVhZF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOlRoZSBjYWxsZXIgbXVzdCBoYXZlIHRha2VuIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4mIzQzO3tcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XG4mIzQzO1x0cGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXRwaHlfd3JpdGVfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSYjMzk7cyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuJiM0MzsgKlxuJiM0MzsgKiBOT1RFOlRoZSBjYWxsZXIgbXVzdCBoYXZlIHRha2VuIHRoZSBNRElPIGJ1cyBsb2NrLlxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuJiM0MztcdFx0XHQgICAgICAgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXG4mIzQzO1x0XHRcdFx0XHQgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIHJlZ251bSwgdmFsKTtcbiYjNDM7XHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4mIzQzO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gLyoqXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlclxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG5AQCAtNTIxLDYgJiM0Mzs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfbW1kKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdCAgIHUxNiBkZXZpY2UsIHUxNiByZWcsXG4mIzQzO1x0XHRcdCAgIHUxNiB2YWx1ZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfQ1RSTCwgZGV2aWNlKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0RBVEEsIHJlZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgdmFsdWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIC8qKlxuICAqIHl0cGh5X2dldF93b2woKSAtIHJlcG9ydCB3aGV0aGVyIHdha2Utb24tbGFuIGlzIGVuYWJsZWRcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTMwNTksOTkgJiM0MzszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbi1cdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFwmIzM0Oyxcbi1cdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUxMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUxMV93cml0ZV9wYWdlLFxuLVx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxuLVx0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUyMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbi1cdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuLVx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuLVx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuLVx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbi1cdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuY29uZmlnX2FuZWdcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUzMV9wcm9iZSxcbi1cdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUzMV9jb25maWdfaW5pdCxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dDg1MzFfc2V0X3dvbCxcbi1cdFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4tXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbi1cdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuLVx0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuLVx0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuLVx0fSxcbi1cdHtcbi1cdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuLVx0XHQubmFtZVx0XHRcdD0gXCYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZXCYjMzQ7LFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4tXHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4tXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4tXHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbi1cdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3BhZ2UoKSAtIHJlYWQgcmVnIHBhZ2VcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1xuJiM0MzsgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0aWYgKChvbGRfcGFnZSBcdTAwMjYgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSykgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpXG4mIzQzO1x0XHRyZXR1cm4gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0U7XG4mIzQzO1xuJiM0MztcdHJldHVybiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0U7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS5cbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3dyaXRlX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UpXG4mIzQzO3tcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0dTE2IGRhdGE7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7XG4mIzQzO1x0ZGF0YSA9IG9sZF9wYWdlIFx1MDAyNiAofigweDEpKTtcbiYjNDM7XHRkYXRhIHw9IHBhZ2U7XG4mIzQzO1xuJiM0MztcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQgPSAwO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuJiM0MztcdFx0XHRyZXQgPSAgeXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDAwODQsIDB4MjAwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGVuYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4mIzQzO1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHQvKiBpc29sYXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0IHw9IEJJVCgxMCk7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRvIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmV0cnkgPSAxMjtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuJiM0MztcdFx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdG1zbGVlcCg1MCk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHRlbXBsYXRlIHRlc3QgbW9kZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4mIzQzO1x0XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcbiYjNDM7XHRcdFx0XHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcbiYjNDM7XHRcdFx0XHQgKiAqIG9ubHkgZm9yIHJlY29yZGluZy5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XG4mIzQzO1x0XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgcmV0cnkgPSAxMjtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuJiM0MztcdFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkge1xuJiM0MztcdFx0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfkJJVCgxMCk7XG4mIzQzO1x0XHRcdC8qIHNvZnQgcmVzZXQgKi9cbiYjNDM7XHRcdFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XG4mIzQzO1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdFx0ZG8ge1xuJiM0MztcdFx0XHRcdG1zbGVlcCg1MCk7XG4mIzQzO1x0XHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0XHR9IHdoaWxlICgocmV0IFx1MDAyNiBCTUNSX1JFU0VUKSBcdTAwMjZcdTAwMjYgLS1yZXRyeSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gaXNzdWUgYSBQSFkgc29mdHdhcmUgcmVzZXRcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICogZm9yIGludGVybmFsIFlUODgyNFxuJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuJiM0MzsgKiAyKSB1dHAgcmVzdGFydFxuJiM0MzsgKiAzKSBkaXNhYmxlIHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbiYjNDM7ICogZm9yIGV4dGVybmFsIFlUODgyNFxuJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuJiM0MzsgKiAyKSBlbmFibGUgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogMykgdXRwIHJlc3RhcnRcbiYjNDM7ICogNCkgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXG4mIzQzOyAqIDUpIGRpc2FibGUgc2VyZGVzIGlzb2xhdGVcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBzb2Z0IHJlc2V0ICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGV4dGVybmFsIFlUODgyNCBpbml0XG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnX3NwYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4mIzQzO1x0aW50IHBvcnQ7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIHJlYWQgZWZ1c2UgKi9cbiYjNDM7XHRcdHZhbF8xID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7XG4mIzQzO1x0XHRpZiAodmFsXzEgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xuJiM0MztcdFx0aWYgKHZhbF8yIFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTtcbiYjNDM7XHRcdGlmICh2YWxfMyBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwb3J0ID09IDApIHtcbiYjNDM7XHRcdFx0LyogU2VyZGVzIG9wdGltaXphdGlvbiAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhOSwgMHgwMDlmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBvcHRpbWl6ZWQgVkNPICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFBMTCBsb2NrICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8xIFx1MDAyNiAoQklUKDcpIHwgQklUKDYpKSBcdTAwM2VcdTAwM2UgNik7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQ0MSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuJiM0MztcdFx0XHR0bXAgPSAodmFsXzEgXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpIFx1MDAzZVx1MDAzZSA0KTtcbiYjNDM7XHRcdFx0cmV0IHw9IHRtcDtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDJiKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMykgfCBCSVQoMTIpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyYiwgcmV0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDJhLCAweGYwNzApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgdHJhaW5pbmcgdGhyZXNob2xkICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTcsIDB4MGE0NCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIFNlcmRlcyBMRE8gKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjUpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbiYjNDM7XHRcdFx0dG1wID0gKHZhbF8yIFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSBcdTAwM2VcdTAwM2UgMik7XG4mIzQzO1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyA0KTtcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xuJiM0MztcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbiYjNDM7XHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjQsIHJldCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwZCwgMHgwNjA2KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGIxLCAweDcwNzQpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qIFRYIHByZWFtYmxlIHBhZGRlZCB0byA4OyBSWCBJUEcgYWx3YXlzIFx1MDAzZSA4ICovXG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAxNywgMHgyMDA3KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAwMCwgMHg5MDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcbiYjNDM7XHRcdC8qIHBvd2VyIGRvd24gKi9cbiYjNDM7XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHBsbCBjYWxpYnJhdGlvbiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4MGUwMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemF0aW9uIHV0cCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIGVuYWJsZSBuaWJibGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzZDAsIDB4NTIxMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDIuNUcgbG9uZyBjYWJsZSBwZXJmb3JtYW5jZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzODgsIDB4MDBhMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzU5LCAweDIxNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJmYSwgMHgwMDgzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZTIsIDB4MDE0OSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0N2YsIDB4MzkzOSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTAwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2ZiwgMHg0NTQ1KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NzAsIDB4NDU0NSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCAxMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZiLCAweDE4MTgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZWQgMTBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2NiwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDY4LCAweDZjNmMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2OSwgMHg2YzZjKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwZjgsIDB4YjNmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMmQsIDB4ZDA5NCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDMsIDB4NTIyMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBFTUMgQ1MgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdhLCAweDQwZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIG9wdGltaXplZCBFTUMgUkUgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDUsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDgsIDB4MWYxZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDAwNmUpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZmYpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpbnRlcm5hbCBZVDg4MjQgaW5pdFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcG9ydCA9IDA7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4MTkwMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikge1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDAzLCAweDMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdH1cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0MCwgMHgzMDFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwMDAgcGVyZm9ybWFuY2UgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHQvKiAxMDAgdGVtcGF0ZSAqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMwYiwgMHhhYTFkKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NzFmLCAweDM2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdC8qIDEwIHRlbXBhdGUgKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogRU1DIENTICovXG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhjOCwgMHhmZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhiZSwgMHg2NDA2KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0LyogRU1DIFJFKi9cbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHg2ZSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWQsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmZik7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHg4NCwgMHgyMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4OTE0MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9jb25maWdfaW5pdCgpIC0gcGh5IGluaXRpYWxpemF0aW9pblxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbiYjNDM7XHRcdC8qIGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgdXBkYXRlIGZvciBpbnRlcm5hbCBZVDg4MjQqL1xuJiM0MztcdFx0cHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyID0gMHg0O1xuJiM0MztcdFx0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSAweDk7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0KHBoeWRldik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdG5ldGRldl9pbmZvKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYsXG4mIzQzO1x0XHQgICAgXCYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkLCBwaHkgYmFzZSBhZGRyID0gJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuJiM0MztcdGludCBwb3J0O1xuJiM0MztcbiYjNDM7XHRwb3J0ID0gcGh5ZGV2LVx1MDAzZW1kaW8uYWRkciAtIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcjtcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRpZiAocGh5ZGV2LVx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMDBcbiYjNDM7XHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIHJldCBcdTAwMjYgKH5CSVQoNikpKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbiYjNDM7XHRcdCAqIGJpdDUgaW50cl9waHlfcHVsc2VfZW4gMSYjMzk7YjAgbGV2ZWwsIDEmIzM5O2IxIHB1bHNlXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogdG9wIGV4dCByZWcgMHhhMDE4IHBoeV9wdWxzZV9sdGggYml0MTQ6OFxuJiM0MztcdFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xuJiM0MztcdFx0ICogYml0MTQ6OCBwaHlfcHVsc2VfbHRoIGJpdDg6NyB0aW1lcl90aWNrX3NlbCAgIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwN2FcdFx0IDB4MDAwMlx0XHQgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwNjRcdFx0IDB4MDAwMVx0XHQgICAgICAgICAxbXMgcHVsc2Ugd2lkdGhcbiYjNDM7XHRcdCAqIDB4MDA0ZVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwMG1zIHB1bHNlIHdpZHRoXG4mIzQzO1x0XHQgKiAweDAwMDlcdFx0IDB4MDAwMFx0XHQgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoKGRlZmF1bHQpXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHg3ZjAwO1xuJiM0MztcdFx0cmV0IHw9ICgweDAwMDkgXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+MHgxODA7XG4mIzQzO1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuJiM0MztcdFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0NyAgUEhZMyBsaW5rIGRvd24gMTogcGh5MyBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0NCAgUEhZMCBsaW5rIGRvd24gMTogcGh5MCBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYVxuJiM0MztcdFx0ICogYml0NSBpbnRuX3dvbF9tb2RlIDEmIzM5O2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XG4mIzQzO1x0XHQgKiBiaXQ0IGludG5fbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0XG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFhKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgXHUwMDI2PSB+QklUKDUpO1xuJiM0MztcdFx0cmV0IHw9IEJJVCg0KTtcbiYjNDM7XHRcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYSwgcmV0KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2tcbiYjNDM7XHRcdCAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICpcbiYjNDM7XHRcdCAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuJiM0MztcdFx0ICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4mIzQzO1x0XHQgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRcdHJldCB8PSAoQklUKHBvcnQgJiM0MzsgOCkgfCBCSVQocG9ydCAmIzQzOyA0KSB8IEJJVChwb3J0KSk7XG4mIzQzO1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMWIsIHJldCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaXJxcmV0dXJuX3QgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0LyogdG9wIGV4dCByZWcgMHhhMDFjIGludGVycnVwdCBzdGF0ZShSZWFkIENsZWFyKVxuJiM0MztcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDkgIFBIWTEgaW50ZXJydXB0IDE6IHBoeTEgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDYgIFBIWTIgbGluayBkb3duIDE6IHBoeTIgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbiYjNDM7XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuJiM0MztcdCAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzZSAwKVxuJiM0MztcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiBJUlFfTk9ORTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpXG4mIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4mIzQzOyAqXG4mIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rID0gMDtcbiYjNDM7XHRpbnQgb2xkX3BhZ2U7XG4mIzQzO1x0aW50IHJldCA9IDA7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgWVRQSFlfU1NSX0xJTkspO1xuJiM0MztcbiYjNDM7XHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcJiMzNDslcywgcGh5IGFkZHI6ICVkLCBsaW5rX3V0cDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKCkgLSAgZGV0ZXJtaW5lcyB0aGUgc3BlZWQgYW5kIGR1cGxleCBvZiBvbmUgcGFnZVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cbiYjNDM7ICogb3BlcmF0ZS5cbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsXG4mIzQzO1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0ID0gMDtcbiYjNDM7XG4mIzQzO1x0cGFnZSBcdTAwMjY9IFlUODgyNF9SU1NSX1NQQUNFX01BU0s7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfTFBBKTtcbiYjNDM7XHQqbHBhID0gcmV0O1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbiYjNDM7XHQqc3RhdHVzID0gcmV0O1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCA9ICEhKCpzdGF0dXMgXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcbiYjNDM7XG4mIzQzO2Vycl9yZXN0b3JlX3BhZ2U6XG4mIzQzO1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBsaW5rO1xuJiM0MztcdGludCBscGE7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbiYjNDM7XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWxpbmsgPSAwO1xuJiM0MztcdHBoeWRldi1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcbiYjNDM7XHRsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuJiM0MztcdGlmIChsaW5rIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGxpbms7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rKSB7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlbGluayA9IDE7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMSkpO1xuJiM0MztcbiYjNDM7XHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4mIzQzO1x0XHR5dDg4MjFfYWRqdXN0X3N0YXR1cyhwaHlkZXYsIHZhbCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdFx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX29uKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgICAgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCBvbGRfcGFnZTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdHJldCBcdTAwMjY9IH5CTUNSX1BET1dOO1xuJiM0MztcdHJldCBcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XG4mIzQzO1xuJiM0MztcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4mIzQzO1xuJiM0MztlcnJfcmVzdG9yZV9wYWdlOlxuJiM0MztcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oKVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0XHQgaW50IHJlZ19zcGFjZSlcbiYjNDM7e1xuJiM0MztcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbiYjNDM7XG4mIzQzO1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQgfCBCTUNSX1BET1dOKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Bvd2VyX29uKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuJiM0MztcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0LyogdXRwIHBvd2VyIG9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBvbiAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9vbihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIG5vcm1hbCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbiYjNDM7XHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4mIzQzO1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBzZHMgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdC8qIHV0cCBwb3dlciBkb3duICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuJiM0MztcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4mIzQzO1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiB5dDg4MjRfY29uZmlnX2FuZWcoKVxuJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuJiM0MzsgKlxuJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCB5dDg4MjRfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiYjNDM7e1xuJiM0MztcdGludCBwaHlfY3RybCA9IDA7XG4mIzQzO1x0aW50IG9sZF9wYWdlO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbiYjNDM7XHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4mIzQzO1xuJiM0MztcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4mIzQzO1x0XHRcdCAgICAgIHBoeWRldi1cdTAwM2VhZHZlcnRpc2luZykpXG4mIzQzO1x0XHRwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkwsXG4mIzQzO1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbiYjNDM7XHRcdFx0XHQgICAgIHBoeV9jdHJsKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBnZW5waHlfY29uZmlnX2FuZWcocGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuJiM0MztcbiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZTpcbiYjNDM7XHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKipcbiYjNDM7ICogeXQ4ODI0X3Byb2JlKClcbiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbiYjNDM7ICpcbiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4mIzQzO1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2O1xuJiM0MztcdHUzMiBwaHlfYmFzZV9hZGRyO1xuJiM0MztcbiYjNDM7XHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFwcml2KVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHBoeWRldi1cdTAwM2Vwcml2ID0gcHJpdjtcbiYjNDM7XG4mIzQzO1x0LyogZ2V0IGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgZm9yIGV4dGVybmFsIFlUODgyNCAqL1xuJiM0MztcdGlmICghZGV2aWNlX3Byb3BlcnR5X3JlYWRfdTMyKGRldiwgXCYjMzQ7bW90b3Jjb21tLGJhc2UtYWRkcmVzc1wmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgICBcdTAwMjZwaHlfYmFzZV9hZGRyKSlcbiYjNDM7XHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IHBoeV9iYXNlX2FkZHI7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0cHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSBwcml2LVx1MDAzZXBoeV9iYXNlX2FkZHIgJiM0MzsgNDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUxMSBHaWdhYml0IEV0aGVybmV0XCYjMzQ7LFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcbiYjNDM7XHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuJiM0MztcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUxMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MTFfd3JpdGVfcGFnZSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTIxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MjFfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdD0geXQ4NTIxX2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuJiM0MztcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuJiM0MztcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4mIzQzO1x0XHQubmFtZVx0XHQ9IFwmIzM0O1lUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFwmIzM0OyxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiYjNDM7XHR9LFxuJiM0MztcdHtcbiYjNDM7XHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSxcbiYjNDM7XHRcdC5uYW1lXHRcdD0gXCYjMzQ7WVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MzFfcHJvYmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxX2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dDg1MzFfc2V0X3dvbCxcbiYjNDM7XHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxuJiM0MztcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbiYjNDM7XHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuJiM0MztcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4mIzQzO1x0fSxcbiYjNDM7XHR7XG4mIzQzO1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxuJiM0MztcdFx0Lm5hbWVcdFx0PSBcJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4mIzQzO1x0XHQucHJvYmVcdFx0PSB5dDg1MjFfcHJvYmUsXG4mIzQzO1x0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4mIzQzO1x0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdD0geXQ4NTIxX2FuZWdfZG9uZSxcbiYjNDM7XHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXG4mIzQzO1x0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbiYjNDM7XHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyMSAyLjVHYnBzIFBIWVwmIzM0OyxcbiYjNDM7XHRcdC5nZXRfZmVhdHVyZXNcdFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxuJiM0MztcdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4mIzQzO1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuJiM0MztcdFx0LmdldF93b2xcdFx0PSB5dHBoeV9nZXRfd29sLFxuJiM0MztcdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuJiM0MztcdFx0LmNvbmZpZ19hbmVnXHRcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuJiM0MztcdFx0LmFuZWdfZG9uZVx0XHQ9IHl0ODgyMV9hbmVnX2RvbmUsXG4mIzQzO1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4mIzQzO1x0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODIxX3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjFfcmVzdW1lLFxuJiM0MztcdH0sXG4mIzQzO1x0e1xuJiM0MztcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxuJiM0MztcdFx0Lm5hbWVcdFx0XHQ9IFwmIzM0O1lUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcJiMzNDssXG4mIzQzO1x0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbiYjNDM7XHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuJiM0MztcdFx0LndyaXRlX3BhZ2VcdFx0PSB5dDg4MjRfd3JpdGVfcGFnZSxcbiYjNDM7XHRcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxuJiM0MztcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4mIzQzO1x0XHQucHJvYmVcdFx0ICAgICAgICA9IHl0ODgyNF9wcm9iZSxcbiYjNDM7XHRcdC5jb25maWdfYW5lZ1x0XHQ9IHl0ODgyNF9jb25maWdfYW5lZyxcbiYjNDM7XHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuJiM0MztcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODI0X2NvbmZpZ19pbml0LFxuJiM0MztcdFx0LnJlYWRfc3RhdHVzXHRcdD0geXQ4ODI0X3JlYWRfc3RhdHVzLFxuJiM0MztcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbiYjNDM7XHRcdC5zdXNwZW5kXHRcdD0geXQ4ODI0X3N1c3BlbmQsXG4mIzQzO1x0XHQucmVzdW1lXHRcdFx0PSB5dDg4MjRfcmVzdW1lLFxuIFx0fSxcbiB9O1xuIFxuIG1vZHVsZV9waHlfZHJpdmVyKG1vdG9yY29tbV9waHlfZHJ2cyk7XG4gXG4tTU9EVUxFX0RFU0NSSVBUSU9OKFwmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcJiMzNDspO1xuJiM0MztNT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7TW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCYjMzQ7KTtcbiBNT0RVTEVfQVVUSE9SKFwmIzM0O1BldGVyIEdlaXNcJiMzNDspO1xuIE1PRFVMRV9BVVRIT1IoXCYjMzQ7RnJhbmtcJiMzNDspO1xuJiM0MztNT0RVTEVfQVVUSE9SKFwmIzM0O0t5bGVcJiMzNDspO1xuIE1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XG5AQCAtMzE2MSw2ICYjNDM7NDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSkgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSB9LFxuIFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcbiYjNDM7XHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT1RPUkNPTU1fUEhZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7eXQ4ODI0X3Byb2JlJiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfaW5pdCYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2FuZWcmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfc3RhdHVzJiMzNDssCiAgICAmIzM0O3l0ODgyNF9zb2Z0X3Jlc2V0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9zdXNwZW5kJiMzNDssCiAgICAmIzM0O3l0ODgyNF9yZXN1bWUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbnRyJiMzNDssCiAgICAmIzM0O3l0ODgyNF9oYW5kbGVfaW50ZXJydXB0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9hbmVnX2RvbmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3JlYWRfcGFnZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfd3JpdGVfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgWVQ4ODI0IFBIWSBJRC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmluZCB0aGUgbmV3IFBIWSBkcml2ZXIgYW5kIGV4ZWN1dGUgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzdGF0ZSBtYWNoaW5lIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgMTQgMTY6Mzc6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKaW5kZXggNTA3MTYwNWExYTExN2EuLmU2ZjkzZWQ0MzQ5Y2FiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jCkBAIC0xLDkgJiM0MzsxLDEwIEBACiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCYjNDM7CiAvKgotICogTW90b3Jjb21tIDg1MTEvODUyMS84NTIyLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyLgomIzQzOyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLgogICoKICAqIEF1dGhvcjogUGV0ZXIgR2VpcyAmbHQ7cGd3aXBlb3V0QGdtYWlsLmNvbSZndDsKICAqIEF1dGhvcjogRnJhbmsgJmx0O0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbSZndDsKJiM0MzsgKiBBdXRob3I6IEt5bGUgJmx0O2t5bGUuc3dpdGNoQG1vdG9yLWNvbW0uY29tJmd0OwogICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9ldGhlcmRldmljZS5oJmd0OwpAQCAtMTIsMTIgJiM0MzsxMywxNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L3BoeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Byb3BlcnR5LmgmZ3Q7CiAKJiM0MzsvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovCiYjNDM7I2RlZmluZSBQSFlfQkFTRV9BRERSICgxKQomIzQzOwogI2RlZmluZSBQSFlfSURfWVQ4NTExCQkweDAwMDAwMTBhCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjEJCTB4MDAwMDAxMWEKICNkZWZpbmUgUEhZX0lEX1lUODUyMgkJMHg0ZjUxZTkyOAogI2RlZmluZSBQSFlfSURfWVQ4NTMxCQkweDRmNTFlOTFiCiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFTCQkweDRmNTFlOTFhCiAjZGVmaW5lIFBIWV9JRF9ZVDg4MjEJCTB4NGY1MWVhMTkKJiM0MzsjZGVmaW5lIFBIWV9JRF9ZVDg4MjQJCTB4NGY1MWU4YjgKIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlldwogICoJVVRQIFJlZ2lzdGVyIHNwYWNlCXwJRklCRVIgUmVnaXN0ZXIgc3BhY2UKICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTI5LDYgJiM0MzszNCwxOCBAQAogICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiAKJiM0MzsvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXcKJiM0MzsgKglVVFAgUmVnaXN0ZXIgc3BhY2UJfAlGSUJFUiBSZWdpc3RlciBzcGFjZQomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKiB8CVVUUCBNSUkJCQl8CUZJQkVSIE1JSQkgICAgICAgIHwKJiM0MzsgKiB8CVVUUCBNTUQJCQl8CQkJCXwKJiM0MzsgKiB8CVVUUCBFeHRlbmRlZAkJfAlGSUJFUiBFeHRlbmRlZAkJfAomIzQzOyAqIHwJVVRQIFRvcCBFeHRlbmRlZAl8CUZJQkVSIFRvcCBFeHRlbmRlZAl8CiYjNDM7ICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOyAqIHwJCQlDb21tb24gVG9wIEV4dGVuZGVkCQkJfAomIzQzOyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJiM0MzsgKi8KJiM0MzsKIC8qIDB4MTAgfiAweDE1ICwgMHgxRSBhbmQgMHgxRiBhcmUgY29tbW9uIE1JSSByZWdpc3RlcnMgb2YgeXQgcGh5ICovCiAKIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KQEAgLTM3NSw2ICYjNDM7MzkyLDEyIEBACiAjZGVmaW5lIFlUODgyMV9DSElQX01PREVfQVVUT19CWDI1MDBfU0dNSUkJMAogI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMAkJMQogCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLCQkJQklUKDApCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRQkJCSgweDEpCiYjNDM7I2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UJCQkoMHgwKQomIzQzOyNkZWZpbmUgUkVHX01JSV9NTURfQ1RSTAkJCTB4MEQKJiM0MzsjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEEJCQkweDBFCiYjNDM7CiBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCS8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsCiAJICogdGhpcyBtZWFucyB0aGF0IHl0ODUyMSBtYXkgd29yayBpbiB1dHAgb3IgZmliZXIgbW9kZSB3aGljaCBkZXBlbmRzCkBAIC0zOTEsOCAmIzQzOzQxNCwyOSBAQCBzdHJ1Y3QgeXQ4NTIxX3ByaXYgewogCSAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURUQKIAkgKi8KIAl1OCByZWdfcGFnZTsKJiM0MzsJLyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovCiYjNDM7CXU4IHBoeV9iYXNlX2FkZHI7CiYjNDM7CS8qIHRvcCBleHRlbmQgcmVnIGFkZHIgKi8KJiM0MzsJdTggdG9wX3BoeV9hZGRyOwogfTsKIAomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF93cml0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtLAomIzQzOwkJCQkgIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwaHlkZXYtJmd0O21kaW8uYnVzOwomIzQzOwomIzQzOwlyZXR1cm4gYnVzLSZndDt3cml0ZShidXMsIHByaXYtJmd0O3RvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LSZndDttZGlvLmJ1czsKJiM0MzsKJiM0MzsJcmV0dXJuIGJ1cy0mZ3Q7cmVhZChidXMsIHByaXYtJmd0O3RvcF9waHlfYWRkciwgcmVnbnVtKTsKJiM0Mzt9CiYjNDM7CiAvKioKICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJiMzOTtzIGV4dGVuZGVkIHJlZ2lzdGVyCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC00MzEsNiAmIzQzOzQ3NSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKQogCXJldHVybiByZXQ7CiB9CiAKJiM0MzsvKioKJiM0MzsgKiB5dHBoeV9yZWFkX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3JlYWRfdG9wX2V4dChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwlyZXQgPSB5dHBoeV9yZWFkX3RvcF9leHQocGh5ZGV2LCByZWdudW0pOwomIzQzOwlwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkmIzM5O3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjQKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWQKJiM0MzsgKgomIzQzOyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkgICAgICAgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX0RBVEEsIHZhbCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgeXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSwKJiM0MzsJCQkJCSB1MTYgdmFsKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIHJlZ251bSwgdmFsKTsKJiM0MzsJcGh5X3VubG9ja19tZGlvX2J1cyhwaHlkZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIC8qKgogICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSYjMzk7cyBleHRlbmRlZCByZWdpc3RlcgogICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQpAQCAtNTIxLDYgJiM0Mzs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLAogCXJldHVybiByZXQ7CiB9CiAKJiM0MztzdGF0aWMgaW50IHl0cGh5X3dyaXRlX21tZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgIHUxNiBkZXZpY2UsIHUxNiByZWcsCiYjNDM7CQkJICAgdTE2IHZhbHVlKQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCByZWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCB2YWx1ZSk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwogLyoqCiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkCiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCkBAIC0zMDU5LDk5ICYjNDM7MzE4NywxNjIwIEBAIHN0YXRpYyBpbnQgeXQ4ODIxX3Jlc3VtZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHsKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAotCQkuY29uZmlnX2luaXQJPSB5dDg1MTFfY29uZmlnX2luaXQsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKLQkJLnJlYWRfcGFnZQk9IHl0ODUxMV9yZWFkX3BhZ2UsCi0JCS53cml0ZV9wYWdlCT0geXQ4NTExX3dyaXRlX3BhZ2UsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MjEgR2lnYWJpdCBFdGhlcm5ldCYjMzQ7LAotCQkuZ2V0X2ZlYXR1cmVzCT0geXQ4NTIxX2dldF9mZWF0dXJlcywKLQkJLnByb2JlCQk9IHl0ODUyMV9wcm9iZSwKLQkJLnJlYWRfcGFnZQk9IHl0ODUyMV9yZWFkX3BhZ2UsCi0JCS53cml0ZV9wYWdlCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCi0JCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKLQkJLnNldF93b2wJPSB5dHBoeV9zZXRfd29sLAotCQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCi0JCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjFfY29uZmlnX2luaXQsCi0JCS5yZWFkX3N0YXR1cwk9IHl0ODUyMV9yZWFkX3N0YXR1cywKLQkJLnNvZnRfcmVzZXQJPSB5dDg1MjFfc29mdF9yZXNldCwKLQkJLnN1c3BlbmQJPSB5dDg1MjFfc3VzcGVuZCwKLQkJLnJlc3VtZQkJPSB5dDg1MjFfcmVzdW1lLAotCQkubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLAotCQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKLQkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSwKLQkJLm5hbWUJCT0gJiMzNDtZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXQmIzM0OywKLQkJLmNvbmZpZ19hbmVnCT0gZ2VucGh5X2NvbmZpZ19hbmVnLAotCQkuY29uZmlnX2luaXQJPSB5dDg1MjJfY29uZmlnX2luaXQsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKLQl9LAotCXsKLQkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLAotCQkubmFtZQkJPSAmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCi0JCS5wcm9iZQkJPSB5dDg1MzFfcHJvYmUsCi0JCS5jb25maWdfaW5pdAk9IHl0ODUzMV9jb25maWdfaW5pdCwKLQkJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKLQkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAotCQkuZ2V0X3dvbAk9IHl0cGh5X2dldF93b2wsCi0JCS5zZXRfd29sCT0geXQ4NTMxX3NldF93b2wsCi0JCS5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LAotCQkubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLAotCQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKLQkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUyksCi0JCS5uYW1lCQk9ICYjMzQ7WVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0JiMzNDssCi0JCS5nZXRfZmVhdHVyZXMJPSB5dDg1MjFfZ2V0X2ZlYXR1cmVzLAotCQkucHJvYmUJCT0geXQ4NTIxX3Byb2JlLAotCQkucmVhZF9wYWdlCT0geXQ4NTIxX3JlYWRfcGFnZSwKLQkJLndyaXRlX3BhZ2UJPSB5dDg1MjFfd3JpdGVfcGFnZSwKLQkJLmdldF93b2wJPSB5dHBoeV9nZXRfd29sLAotCQkuc2V0X3dvbAk9IHl0cGh5X3NldF93b2wsCi0JCS5jb25maWdfYW5lZwk9IHl0ODUyMV9jb25maWdfYW5lZywKLQkJLmFuZWdfZG9uZQk9IHl0ODUyMV9hbmVnX2RvbmUsCi0JCS5jb25maWdfaW5pdAk9IHl0ODUyMV9jb25maWdfaW5pdCwKLQkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAotCQkuc29mdF9yZXNldAk9IHl0ODUyMV9zb2Z0X3Jlc2V0LAotCQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAotCQkucmVzdW1lCQk9IHl0ODUyMV9yZXN1bWUsCi0JfSwKLQl7Ci0JCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSwKLQkJLm5hbWUJCQk9ICYjMzQ7WVQ4ODIxIDIuNUdicHMgUEhZJiMzNDssCi0JCS5nZXRfZmVhdHVyZXMJCT0geXQ4ODIxX2dldF9mZWF0dXJlcywKLQkJLnJlYWRfcGFnZQkJPSB5dDg1MjFfcmVhZF9wYWdlLAotCQkud3JpdGVfcGFnZQkJPSB5dDg1MjFfd3JpdGVfcGFnZSwKLQkJLmdldF93b2wJCT0geXRwaHlfZ2V0X3dvbCwKLQkJLnNldF93b2wJCT0geXRwaHlfc2V0X3dvbCwKLQkJLmNvbmZpZ19hbmVnCQk9IGdlbnBoeV9jb25maWdfYW5lZywKLQkJLmFuZWdfZG9uZQkJPSB5dDg4MjFfYW5lZ19kb25lLAotCQkuY29uZmlnX2luaXQJCT0geXQ4ODIxX2NvbmZpZ19pbml0LAotCQkuZ2V0X3JhdGVfbWF0Y2hpbmcJPSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsCi0JCS5yZWFkX3N0YXR1cwkJPSB5dDg4MjFfcmVhZF9zdGF0dXMsCi0JCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyMV9zb2Z0X3Jlc2V0LAotCQkuc3VzcGVuZAkJPSB5dDg4MjFfc3VzcGVuZCwKLQkJLnJlc3VtZQkJCT0geXQ4ODIxX3Jlc3VtZSwKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyBjdXJyZW50IHJlZyBzcGFjZSBvZiB5dDg4MjQgKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFLwomIzQzOyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJcmV0dXJuIG9sZF9wYWdlOwomIzQzOwomIzQzOwlpZiAoKG9sZF9wYWdlICZhbXA7IFlUODgyNF9SU1NSX1NQQUNFX01BU0spID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKQomIzQzOwkJcmV0dXJuIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFOwomIzQzOwomIzQzOwlyZXR1cm4gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3dyaXRlX3BhZ2UoKSAtIHdyaXRlIHJlZyBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0byB3cml0ZS4KJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJdTE2IGRhdGE7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRyk7CiYjNDM7CWRhdGEgPSBvbGRfcGFnZSAmYW1wOyAofigweDEpKTsKJiM0MzsJZGF0YSB8PSBwYWdlOwomIzQzOwomIzQzOwlyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpOwomIzQzO307CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJaWYgKG9sZF9wYWdlICZndDs9IDApIHsKJiM0MzsJCWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7CiYjNDM7CQkJcmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlpZiAob2xkX3BhZ2UgJmd0Oz0gMCkgewomIzQzOwkJaWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSkgewomIzQzOwkJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQkvKiBpc29sYXRpb24gKi8KJiM0MzsJCQlyZXQgfD0gQklUKDEwKTsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkbyBZVDg4MjQgVVRQIHNvZnRyZXNldC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCByZXRyeSA9IDEyOwomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CWlmIChvbGRfcGFnZSAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJCXJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJZG8gewomIzQzOwkJCQltc2xlZXAoNTApOwomIzQzOwkJCQlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQl9IHdoaWxlICgocmV0ICZhbXA7IEJNQ1JfUkVTRVQpICZhbXA7JmFtcDsgLS1yZXRyeSk7CiYjNDM7CQkJaWYgKHJldCAmYW1wOyBCTUNSX1JFU0VUKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBkaXNhYmxlIFlUODgyNCB0ZW1wbGF0ZSB0ZXN0IG1vZGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkJIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChvbGRfcGFnZSAmZ3Q7PSAwKSB7CiYjNDM7CQlpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJCS8qIG5vcm1hbCBtb2RlICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDAwODQsIDB4MDAwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCQlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikgewomIzQzOwkJCQkvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbiwKJiM0MzsJCQkJICogKiBvbmx5IGZvciByZWNvcmRpbmcuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7CiYjNDM7CQkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJCX0KJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHJldHJ5ID0gMTI7CiYjNDM7CWludCBvbGRfcGFnZTsKJiM0MzsJaW50IHJldCA9IDA7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKG9sZF9wYWdlICZndDs9IDApIHsKJiM0MzsJCWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCQlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJLyogZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCQlyZXQgJmFtcDs9IH5CSVQoMTApOwomIzQzOwkJCS8qIHNvZnQgcmVzZXQgKi8KJiM0MzsJCQlyZXQgfD0gQk1DUl9SRVNFVDsKJiM0MzsJCQlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCWRvIHsKJiM0MzsJCQkJbXNsZWVwKDUwKTsKJiM0MzsJCQkJcmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTsKJiM0MzsJCQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQkJfSB3aGlsZSAoKHJldCAmYW1wOyBCTUNSX1JFU0VUKSAmYW1wOyZhbXA7IC0tcmV0cnkpOwomIzQzOwkJCWlmIChyZXQgJmFtcDsgQk1DUl9SRVNFVCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBpc3N1ZSBhIFBIWSBzb2Z0d2FyZSByZXNldAomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKiBmb3IgaW50ZXJuYWwgWVQ4ODI0CiYjNDM7ICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGUKJiM0MzsgKiAyKSB1dHAgcmVzdGFydAomIzQzOyAqIDMpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZQomIzQzOyAqIGZvciBleHRlcm5hbCBZVDg4MjQKJiM0MzsgKiAxKSBzZXQgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZQomIzQzOyAqIDIpIGVuYWJsZSBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIDMpIHV0cCByZXN0YXJ0CiYjNDM7ICogNCkgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlCiYjNDM7ICogNSkgZGlzYWJsZSBzZXJkZXMgaXNvbGF0ZQomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQkvKiBpbnZhbGlkIHRlc3QgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHV0cCBzb2Z0IHJlc2V0ICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogZXh0ZXJuYWwgWVQ4ODI0IGluaXQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcmVnX3NwYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7CiYjNDM7CXUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwcml2LSZndDtwaHlfYmFzZV9hZGRyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHsKJiM0MzsJCS8qIHJlYWQgZWZ1c2UgKi8KJiM0MzsJCXZhbF8xID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZSk7CiYjNDM7CQlpZiAodmFsXzEgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8yID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTEzZik7CiYjNDM7CQlpZiAodmFsXzIgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXZhbF8zID0geXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIDB4YTE0MCk7CiYjNDM7CQlpZiAodmFsXzMgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCWlmIChwb3J0ID09IDApIHsKJiM0MzsJCQkvKiBTZXJkZXMgb3B0aW1pemF0aW9uICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogYW5hbG9nIENEUiAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwNiwgMHgwODAwKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBWQ08gKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzgsIDB4OTAyNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MzksIDB4MDBjMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBvcHRpbWl6ZWQgUExMIGxvY2sgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEzKSB8IEJJVCgxMikpOwomIzQzOwkJCXRtcCA9ICh2YWxfMSAmYW1wOyAoQklUKDcpIHwgQklUKDYpKSAmZ3Q7Jmd0OyA2KTsKJiM0MzsJCQlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyAxMik7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCgxKSB8IEJJVCgwKSk7CiYjNDM7CQkJdG1wID0gKHZhbF8xICZhbXA7IChCSVQoNSkgfCBCSVQoNCkpICZndDsmZ3Q7IDQpOwomIzQzOwkJCXJldCB8PSB0bXA7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ICZhbXA7PSB+KEJJVCgxMykgfCBCSVQoMTIpKTsKJiM0MzsJCQl0bXAgPSAodmFsXzMgJmFtcDsgKEJJVCgxKSB8IEJJVCgwKSkpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDEyKTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIExETyAqLwomIzQzOwkJCXJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCXJldCAmYW1wOz0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpOwomIzQzOwkJCXRtcCA9ICh2YWxfMiAmYW1wOyAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSAmZ3Q7Jmd0OyAyKTsKJiM0MzsJCQlyZXQgfD0gKHRtcCAmbHQ7Jmx0OyA0KTsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjUsIHJldCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgJmFtcDs9IH4oQklUKDEwKSB8IEJJVCg5KSB8IEJJVCg4KSk7CiYjNDM7CQkJdG1wID0gKHZhbF8yICZhbXA7IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpICZndDsmZ3Q7IDUpOwomIzQzOwkJCXJldCB8PSAodG1wICZsdDsmbHQ7IDgpOwomIzQzOwkJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJCS8qIG9wdGltaXplZCBTZXJkZXMgUlggKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlMyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGEsIDB4MGZmZik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDgsIDB4N2MwMCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0ZDYsIDB4MDA3Zik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NGYsIDB4ZmYwOCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiBvcHRpbWl6ZWQgU2VyZGVzIFRYICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhlLCAweDdkMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDBkLCAweDA2MDYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJLyogU2VyZGVzIG1hbnVhbCBjb25maWcgKi8KJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCQkvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovCiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAzLCAweDU2MDMpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmZmYpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwNDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgyMDAwLCAweDAwMDApOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyAmZ3Q7IDggKi8KJiM0MzsJCXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDE3LCAweDIwMDcpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4OTAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CX0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgewomIzQzOwkJLyogcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4MTkwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBwbGwgY2FsaWJyYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXphdGlvbiB1dHAgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGVuYWJsZSBuaWJibGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgwMDAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIGlkbGUgZXJyIGRldGVjdCBlbmFibGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3MiwgMHg1MDM4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YywgMHg2MDY4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM4OCwgMHgwMGEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBmYXN0IHJldHJhaW4gKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM1OSwgMHgyMTQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwYywgMHhjMWEwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIDIuNUcgdGVtcGxhdGUgdG9uZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZSwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ3ZiwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MCwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MSwgMHgzOTM5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCAxMDAwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMzYsIDB4YWIwYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNDAsIDB4MzAxZCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiAxMDBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzBiLCAweGFhMWQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNzFmLCAweDAwMzYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogMTBNIHRlbXBsYXRlIGFtcGxpdHVkZSAqLwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZiLCAweDE4MTgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZjLCAweDE4MTgpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJLyogb3B0aW1pemVkIDEwTSBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM0YSwgMHhmZjAzKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBmOCwgMHhiM2ZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDA1OSwgMHg0MDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyYywgMHg1MDk0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZCwgMHhkMDk0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyZSwgMHg1MzA4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDMyMiwgMHg2NDQwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMywgMHg1MjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkMiwgMHg1MjIwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBFTUMgQ1MgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBjOCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDBiZSwgMHg2NDA2KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDM3YSwgMHg0MGZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIG9wdGltaXplZCBFTUMgUkUgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGludGVybmFsIFlUODgyNCBpbml0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwKJiM0MzsJCQkJCSAgICAgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi0mZ3Q7cHJpdjsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcG9ydCA9IDA7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXBvcnQgPSBwaHlkZXYtJmd0O21kaW8uYWRkciAtIHByaXYtJmd0O3BoeV9iYXNlX2FkZHI7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIDB4MTkwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikgewomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGEsIDB4YzNmMSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyMGMsIDB4MTYyMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CQlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHhlMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDAzLCAweDMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwl9CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4M2QwLCAweDUyMTApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YywgMHg2MDY4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4Mzg4LCAweGEwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzU5LCAweDIxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfdG9wX2V4dChwaHlkZXYsIDB4YTJmYSwgMHg4Myk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRlMiwgMHgxNDkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMi41RyB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2YsIDB4MzkzOSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MCwgMHgzOTM5KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwMCBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMDAwIHBlcmZvcm1hbmNlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzRhLCAweGZmMDMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhmOCwgMHhiM2ZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJjLCAweDUwOTQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyZSwgMHg1MzA4KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzIyLCAweDY0NDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDRkMiwgMHg1MjIwKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIDEwMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZlLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MCwgMHg0NTQ1KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcxLCAweDQ1NDUpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi8KJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMCB0ZW1wYXRlICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZiLCAweDE4MTgpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkvKiAxMCB0ZW1wYXRlIE1BVSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY2LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjcsIDB4NmM2Yyk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY5LCAweDZjNmMpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJLyogRU1DIENTICovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CS8qIEVNQyBSRSovCiYjNDM7CXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJaWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwkJcmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJCXJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MjAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJcmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDApOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW4KJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW5pdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlpZiAocGh5ZGV2LSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7CiYjNDM7CQkvKiBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIHVwZGF0ZSBmb3IgaW50ZXJuYWwgWVQ4ODI0Ki8KJiM0MzsJCXByaXYtJmd0O3BoeV9iYXNlX2FkZHIgPSAweDQ7CiYjNDM7CQlwcml2LSZndDt0b3BfcGh5X2FkZHIgPSAweDk7CiYjNDM7CQlyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCQlZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXJldCA9IHl0ODgyNF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXQgPSB5dDg4MjRfc29mdF9yZXNldChwaHlkZXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LAomIzQzOwkJICAgICYjMzQ7JXMgZG9uZSwgcGh5IGFkZHI6ICVkLCBwaHkgYmFzZSBhZGRyID0gJWRcbiYjMzQ7LAomIzQzOwkJICAgIF9fZnVuY19fLCBwaHlkZXYtJmd0O21kaW8uYWRkciwgcHJpdi0mZ3Q7cGh5X2Jhc2VfYWRkcik7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfaW50cihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgcmV0ID0gMCwgb2xkX3BhZ2U7CiYjNDM7CWludCBwb3J0OwomIzQzOwomIzQzOwlwb3J0ID0gcGh5ZGV2LSZndDttZGlvLmFkZHIgLSBwcml2LSZndDtwaHlfYmFzZV9hZGRyOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMDAKJiM0MzsJCSAqIGJpdDYgaW50X3BvbGFyaXR5IDEmIzM5O2IwIGxvdyBhY3RpdmUsIDEmIzM5O2IxIGhpZ2ggYWN0aXZlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0ICZhbXA7ICh+QklUKDYpKSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMTkKJiM0MzsJCSAqIGJpdDUgaW50cl9waHlfcHVsc2VfZW4gMSYjMzk7YjAgbGV2ZWwsIDEmIzM5O2IxIHB1bHNlCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjgKJiM0MzsJCSAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjcKJiM0MzsJCSAqIGJpdDE0OjggcGh5X3B1bHNlX2x0aCBiaXQ4OjcgdGltZXJfdGlja19zZWwgICBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDdhCQkgMHgwMDAyCQkgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoCiYjNDM7CQkgKiAweDAwNjQJCSAweDAwMDEJCSAgICAgICAgIDFtcyBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDRlCQkgMHgwMDAwCQkgICAgICAgICAxMDBtcyBwdWxzZSB3aWR0aAomIzQzOwkJICogMHgwMDA5CQkgMHgwMDAwCQkgICAgICAgICAxMG1zIHB1bHNlIHdpZHRoKGRlZmF1bHQpCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfjB4N2YwMDsKJiM0MzsJCXJldCB8PSAoMHgwMDA5ICZsdDsmbHQ7IDgpOwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0ICZhbXA7PSB+MHgxODA7CiYjNDM7CQlyZXQgfD0gKDB4MDAwMCAmbHQ7Jmx0OyA3KTsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJCSAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0MTAgUEhZMiBpbnRlcnJ1cHQgMTogcGh5MiBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDMgIFBIWTMgbGluayB1cCAxOiBwaHkzIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkJICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJCSAqIGJpdDAgIFBIWTAgbGluayB1cCAxOiBwaHkwIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCS8qIHRvcCBleHQgcmVnIDB4YTAxYQomIzQzOwkJICogYml0NSBpbnRuX3dvbF9tb2RlIDEmIzM5O2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0CiYjNDM7CQkgKiBiaXQ0IGludG5fbW9kZSAxJiMzOTtiMSBlbmFibGUgaW50biBwaW4gb3V0cHV0CiYjNDM7CQkgKi8KJiM0MzsJCXJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDFhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJCXJldCAmYW1wOz0gfkJJVCg1KTsKJiM0MzsJCXJldCB8PSBCSVQoNCk7CiYjNDM7CQlyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMWEsIHJldCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CQkvKiB0b3AgZXh0IHJlZyAweGEwMWIgaW50ZXJydXB0IG1hc2sKJiM0MzsJCSAqIGJpdDExIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDcgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0MyAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDEwIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDYgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0MiAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICoKJiM0MzsJCSAqIGJpdDkgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpbgomIzQzOwkJICogYml0NSAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKiBiaXQxIDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKgomIzQzOwkJICogYml0OCAxJiMzOTtiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluCiYjNDM7CQkgKiBiaXQ0IDEmIzM5O2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqIGJpdDAgMSYjMzk7YjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW4KJiM0MzsJCSAqLwomIzQzOwkJcmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwkJcmV0IHw9IChCSVQocG9ydCAmIzQzOyA4KSB8IEJJVChwb3J0ICYjNDM7IDQpIHwgQklUKHBvcnQpKTsKJiM0MzsJCXJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYiwgcmV0KTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsJfQomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB5dDg4MjRfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldCA9IDAsIG9sZF9wYWdlOwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CS8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcikKJiM0MzsJICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWQKJiM0MzsJICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkCiYjNDM7CSAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZAomIzQzOwkgKi8KJiM0MzsJcmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CXBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7CWlmIChyZXQgJmd0OyAwKQomIzQzOwkJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzOwllbHNlCiYjNDM7CQlyZXR1cm4gSVJRX05PTkU7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCBsaW5rID0gMDsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0ID0gMDsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlsaW5rID0gISEoX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpICZhbXA7CiYjNDM7CQkJICAgICBZVFBIWV9TU1JfTElOSyk7CiYjNDM7CiYjNDM7CW5ldGRldl9pbmZvKHBoeWRldi0mZ3Q7YXR0YWNoZWRfZGV2LCAmIzM0OyVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxuJiMzNDssCiYjNDM7CQkgICAgX19mdW5jX18sIHBoeWRldi0mZ3Q7bWRpby5hZGRyLCBsaW5rKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqIEBwYWdlOiBUaGUgcmVnIHBhZ2UoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB0bwomIzQzOyAqIG9wZXJhdGUuCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDEgKHV0cCBvciBmaWJlciBsaW5rKSwwIChubyBsaW5rKSBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsCiYjNDM7CQkJCSAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQgPSAwOwomIzQzOwomIzQzOwlwYWdlICZhbXA7PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHBhZ2UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0xQQSk7CiYjNDM7CSpscGEgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRyk7CiYjNDM7CSpzdGF0dXMgPSByZXQ7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSAhISgqc3RhdHVzICZhbXA7IFlUUEhZX1NTUl9MSU5LKTsKJiM0MzsKJiM0MztlcnJfcmVzdG9yZV9wYWdlOgomIzQzOwlyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpOwomIzQzO30KJiM0MzsKJiM0MzsvKioKJiM0MzsgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXgKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlpbnQgbGluazsKJiM0MzsJaW50IGxwYTsKJiM0MzsJaW50IHZhbDsKJiM0MzsKJiM0MzsJcGh5ZGV2LSZndDtwYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CXBoeWRldi0mZ3Q7c3BlZWQgPSBTUEVFRF9VTktOT1dOOwomIzQzOwlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9VTktOT1dOOwomIzQzOwomIzQzOwlsaW5rID0geXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCVlUODgyNF9SU1NSX1VUUF9TUEFDRSwgJmFtcDt2YWwsICZhbXA7bHBhKTsKJiM0MzsJaWYgKGxpbmsgJmx0OyAwKQomIzQzOwkJcmV0dXJuIGxpbms7CiYjNDM7CiYjNDM7CWlmIChsaW5rKSB7CiYjNDM7CQlwaHlkZXYtJmd0O2xpbmsgPSAxOwomIzQzOwkJcGh5ZGV2LSZndDtwYXVzZSA9ICEhKGxwYSAmYW1wOyBCSVQoMTApKTsKJiM0MzsJCXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9ICEhKGxwYSAmYW1wOyBCSVQoMTEpKTsKJiM0MzsKJiM0MzsJCS8qIHVwZGF0ZSBzcGVlZCAmYW1wOyBkdXBsZXggKi8KJiM0MzsJCXl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXBoeWRldi0mZ3Q7bGluayA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O3BhdXNlID0gMDsKJiM0MzsJCXBoeWRldi0mZ3Q7YXN5bV9wYXVzZSA9IDA7CiYjNDM7CQlwaHlkZXYtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKJiM0MzsJCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gRFVQTEVYX1VOS05PV047CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKQomIzQzOyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeV9kZXZpY2UKJiM0MzsgKgomIzQzOyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsCiYjNDM7CQkJICAgICAgIGludCByZWdfc3BhY2UpCiYjNDM7ewomIzQzOwlpbnQgb2xkX3BhZ2U7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CW9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTsKJiM0MzsJaWYgKG9sZF9wYWdlICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9QRE9XTjsKJiM0MzsJcmV0ICZhbXA7PSB+Qk1DUl9JU09MQVRFOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCQkgaW50IHJlZ19zcGFjZSkKJiM0Mzt7CiYjNDM7CWludCByZXQgPSAwLCBvbGRfcGFnZTsKJiM0MzsKJiM0MzsJb2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwlpZiAob2xkX3BhZ2UgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzOwlyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byBlcnJfcmVzdG9yZV9wYWdlOwomIzQzOwomIzQzO2Vycl9yZXN0b3JlX3BhZ2U6CiYjNDM7CXJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9wb3dlcl9vbigpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKiBuZWVkIFdBIGxpa2Ugc29mdHJlc2V0CiYjNDM7ICovCiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfb24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWlmIChwaHlkZXYtJmd0O2ludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIG9uICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCS8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKJiM0Mzt7CiYjNDM7CXJldHVybiB5dDg4MjRfcG93ZXJfb24ocGh5ZGV2KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDg4MjRfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJaWYgKHBoeWRldi0mZ3Q7aW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkgewomIzQzOwkJLyogaW52YWxpZCB0ZXN0IG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiB1dHAgcG93ZXIgZG93biAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQkvKiBub3JtYWwgbW9kZSAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCS8qIGludmFsaWQgdGVzdCBtb2RlICovCiYjNDM7CQlyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsCiYjNDM7CQkJCQkJICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogc2RzIGlzb2xhdGlvbiAqLwomIzQzOwkJcmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LAomIzQzOwkJCQkJCSAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogdXRwIHBvd2VyIGRvd24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkJLyogbm9ybWFsIG1vZGUgKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQkvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi8KJiM0MzsJCXJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldiwKJiM0MzsJCQkJCQkgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHl0ODgyNF9wb3dlcl9kb3duKHBoeWRldik7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHl0ODgyNF9jb25maWdfYW5lZygpCiYjNDM7ICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgJmFtcDtzdHJ1Y3QgcGh5X2RldmljZQomIzQzOyAqCiYjNDM7ICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGUKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQomIzQzO3sKJiM0MzsJaW50IHBoeV9jdHJsID0gMDsKJiM0MzsJaW50IG9sZF9wYWdlOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7CiYjNDM7CWlmIChvbGRfcGFnZSAmbHQ7IDApCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7CWlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsCiYjNDM7CQkJICAgICAgcGh5ZGV2LSZndDthZHZlcnRpc2luZykpCiYjNDM7CQlwaHlfY3RybCA9IE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHOwomIzQzOwomIzQzOwlyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sCiYjNDM7CQkJCSAgICAgTURJT19BTl8xMEdCVF9DVFJMLAomIzQzOwkJCQkgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLAomIzQzOwkJCQkgICAgIHBoeV9jdHJsKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCWdvdG8gZXJyX3Jlc3RvcmVfcGFnZTsKJiM0MzsKJiM0MzsJcmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlnb3RvIGVycl9yZXN0b3JlX3BhZ2U7CiYjNDM7CiYjNDM7ZXJyX3Jlc3RvcmVfcGFnZToKJiM0MzsJcmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogeXQ4ODI0X3Byb2JlKCkKJiM0MzsgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlfZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZQomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3BoeWRldi0mZ3Q7bWRpby5kZXY7CiYjNDM7CXN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjsKJiM0MzsJdTMyIHBoeV9iYXNlX2FkZHI7CiYjNDM7CiYjNDM7CXByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFwcml2KQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXBoeWRldi0mZ3Q7cHJpdiA9IHByaXY7CiYjNDM7CiYjNDM7CS8qIGdldCBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIGZvciBleHRlcm5hbCBZVDg4MjQgKi8KJiM0MzsJaWYgKCFkZXZpY2VfcHJvcGVydHlfcmVhZF91MzIoZGV2LCAmIzM0O21vdG9yY29tbSxiYXNlLWFkZHJlc3MmIzM0OywKJiM0MzsJCQkJICAgICAgJmFtcDtwaHlfYmFzZV9hZGRyKSkKJiM0MzsJCXByaXYtJmd0O3BoeV9iYXNlX2FkZHIgPSBwaHlfYmFzZV9hZGRyOwomIzQzOwllbHNlCiYjNDM7CQlwcml2LSZndDtwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjsKJiM0MzsKJiM0MzsJcHJpdi0mZ3Q7dG9wX3BoeV9hZGRyID0gcHJpdi0mZ3Q7cGh5X2Jhc2VfYWRkciAmIzQzOyA0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0gewomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUxMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MTFfY29uZmlnX2luaXQsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwkJLnJlYWRfcGFnZQk9IHl0ODUxMV9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQk9IHl0ODUxMV93cml0ZV9wYWdlLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUyMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCT0geXQ4NTIxX2dldF9mZWF0dXJlcywKJiM0MzsJCS5wcm9iZQkJPSB5dDg1MjFfcHJvYmUsCiYjNDM7CQkucmVhZF9wYWdlCT0geXQ4NTIxX3JlYWRfcGFnZSwKJiM0MzsJCS53cml0ZV9wYWdlCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCiYjNDM7CQkuZ2V0X3dvbAk9IHl0cGh5X2dldF93b2wsCiYjNDM7CQkuc2V0X3dvbAk9IHl0cGh5X3NldF93b2wsCiYjNDM7CQkuY29uZmlnX2FuZWcJPSB5dDg1MjFfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCT0geXQ4NTIxX2FuZWdfZG9uZSwKJiM0MzsJCS5jb25maWdfaW5pdAk9IHl0ODUyMV9jb25maWdfaW5pdCwKJiM0MzsJCS5yZWFkX3N0YXR1cwk9IHl0ODUyMV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CT0geXQ4NTIxX3NvZnRfcmVzZXQsCiYjNDM7CQkuc3VzcGVuZAk9IHl0ODUyMV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSB5dDg1MjFfcmVzdW1lLAomIzQzOwkJLmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCwKJiM0MzsJCS5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LAomIzQzOwkJLmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSwKJiM0MzsJCS5uYW1lCQk9ICYjMzQ7WVQ4NTIyIDEwMCBNZWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkuY29uZmlnX2FuZWcJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuY29uZmlnX2luaXQJPSB5dDg1MjJfY29uZmlnX2luaXQsCiYjNDM7CQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAomIzQzOwkJLnJlc3VtZQkJPSBnZW5waHlfcmVzdW1lLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksCiYjNDM7CQkubmFtZQkJPSAmIzM0O1lUODUzMSBHaWdhYml0IEV0aGVybmV0JiMzNDssCiYjNDM7CQkucHJvYmUJCT0geXQ4NTMxX3Byb2JlLAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTMxX2NvbmZpZ19pbml0LAomIzQzOwkJLnN1c3BlbmQJPSBnZW5waHlfc3VzcGVuZCwKJiM0MzsJCS5yZXN1bWUJCT0gZ2VucGh5X3Jlc3VtZSwKJiM0MzsJCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKJiM0MzsJCS5zZXRfd29sCT0geXQ4NTMxX3NldF93b2wsCiYjNDM7CQkubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSwKJiM0MzsJCS5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsCiYjNDM7CQkubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCwKJiM0MzsJCS5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLAomIzQzOwkJLm5hbWUJCT0gJiMzNDtZVDg1MzFTIEdpZ2FiaXQgRXRoZXJuZXQmIzM0OywKJiM0MzsJCS5nZXRfZmVhdHVyZXMJPSB5dDg1MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnByb2JlCQk9IHl0ODUyMV9wcm9iZSwKJiM0MzsJCS5yZWFkX3BhZ2UJPSB5dDg1MjFfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJPSB5dDg1MjFfd3JpdGVfcGFnZSwKJiM0MzsJCS5nZXRfd29sCT0geXRwaHlfZ2V0X3dvbCwKJiM0MzsJCS5zZXRfd29sCT0geXRwaHlfc2V0X3dvbCwKJiM0MzsJCS5jb25maWdfYW5lZwk9IHl0ODUyMV9jb25maWdfYW5lZywKJiM0MzsJCS5hbmVnX2RvbmUJPSB5dDg1MjFfYW5lZ19kb25lLAomIzQzOwkJLmNvbmZpZ19pbml0CT0geXQ4NTIxX2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCT0geXQ4NTIxX3JlYWRfc3RhdHVzLAomIzQzOwkJLnNvZnRfcmVzZXQJPSB5dDg1MjFfc29mdF9yZXNldCwKJiM0MzsJCS5zdXNwZW5kCT0geXQ4NTIxX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQk9IHl0ODUyMV9yZXN1bWUsCiYjNDM7CX0sCiYjNDM7CXsKJiM0MzsJCVBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODIxKSwKJiM0MzsJCS5uYW1lCQkJPSAmIzM0O1lUODgyMSAyLjVHYnBzIFBIWSYjMzQ7LAomIzQzOwkJLmdldF9mZWF0dXJlcwkJPSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLAomIzQzOwkJLnJlYWRfcGFnZQkJPSB5dDg1MjFfcmVhZF9wYWdlLAomIzQzOwkJLndyaXRlX3BhZ2UJCT0geXQ4NTIxX3dyaXRlX3BhZ2UsCiYjNDM7CQkuZ2V0X3dvbAkJPSB5dHBoeV9nZXRfd29sLAomIzQzOwkJLnNldF93b2wJCT0geXRwaHlfc2V0X3dvbCwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSBnZW5waHlfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyMV9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODIxX2NvbmZpZ19pbml0LAomIzQzOwkJLmdldF9yYXRlX21hdGNoaW5nCT0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyMV9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyMV9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODIxX3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjFfcmVzdW1lLAomIzQzOwl9LAomIzQzOwl7CiYjNDM7CQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksCiYjNDM7CQkubmFtZQkJCT0gJiMzNDtZVDg4MjQgUXVhZCBQb3J0cyAyLjVHYnBzIEV0aGVybmV0JiMzNDssCiYjNDM7CQkuZ2V0X2ZlYXR1cmVzCQk9IHl0ODgyMV9nZXRfZmVhdHVyZXMsCiYjNDM7CQkucmVhZF9wYWdlCQk9IHl0ODgyNF9yZWFkX3BhZ2UsCiYjNDM7CQkud3JpdGVfcGFnZQkJPSB5dDg4MjRfd3JpdGVfcGFnZSwKJiM0MzsJCS5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLAomIzQzOwkJLmhhbmRsZV9pbnRlcnJ1cHQJPSB5dDg4MjRfaGFuZGxlX2ludGVycnVwdCwKJiM0MzsJCS5wcm9iZQkJICAgICAgICA9IHl0ODgyNF9wcm9iZSwKJiM0MzsJCS5jb25maWdfYW5lZwkJPSB5dDg4MjRfY29uZmlnX2FuZWcsCiYjNDM7CQkuYW5lZ19kb25lCQk9IHl0ODgyNF9hbmVnX2RvbmUsCiYjNDM7CQkuY29uZmlnX2luaXQJCT0geXQ4ODI0X2NvbmZpZ19pbml0LAomIzQzOwkJLnJlYWRfc3RhdHVzCQk9IHl0ODgyNF9yZWFkX3N0YXR1cywKJiM0MzsJCS5zb2Z0X3Jlc2V0CQk9IHl0ODgyNF9zb2Z0X3Jlc2V0LAomIzQzOwkJLnN1c3BlbmQJCT0geXQ4ODI0X3N1c3BlbmQsCiYjNDM7CQkucmVzdW1lCQkJPSB5dDg4MjRfcmVzdW1lLAogCX0sCiB9OwogCiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpOwogCi1NT0RVTEVfREVTQ1JJUFRJT04oJiMzNDtNb3RvcmNvbW0gODUxMS84NTIxLzg1MzEvODUzMVMvODgyMSBQSFkgZHJpdmVyJiMzNDspOwomIzQzO01PRFVMRV9ERVNDUklQVElPTigmIzM0O01vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlciYjMzQ7KTsKIE1PRFVMRV9BVVRIT1IoJiMzNDtQZXRlciBHZWlzJiMzNDspOwogTU9EVUxFX0FVVEhPUigmIzM0O0ZyYW5rJiMzNDspOwomIzQzO01PRFVMRV9BVVRIT1IoJiMzNDtLeWxlJiMzNDspOwogTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0gewpAQCAtMzE2MSw2ICYjNDM7NDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0gewogCXsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sCiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpIH0sCiAJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSwKJiM0MzsJeyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSwKIAl7IC8qIHNlbnRpbmVsICovIH0KIH07CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzMTkKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXcgUEhZIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaC4gSXQgaW50cm9kdWNlcyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWSBkcml2ZXIgd2l0aGluIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBDbGVhcmx5LCB0aGlzIGlzIGEgZmFpcmx5IHN1YnN0YW50aWFsIGFkZGl0aW9uLCB3aXRoIGEgbG90IG9mIGNvZGUgZm9yIHJlZ2lzdGVyIG1hbmlwdWxhdGlvbiwgcmVzZXQsIGFuZCBpbml0aWFsaXphdGlvbiDigJMgdGhlIHVzdWFsIHN1c3BlY3RzIGZvciBhIFBIWSBkcml2ZXIuIFRoZSBZVDg4MjQgaXMgYSBNb3RvcmNvbW0gcXVhZC1wb3J0IDIuNUdicHMgRXRoZXJuZXQgUEhZLCBoYXJkd2FyZS1zcGVjaWZpYywgb2YgY291cnNlLgoKTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgZXhlY3V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGlzIHdoZXJlIGEgbG90IG9mIG15IGRlYnVnZ2luZyBoYXBwZW5zLiBOb3JtYWxseSwgd2l0aCBQSFkgZHJpdmVycywgeW914oCZcmUgc3R1Y2sgd2l0aCB0aGUgaGFyZHdhcmUsIG9yIHlvdSBuZWVkIHNvbWUga2luZCBvZiBNRElPIGJ1cyBlbXVsYXRpb24gdG8gZXZlbiBnZXQgdGhlIGRyaXZlciBsb2FkZWQuIFlvdSYjMzk7ZCBuZWVkIGEgd2F5IHRvIGVtdWxhdGUgdGhlIHBoeXNpY2FsIGhhcmR3YXJlLiBMaW51eCBQSFkgZHJpdmVycyBiaW5kIHRvIE1ESU8gZGV2aWNlcyBiYXNlZCBvbiB0aGVpciBQSFkgSUQuCgpDYW4gSSBpbnN0YW50aWF0ZSB0aGlzIGRyaXZlciB0aHJvdWdoIHNvZnR3YXJlLCB3aXRob3V0IHRoZSBhY3R1YWwgWVQ4ODI0IHByZXNlbnQ/IE1vc3QgbGlrZWx5IG5vdCBkaXJlY3RseS4gSSYjMzk7dmUgdXNlZCBgbWFjYmAgYW5kIG90aGVyIGVtdWxhdGVkIE5JQ3MgYmVmb3JlLCBidXQgdGhleSB1c3VhbGx5IGNvbWUgd2l0aCB0aGVpciBvd24gcHJlLWNvbmZpZ3VyZWQgb3IgZ2VuZXJpYyBQSFlzLiBJIHN0YXJ0IHRoaW5raW5nIG9mIHdheXMgdG8gZ2V0IGF0IHRoaXMgY29kZS4uLgoKV2FpdCwgZG9lc24mIzM5O3Qgc3l6a2FsbGVyIGhhdmUgc29tZSB0cmljayB1cCBpdHMgc2xlZXZlIGZvciBpbmplY3RpbmcgTURJTyBkZXZpY2VzLCBvciBtYXliZSBpdCBjYW4gdXNlIGBmYWtlZGV2YCBmb3Igc29tZXRoaW5nIGxpa2UgdGhpcz8gTmFoLCBzeXprYWxsZXLigJlzIG5vdCB1c3VhbGx5IGluIHRoZSBidXNpbmVzcyBvZiBmdWxsIE1ESU8gUEhZIGVtdWxhdGlvbiwgdW5sZXNzIHRoZXJlIGlzIGEgY3VzdG9tIHZpcnR1YWwgTURJTyBkcml2ZXIuCgpPa2F5LCBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbiBleGlzdGluZyB2aXJ0dWFsIE1ESU8gZHJpdmVyIHNvbWV3aGVyZSBpbiB0aGUga2VybmVsLiBNYXliZSBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9ja3VwLmNgIG9yIHNvbWV0aGluZyBzaW1pbGFyPyBJJiMzOTtkIGJldHRlciBjaGVjayBmb3IgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2t1cCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcwMTMKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAxMjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhwbG9yaW5nIFVzZXJzcGFjZSBDb250cm9sIG9mIFBIWSBEcml2ZXJzKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUmIzM5O3MgYSBwcmFjdGljYWwgbWV0aG9kIHRvIGludGVyYWN0IHdpdGggUEhZIGRyaXZlcnMgZGlyZWN0bHkgZnJvbSB1c2Vyc3BhY2UuIEl0JiMzOTtzIHNvbWV0aGluZyBJJiMzOTt2ZSBjb25zaWRlcmVkIGJlZm9yZSwgYW5kIEkgc2VlbSB0byByZWNhbGwgY2VydGFpbiBzY2VuYXJpb3Mgd2hlcmUgdXNlcnNwYWNlIGNhbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgY2FzZXMgdXNpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBvciBzaW1pbGFyIG9uZXMsIHJpZ2h0PyBIb3dldmVyLCB0aGF0JiMzOTtzIG5vdCBxdWl0ZSB3aGF0IEkgYW0gbG9va2luZyBmb3IuCgpOb3cgdGhhdCBJIHRoaW5rIGFib3V0IGl0LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIGZpbGUuIFBlcmhhcHMgdGhlcmUmIzM5O3MgYSBzeXNmcyBvciBuZXRsaW5rIGludGVyZmFjZSBleHBvc2VkIHRoZXJlLCBhbHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgZHVyaW5nIGJvb3QgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIG9yIGJ5IFBDSSBkZXZpY2VzIHJlZ2lzdGVyaW5nIE1ESU8gYnVzZXMuCgpJJiMzOTttIHdvbmRlcmluZy4uLiBJcyB0aGVyZSBzdWNoIGEgdGhpbmcgYXMgYSB2aXJ0dWFsIE1ESU8gYnVzPyBJZiBzbywgdGhhdCBjb3VsZCBiZSBhIHNpZ25pZmljYW50IGVuYWJsZXIuIFRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyLCBJJiMzOTtsbCBzZWFyY2ggdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgYW55IG9jY3VycmVuY2VzIG9mICYjMzQ7bWRpbyYjMzQ7IGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGRpcmVjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2aXJ0dWFsLiptZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw9MTc9cHJvcGVydGllczpcbi0tXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTE5LSAgICBlbnVtOlxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbDoyMDogICAgICAtIHZpcnR1YWwsbWRpby1ncGlvXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTIxLSAgICAgIC0gbWljcm9jaGlwLG1kaW8tc21pMFxuLS1cbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw9NDE9ZXhhbXBsZXM6XG4tLVxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00Ny0gICAgbWRpbzA6IG1kaW8ge1xuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbDo0ODogICAgICBjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTQ5LSAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzPTE1Mj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktZGxpbmstZG5zLTMxMy5kdHM6MTUzOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzLTE1NC1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMTBiLmR0cz02Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzOjY4Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMTBiLmR0cy02OS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cz02Nj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIyMGIuZHRzOjY3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cy02OC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5zMjUwMi5kdHM9MzI9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5zMjUwMi5kdHM6MzM6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cy0zNC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM9NTk9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM6NjA6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktcnV0MXh4LmR0cy02MS1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cz03MT1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc2w5MzUxMnIuZHRzOjcyOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cy03My1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cz01Nj1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc3EyMDEuZHRzOjU3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cy01OC1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNzaTEzMjguZHRzPTMyPVx0bWRpbzA6IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0czozMzpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0cy0zNC1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cz01Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktdmVyYmF0aW0tczA4djE5MDEtZDEuZHRzOjU4Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cy01OS1cdFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDExMS5kdHM9NzE9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDExMS5kdHM6NzI6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cy03My1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM9NzA9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM6NzE6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMjIyLmR0cy03Mi1cdFx0Z3Bpb3MgPSBcdTAwM2NcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBNREMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cz0xNjM9XHRtZGlvX2dwaW86IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktcmR1MS5kdHM6MTY0Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cy0xNjUtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NTEtemlpLXNjdTItbWV6ei5kdHM9NDA9XHRtZGlvX2dwaW86IG1kaW8ge1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0czo0MTpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0cy00Mi1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cS1ieDUwdjMuZHRzaT05Nz1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2k6OTg6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2ktOTktXHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2Z3BpbzIgNSBHUElPX0FDVElWRV9ISUdIXHUwMDNlLCAvKiBtZGMgKi9cbi0tXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxZGwtemlpLXJkdTIuZHRzaT0xOT1cdG1kaW8xOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpOjIwOlx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxZGwtemlpLXJkdTIuZHRzaS0yMS1cdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHM9NTM9XHRtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHM6NTQ6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHMtNTUtXHRcdHBpbmN0cmwtbmFtZXMgPSBcJiMzNDtkZWZhdWx0XCYjMzQ7O1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM9NTU9XHRtZGlvMDogbWRpby0wIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHMtNTYtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzOjU3Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzLTU4LVx0XHRncGlvcyA9IFx1MDAzY1x1MDAyNnFjb21fcGlubXV4IDEgR1BJT19BQ1RJVkVfSElHSFx1MDAzZSxcbi0tXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzPTE4MD1cdG1kaW8xOiBtZGlvLTEge1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODEtXHRcdHN0YXR1cyA9IFwmIzM0O29rYXlcJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzOjE4MjpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODMtXHRcdGdwaW9zID0gXHUwMDNjXHUwMDI2cWNvbV9waW5tdXggMTEgR1BJT19BQ1RJVkVfSElHSFx1MDAzZSxcbi0tXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzPTExOD1cdG1kaW8wOiBtZGlvIHtcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxMzNjLXByaWhtYi5kdHM6MTE5Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzLTEyMC1cdFx0I2FkZHJlc3MtY2VsbHMgPSBcdTAwM2MxXHUwMDNlO1xuLS1cbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM9Mzg9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWMuZHRzOjM5Olx0XHRjb21wYXRpYmxlID0gXCYjMzQ7dmlydHVhbCxtZGlvLWdwaW9cJiMzNDs7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWMuZHRzLTQwLVx0XHQjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4tLVxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFsLmR0c2k9NDQ9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaTo0NTpcdFx0Y29tcGF0aWJsZSA9IFwmIzM0O3ZpcnR1YWwsbWRpby1ncGlvXCYjMzQ7O1xuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFsLmR0c2ktNDYtXHRcdCNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbi0tXG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXEtemlpLXVsdHJhLmR0c2k9MTg9XHRtZGlvMDogbWRpbyB7XG5hcmNoL2FybTY0L2Jvb3QvZHRzL2ZyZWVzY2FsZS9pbXg4bXEtemlpLXVsdHJhLmR0c2k6MTk6XHRcdGNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OztcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaS0yMC1cdFx0cGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4tLVxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9tZGlvL21kaW8tZ3Bpby5jOjE5ODpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDt2aXJ0dWFsLG1kaW8tZ3Bpb1wmIzM0OywgfSxcbmRyaXZlcnMvbmV0L21kaW8vbWRpby1ncGlvLmMtMTk5LVx0eyAuY29tcGF0aWJsZSA9IFwmIzM0O21pY3JvY2hpcCxtZGlvLXNtaTBcJiMzNDsgfSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDY4MgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDQ4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFbXVsYXRpbmcgYSBQSFkgRGV2aWNlIHdpdGggU3l6a2FsbGVyKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIHRlc3QgdGhlIGBtb3RvcmNvbW1gIFBIWSBkcml2ZXIuIFRoZSBjaGFsbGVuZ2UgaXMsIGhvdyBkbyBJIGdldCB0aGUga2VybmVsIHRvIGxvYWQgaXQgd2l0aG91dCBhbiBhY3R1YWwgUEhZIGRldmljZT8gSG1tLCBgbWRpby1ncGlvYCBpcyBhIGJpdC1iYW5naW5nIGRyaXZlciwgc28gdGhhdCYjMzk7cyBvdXQuIENhbiBJIHNvbWVob3cgZW11bGF0ZSBhIFBIWSBpbiBzb2Z0d2FyZT8gYG1hYzgwMjExX2h3c2ltYCwgYGR1bW15YCwgYG5ldGRldnNpbWAsIGB0dW5gL2B0YXBgLCBgdmV0aGAg4oCTIG5vbmUgb2YgdGhvc2Ugc2VlbSB0byBoYXZlIGFueXRoaW5nIFBIWS1yZWxhdGVkLgoKQnV0IHdhaXQsIHdoYXQgYWJvdXQgYHVzYm5ldGA/IFNvbWUgVVNCIG5ldHdvcmsgYWRhcHRlcnMgKmRvKiBoYXZlIFBIWXMhIEFuZCwgY3J1Y2lhbCBwb2ludCwgc3l6a2FsbGVyICpjYW4qIGVtdWxhdGUgVVNCIGRldmljZXMgdXNpbmcgYGR1bW15X2hjZGAuCgpUaGUgaWRlYSBpczogaWYgc3l6a2FsbGVyIGVtdWxhdGVzIGEgVVNCIG5ldHdvcmsgYWRhcHRlciB0aGF0ICpleHBvc2VzKiBhbiBNRElPIGJ1cywgdGhlbiBpdCBjYW4gcHJvdmlkZSBhcmJpdHJhcnkgUEhZIElEcy4gVGhlIGtlcm5lbCBzaG91bGQgdGhlbiBiaW5kIHRoZSBjb3JyZXNwb25kaW5nIFBIWSBkcml2ZXIg4oCTIHNwZWNpZmljYWxseSwgdGhlIGBtb3RvcmNvbW1gIGRyaXZlciEKCkxldCYjMzk7cyBzZWUuIEFyZSB0aGVyZSBhbnkgVVNCIG5ldHdvcmsgZHJpdmVycyB0aGF0IHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCBsZXQgdGhlIGRldmljZSBzcGVjaWZ5IHRoZSBQSFkgSUQsIG9yIGF0IGxlYXN0IHNjYW4gdGhlIGJ1cz8gQmluZ28hIExvb2tzIGxpa2UgYHNtc2M5NXh4YCwgYGFzaXhgLCBgcjgxNTJgLCBgbGFuNzh4eGAsIG1heWJlIGV2ZW4gYGNkY19ldGhlcmAsIGFuZCBgYXg4ODE3OV8xNzhhYC4KCkFoYSEgU28sIGlmIGEgVVNCIGRldmljZSBleHBvc2VzIGFuIE1ESU8gYnVzLCB0aGUga2VybmVsIHdpbGwgcHJvYmUgdGhhdCBidXMuIFRoZSBVU0IgZGV2aWNlICh3aGljaCBzeXprYWxsZXIgd2lsbCBlbXVsYXRlKSBjYW4gdGhlbiAqcmVzcG9uZCogdG8gdGhvc2UgTURJTyByZWFkIHJlcXVlc3RzIOKAkyBzcGVjaWZpY2FsbHksIGZvciByZWdpc3RlcnMgMiBhbmQgMywgd2hpY2ggY29udGFpbiB0aGUgUEhZIElEIOKAkyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBUaGF0JiMzOTtzIHRoZSBrZXkuIFRoZSBrZXJuZWwgKnNob3VsZCogbG9hZCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYW5kIHNvIG9uLgoKTm93LCBjYW4gc3l6a2FsbGVyIGFjdHVhbGx5ICpyZWFjaCogTURJTyB0aHJvdWdoIFVTQj8gU3l6a2FsbGVyIGhhcyBVU0IgZnV6emluZyAoYHN5el91c2JfY29ubmVjdGApLiBJdCBjYW4gZGVmaW5pdGVseSBlbXVsYXRlIGEgVVNCIGRldmljZS4gSWYgSSBtYWtlIGl0IGVtdWxhdGUgYSBVU0IgZGV2aWNlIHRoYXQgdXNlcyBhIGRyaXZlciBsaWtlIGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgb3IgYGFzaXhgLCB0aG9zZSBkcml2ZXJzICpyZWdpc3RlciogYW4gTURJTyBidXMuIFdoZW4gdGhlIE1ESU8gYnVzIGdldHMgc2Nhbm5lZCwgdGhlIGRyaXZlciBoYXMgdG8gdHJhbnNsYXRlIE1ESU8gcmVhZHMgaW50byBVU0IgY29udHJvbCBtZXNzYWdlcy4gU3l6a2FsbGVyIHNob3VsZCBpbnRlcmNlcHQgdGhvc2UgVVNCIGNvbnRyb2wgbWVzc2FnZXMsIGFuZCB0aGF0JiMzOTtzIHRoZSBwZXJmZWN0IG9wcG9ydHVuaXR5IHRvIHJldHVybiB0aGUgY3VzdG9tIFBIWSBJRC4KCk9rYXksIG5vdyBsZXQmIzM5O3MganVzdCBjb25maXJtIHRoYXQgYGxhbjc4eHhgIG9yIGBzbXNjOTV4eGAgKmRvZXMqIHJlZ2lzdGVyIGFuIE1ESU8gYnVzIGFuZCB3ZSYjMzk7cmUgaW4gYnVzaW5lc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpb2J1c19yZWdpc3RlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jPTY2OT1zdGF0aWMgaW50IGF4ODg3NzJfaW5pdF9tZGlvKHN0cnVjdCB1c2JuZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmMtNjg2LVxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jOjY4NzpcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cdTAwM2VtZGlvKTtcbmRyaXZlcnMvbmV0L3VzYi9hc2l4X2RldmljZXMuYy02ODgtXHRpZiAocmV0KSB7XG4tLVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM9NjE9c3RhdGljIGludCBheDg4MTcyYV9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTc5LVxuZHJpdmVycy9uZXQvdXNiL2F4ODgxNzJhLmM6ODA6XHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXHUwMDNlbWRpbyk7XG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy04MS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jPTIwOTE9c3RhdGljIGludCBsYW43OHh4X21kaW9faW5pdChzdHJ1Y3QgbGFuNzh4eF9uZXQgKmRldilcbi0tXG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjEtXHRub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2LVx1MDAzZXVkZXYtXHUwMDNlZGV2Lm9mX25vZGUsIFwmIzM0O21kaW9cJiMzNDspO1xuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYzoyMTIyOlx0cmV0ID0gb2ZfbWRpb2J1c19yZWdpc3RlcihkZXYtXHUwMDNlbWRpb2J1cywgbm9kZSk7XG5kcml2ZXJzL25ldC91c2IvbGFuNzh4eC5jLTIxMjMtXHRvZl9ub2RlX3B1dChub2RlKTtcbi0tXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYz0xMTQ3PXN0YXRpYyBpbnQgc21zYzk1eHhfYmluZChzdHJ1Y3QgdXNibmV0ICpkZXYsIHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmKVxuLS1cbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYzoxMjQyOlx0cmV0ID0gbWRpb2J1c19yZWdpc3RlcihwZGF0YS1cdTAwM2VtZGlvYnVzKTtcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDMtXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA4MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIFlUODgyNCBQSFkgRHJpdmVyIHZpYSBVU0IgRnV6emluZyoqCgpPa2F5LCBzbyB0aGlzIGlzIGV4Y2l0aW5nLiBJJiMzOTt2ZSBnb3QgdGhpcyBmaWd1cmVkIG91dDogYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBgYXNpeGAsIGFuZCBgYXg4ODE3MmFgIOKAkyB0aGV5IGFsbCByZWdpc3RlciBhbiBNRElPIGJ1cy4gVGhhdCBNRElPIGJ1cywgd2hlbiByZWdpc3RlcmVkLCBnZXRzIHNjYW5uZWQgYnkgdGhlIGtlcm5lbCwgd2hpY2ggcmVhZHMgUEhZIHJlZ2lzdGVycyAyIGFuZCAzIHRvIGdyYWIgdGhlIFBIWSBJRC4gVGhlIFVTQiBkcml2ZXIgY2xldmVybHkgdHJhbnNsYXRlcyB0aG9zZSBNRElPIHJlYWRzIGludG8gVVNCIGNvbnRyb2wgdHJhbnNmZXJzLiBUaGlzIG1lYW5zIHRoYXQgU3l6a2FsbGVyJiMzOTtzIFVTQiBmdXp6ZXIgKmNhbiogcmVzcG9uZCB0byB0aG9zZSBjb250cm9sIHRyYW5zZmVycyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gdGhlIGtlcm5lbCB3aWxsLCBubyBxdWVzdGlvbiwgaW5zdGFudGlhdGUgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIGFuZCBjYWxsIGl0cyBtZXRob2RzLiBUaGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNvbWUgdGFyZ2V0ZWQgVVNCIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGFjdHVhbGx5IGJlaW5nIGludHJvZHVjZWQsIGFuZCB3aGF0IHdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYFlUODgyNGAgUEhZLiBJIGNhbiBzZWUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZDoKCiogICBgeXQ4ODI0X3JlYWRfcGFnZWAKKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZGAKKiAgIGB5dDg4MjRfc29mdF9yZXNldGAKKiAgIGB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWRgCiogICBgeXQ4ODI0X2ludGVybmFsX2NvbmZpZ19pbml0X3BhZ2VkYAoqICAgYHl0ODgyNF9jb25maWdfaW5pdGAKKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgCiogICBgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgeXQ4ODI0X2FuZWdfZG9uZWAKKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWRgCiogICBgeXQ4ODI0X3JlYWRfc3RhdHVzYAoqICAgYHl0ODgyNF91dHBfcG93ZXJfb25gCiogICBgeXQ4ODI0X3V0cF9wb3dlcl9kb3duYAoqICAgYHl0ODgyNF9wb3dlcl9vbmAKKiAgIGB5dDg4MjRfcmVzdW1lYAoqICAgYHl0ODgyNF9wb3dlcl9kb3duYAoqICAgYHl0ODgyNF9zdXNwZW5kYAoqICAgYHl0ODgyNF9jb25maWdfYW5lZ2AKKiAgIGB5dDg4MjRfcHJvYmVgCgpBbHNvLCBzb21lIGhlbHBlciBmdW5jdGlvbnMgZ290IGFkZGVkOgoKKiAgIGB5dHBoeV90b3Bfd3JpdGVgCiogICBgeXRwaHlfdG9wX3JlYWRgCiogICBgeXRwaHlfcmVhZF90b3BfZXh0YAoqICAgYHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2tgCiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dGAKKiAgIGB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9ja2AKKiAgIGB5dHBoeV93cml0ZV9tbWRgCgpCYXNlZCBvbiBteSBleHBlcmllbmNlLCB0aGUgbWFpbiBlbnRyeSBwb2ludHMgZm9yIHRoaXMgUEhZIGRyaXZlciBhcmUgdGhlIG9uZXMgdG8gZm9jdXMgb24gZm9yIGZ1enppbmc6CgoqICAgYHl0ODgyNF9wcm9iZWAKKiAgIGB5dDg4MjRfY29uZmlnX2luaXRgCiogICBgeXQ4ODI0X2NvbmZpZ19hbmVnYAoqICAgYHl0ODgyNF9yZWFkX3N0YXR1c2AKKiAgIGB5dDg4MjRfc29mdF9yZXNldGAKKiAgIGB5dDg4MjRfc3VzcGVuZGAKKiAgIGB5dDg4MjRfcmVzdW1lYAoqICAgYHl0ODgyNF9jb25maWdfaW50cmAKKiAgIGB5dDg4MjRfaGFuZGxlX2ludGVycnVwdGAKKiAgIGB5dDg4MjRfYW5lZ19kb25lYAoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB0aGUgc3BlY2lmaWMgY29uZmlnIG9wdGlvbnMgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGVuYWJsZWQuIFRoZSBmaWxlIGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGVuYWJsZXMgdGhpcyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb3RvcmNvbW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTE2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipQb3RlbnRpYWwgTG9jYXRpb246IEludmVzdGlnYXRpbmcgdGhlIFBIWSBNYWtlZmlsZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBuZXR3b3JrIFBIWSBjb25maWd1cmF0aW9uLiBJIGluaXRpYWxseSBoYWQgYSBodW5jaCwgYnV0IGl0JiMzOTtzIG5vdCBxdWl0ZSB3b3JraW5nIG91dCB0aGUgd2F5IEkgdGhvdWdodC4gSW5zdGVhZCBvZiBnb2luZyBkb3duIGEgcmFiYml0IGhvbGUsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBQSFkgZHJpdmVycywgYW5kIHRoZSBNYWtlZmlsZSBzaG91bGQsIGF0IGEgbWluaW11bSwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhvc2UgZHJpdmVycyBhcmUgYnVpbHQgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZWl0aGVyIHRoZSBhbnN3ZXIgZGlyZWN0bHkgaW4gdGhlIE1ha2VmaWxlIG9yIGF0IGxlYXN0IGEgcG9pbnRlciB0byB0aGUgcmVsZXZhbnQgc291cmNlIGZpbGVzIG9yIEtjb25maWcgb3B0aW9ucyB0aGF0IGNvbnRyb2wgdGhlIGluY2x1c2lvbiBvZiB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE0IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21vdG9yY29tbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9ODI9b2JqLSQoQ09ORklHX01JQ1JPU0VNSV9QSFkpXHQmIzQzOz0gbXNjYy9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcdCYjNDM7PSBtb3RvcmNvbW0ub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTg0LW9iai0kKENPTkZJR19OQVRJT05BTF9QSFkpXHQmIzQzOz0gbmF0aW9uYWwub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDQ0MQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3Mgc2VlLCB0aGUgc3lzdGVtJiMzOTtzIGhpZ2hsaWdodGluZyBgQ09ORklHX01PVE9SQ09NTV9QSFlgLiBSaWdodCwgdGhhdCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGEgTW90b3JDb21tIFBIWSwgbGlrZWx5IGEgZHJpdmVyIGZvciBhIHNwZWNpZmljIHBoeXNpY2FsIGxheWVyIGludGVyZmFjZS4gR2l2ZW4gdGhhdCwgbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCYjMzk7cyBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgdGhlIG9uZSByZWxhdGVkIHRvIG5ldHdvcmsgUEhZIGRyaXZlcnMuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgbG9jYXRlIHRoZSBkZWZpbml0aW9uIGZvciBgTU9UT1JDT01NX1BIWWAuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhYm91dCB0aGUgaGFyZHdhcmUgaXRzZWxmIG9yIHBvc3NpYmx5IHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGluIHRoaXMgZmlsZS4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24gdGllcyBpbnRvIHRoZSBicm9hZGVyIG5ldHdvcmsgc3Vic3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xNCAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTU9UT1JDT01NX1BIWSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTMzOD1jb25maWcgTUlDUk9TRU1JX1BIWVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTM0Ni1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjM0Nzpjb25maWcgTU9UT1JDT01NX1BIWVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ4LVx0dHJpc3RhdGUgXCYjMzQ7TW90b3Jjb21tIFBIWXNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzQ3NDYKCQkJCQkJCW91dHB1dDogMjY4CgkJCQkJCQl0aG91Z2h0czogOTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBZVDg4MjQgUEhZIERyaXZlciBmb3IgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIG1pbmltYWwgY29uZmlndXJhdGlvbiByZXF1aXJlZCB0byByZWFjaCB0aGlzIG5ldyBNb3RvcmNvbW0gWVQ4ODI0IFBIWSBkcml2ZXIgY29kZS4gVGhlIHBhdGNoIGl0c2VsZiBvbmx5IHRvdWNoZXMgYG1vdG9yY29tbS5jYCwgc28gSSYjMzk7bSB0aGlua2luZyB0aGUgYE1PVE9SQ09NTV9QSFlgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgbmV3IG9uZSBuZWVkZWQuIFNpbmNlIHRoZSBnb2FsIGlzIHRvIHJlYWNoIHRoaXMgdGhyb3VnaCBVU0IgbmV0d29yayBkcml2ZXJzLCBsaWtlIGBVU0JfTEFONzhYWGAgb3IgYFVTQl9ORVRfU01TQzk1WFhgLCBJIHRoaW5rIHRob3NlIGFyZSBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyJiMzOTtzIGRlZmF1bHRzLiBTbywgSSYjMzk7bGwgc3RhcnQgd2l0aCBqdXN0IHNwZWNpZnlpbmcgYE1PVE9SQ09NTV9QSFlgLgoKTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlkZW50aWZ5aW5nIHJlYWNoYWJsZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhY2Nlc3NpYmxlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCYjMzk7cyByZWdpc3RlcmVkIGFzIGAuaGFuZGxlX2ludGVycnVwdGAuIFRoZSBQSFkgZnJhbWV3b3JrIGNhbGxzIHRoaXMgd2hlbiB0aGVyZSYjMzk7cyBhbiBpbnRlcnJ1cHQuIElmIEkgY2FuIHRyaWdnZXIgUEhZIGludGVycnVwdHMg4oCTIG1heWJlIHRocm91Z2ggZmFrZWRldiBvciBVU0IgaW50ZXJydXB0IGVuZHBvaW50cyDigJMgdGhlbiBJIHNob3VsZCBiZSBhYmxlIHRvIGhpdCB0aGF0IGZ1bmN0aW9uLiBFdmVuIGlmIHRoYXQgcHJvdmVzIHRyaWNreSwgdGhlIG90aGVyIGZ1bmN0aW9ucyDigJMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYHJlYWRfc3RhdHVzYCwgYHNvZnRfcmVzZXRgLCBgY29uZmlnX2FuZWdgLCBgc3VzcGVuZGAsIGFuZCBgcmVzdW1lYCDigJMgYXJlICpkZWZpbml0ZWx5KiByZWFjaGFibGUgZHVyaW5nIHRoZSBub3JtYWwgUEhZIHN0YXRlIG1hY2hpbmUgdHJhbnNpdGlvbnMuCgpTbywgbGV0JiMzOTtzIGxpc3Qgb3V0IGFsbCB0aGUgZm9jdXMgc3ltYm9scywgbWFraW5nIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gSSYjMzk7dmUgZ290OgoKKiAgIGB5dDg4MjRfcHJvYmVgCiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YAoqICAgYHl0ODgyNF9jb25maWdfYW5lZ2AKKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNgCiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgCiogICBgeXQ4ODI0X3N1c3BlbmRgCiogICBgeXQ4ODI0X3Jlc3VtZWAKKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgCiogICBgeXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRgCiogICBgeXQ4ODI0X2FuZWdfZG9uZWAKKiAgIGB5dDg4MjRfcmVhZF9wYWdlYAoqICAgYHl0ODgyNF93cml0ZV9wYWdlYAoKTG9va2luZyBhdCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBkZWZpbml0aW9uLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gbWFrZSBzdXJlIEkgY2FuIHJlYWNoIGFsbCBvZiB0aGVzZSBkdXJpbmcgZnV6emluZy4KCk15IHJlYXNvbmluZyBpcyB0aGlzOiBUaGUgcGF0Y2ggZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSBoaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KS4gVGhpcyByZWdpc3RlcnMgYW4gTURJTyBidXMuIFRoZW4gcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy4KClNvLCB0byBzdW1tYXJpemU6CgoqICAgKipDb25maWc6KiogYE1PVE9SQ09NTV9QSFlgCiogICAqKkZvY3VzIFN5bWJvbHM6KiogKGxpc3RlZCBhYm92ZSkKCk9rYXksIGxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSBkb24mIzM5O3Qgc2VlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkuIEkmIzM5O20gZ29pbmcgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTQgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PVE9SQ09NTV9QSFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt5dDg4MjRfcHJvYmUmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2NvbmZpZ19pbml0JiMzNDssCiAgICAmIzM0O3l0ODgyNF9jb25maWdfYW5lZyYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9zdGF0dXMmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3NvZnRfcmVzZXQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3N1c3BlbmQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X3Jlc3VtZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfY29uZmlnX2ludHImIzM0OywKICAgICYjMzQ7eXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQmIzM0OywKICAgICYjMzQ7eXQ4ODI0X2FuZWdfZG9uZSYjMzQ7LAogICAgJiMzNDt5dDg4MjRfcmVhZF9wYWdlJiMzNDssCiAgICAmIzM0O3l0ODgyNF93cml0ZV9wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGhlIE1vdG9yY29tbSBZVDg4MjQgUEhZLiBUaGlzIGNvZGUgY2FuIGJlIHJlYWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCBieSBlbXVsYXRpbmcgYSBVU0IgbmV0d29yayBhZGFwdGVyIChlLmcuLCBzbXNjOTV4eCBvciBsYW43OHh4KSB0aGF0IHJlZ2lzdGVycyBhbiBNRElPIGJ1cywgYW5kIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElELiBUaGlzIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzowMy4yNjk2OTYxNjZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODUxNTQ1NzY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MDMuMjY5NzAyMDI2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTE1MzI1ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA5YzFhOGMzZTEzZjBmN2RhZTUwN2U1MzVkZTg4MDE5Njg0NWVkNjY0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDE0IDE2OjM3OjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xcbmluZGV4IDUwNzE2MDVhMWExMTdhLi5lNmY5M2VkNDM0OWNhYiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcXG5AQCAtMSw5ICsxLDEwIEBAXFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wK1xcbiAvKlxcbi0gKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXIuXFxuKyAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyLlxcbiAgKlxcbiAgKiBBdXRob3I6IFBldGVyIEdlaXMgXFx1MDAzY3Bnd2lwZW91dEBnbWFpbC5jb21cXHUwMDNlXFxuICAqIEF1dGhvcjogRnJhbmsgXFx1MDAzY0ZyYW5rLlNhZUBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4rICogQXV0aG9yOiBLeWxlIFxcdTAwM2NreWxlLnN3aXRjaEBtb3Rvci1jb21tLmNvbVxcdTAwM2VcXG4gICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvZXRoZXJkZXZpY2UuaFxcdTAwM2VcXG5AQCAtMTIsMTIgKzEzLDE2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9waHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Byb3BlcnR5LmhcXHUwMDNlXFxuIFxcbisvKiB1c2VkIGZvciBwaHk4ODI0IGJhc2VhZGRyICovXFxuKyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcXG4rXFxuICNkZWZpbmUgUEhZX0lEX1lUODUxMVxcdFxcdDB4MDAwMDAxMGFcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIxXFx0XFx0MHgwMDAwMDExYVxcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MjJcXHRcXHQweDRmNTFlOTI4XFxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVxcdFxcdDB4NGY1MWU5MWJcXG4gI2RlZmluZSBQSFlfSURfWVQ4NTMxU1xcdFxcdDB4NGY1MWU5MWFcXG4gI2RlZmluZSBQSFlfSURfWVQ4ODIxXFx0XFx0MHg0ZjUxZWExOVxcbisjZGVmaW5lIFBIWV9JRF9ZVDg4MjRcXHRcXHQweDRmNTFlOGI4XFxuIC8qIFlUODUyMS9ZVDg1MzFTL1lUODgyMSBSZWdpc3RlciBPdmVydmlld1xcbiAgKlxcdFVUUCBSZWdpc3RlciBzcGFjZVxcdHxcXHRGSUJFUiBSZWdpc3RlciBzcGFjZVxcbiAgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuQEAgLTI5LDYgKzM0LDE4IEBAXFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4gICovXFxuIFxcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcXG4rICpcXHRVVFAgUmVnaXN0ZXIgc3BhY2VcXHR8XFx0RklCRVIgUmVnaXN0ZXIgc3BhY2VcXG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbisgKiB8XFx0VVRQIE1JSVxcdFxcdFxcdHxcXHRGSUJFUiBNSUlcXHQgICAgICAgIHxcXG4rICogfFxcdFVUUCBNTURcXHRcXHRcXHR8XFx0XFx0XFx0XFx0fFxcbisgKiB8XFx0VVRQIEV4dGVuZGVkXFx0XFx0fFxcdEZJQkVSIEV4dGVuZGVkXFx0XFx0fFxcbisgKiB8XFx0VVRQIFRvcCBFeHRlbmRlZFxcdHxcXHRGSUJFUiBUb3AgRXh0ZW5kZWRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICogfFxcdFxcdFxcdENvbW1vbiBUb3AgRXh0ZW5kZWRcXHRcXHRcXHR8XFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4rICovXFxuK1xcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xcbiBcXG4gLyogU3BlY2lmaWMgRnVuY3Rpb24gQ29udHJvbCBSZWdpc3RlciAqL1xcbkBAIC0zNzUsNiArMzkyLDEyIEBAXFxuICNkZWZpbmUgWVQ4ODIxX0NISVBfTU9ERV9BVVRPX0JYMjUwMF9TR01JSVxcdDBcXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFxcdFxcdDFcXG4gXFxuKyNkZWZpbmUgWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTS1xcdFxcdFxcdEJJVCgwKVxcbisjZGVmaW5lIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFXFx0XFx0XFx0KDB4MSlcXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcXHRcXHRcXHQoMHgwKVxcbisjZGVmaW5lIFJFR19NSUlfTU1EX0NUUkxcXHRcXHRcXHQweDBEXFxuKyNkZWZpbmUgUkVHX01JSV9NTURfREFUQVxcdFxcdFxcdDB4MEVcXG4rXFxuIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXFxuIFxcdCAqIHRoaXMgbWVhbnMgdGhhdCB5dDg1MjEgbWF5IHdvcmsgaW4gdXRwIG9yIGZpYmVyIG1vZGUgd2hpY2ggZGVwZW5kc1xcbkBAIC0zOTEsOCArNDE0LDI5IEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XFxuIFxcdCAqIFlUODUyMV9SU1NSX1RPX0JFX0FSQklUUkFURURcXG4gXFx0ICovXFxuIFxcdHU4IHJlZ19wYWdlO1xcbitcXHQvKiBZVDg4MjQgcmVnIHNwYWNlIGFkZHIgKi9cXG4rXFx0dTggcGh5X2Jhc2VfYWRkcjtcXG4rXFx0LyogdG9wIGV4dGVuZCByZWcgYWRkciAqL1xcbitcXHR1OCB0b3BfcGh5X2FkZHI7XFxuIH07XFxuIFxcbitzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3Bfd3JpdGUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTMyIHJlZ251bSxcXG4rXFx0XFx0XFx0XFx0ICB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRyZXR1cm4gYnVzLVxcdTAwM2V3cml0ZShidXMsIHByaXYtXFx1MDAzZXRvcF9waHlfYWRkciwgcmVnbnVtLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCB5dHBoeV90b3BfcmVhZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MzIgcmVnbnVtKVxcbit7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG1paV9idXMgKmJ1cyA9IHBoeWRldi1cXHUwMDNlbWRpby5idXM7XFxuK1xcbitcXHRyZXR1cm4gYnVzLVxcdTAwM2VyZWFkKGJ1cywgcHJpdi1cXHUwMDNldG9wX3BoeV9hZGRyLCByZWdudW0pO1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfcmVhZF9leHQoKSAtIHJlYWQgYSBQSFkncyBleHRlbmRlZCByZWdpc3RlclxcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG5AQCAtNDMxLDYgKzQ3NSw3MCBAQCBzdGF0aWMgaW50IHl0cGh5X3JlYWRfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbisvKipcXG4rICogeXRwaHlfcmVhZF90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXFxuKyAqXFxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0cmV0dXJuIHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHBoeV9sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIHJlZ251bSk7XFxuK1xcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dHBoeV93cml0ZV90b3BfZXh0KCkgLSByZWFkIGEgUEhZJ3MgdG9wIGV4dGVuZGVkIHJlZ2lzdGVyIGZvciBZVDg4MjRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIEByZWdudW06IHJlZ2lzdGVyIG51bWJlciB0byByZWFkXFxuKyAqXFxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXFxuKyAqXFxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdCAgICAgICB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCBZVFBIWV9QQUdFX1NFTEVDVCwgcmVnbnVtKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9EQVRBLCB2YWwpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHRfd2l0aF9sb2NrKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0sXFxuK1xcdFxcdFxcdFxcdFxcdCB1MTYgdmFsKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgcmVnbnVtLCB2YWwpO1xcbitcXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbiAvKipcXG4gICogeXRwaHlfd3JpdGVfZXh0KCkgLSB3cml0ZSBhIFBIWSdzIGV4dGVuZGVkIHJlZ2lzdGVyXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC01MjEsNiArNjI5LDI2IEBAIHN0YXRpYyBpbnQgeXRwaHlfbW9kaWZ5X2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0ICAgdTE2IGRldmljZSwgdTE2IHJlZyxcXG4rXFx0XFx0XFx0ICAgdTE2IHZhbHVlKVxcbit7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0NUUkwsIGRldmljZSk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgcmVnKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UgfCAweDQwMDApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0RBVEEsIHZhbHVlKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIC8qKlxcbiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkXFxuICAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbkBAIC0zMDU5LDk5ICszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdHJldHVybiB5dDg4MjFfbW9kaWZ5X3V0cF9maWJlcl9ibWNyKHBoeWRldiwgQk1DUl9QRE9XTiwgMCk7XFxuIH1cXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG4tXFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbi1cXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbi1cXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcbi1cXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbi1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4tXFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MjFfcHJvYmUsXFxuLVxcdFxcdC5yZWFkX3BhZ2VcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4tXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0PSB5dHBoeV9zZXRfd29sLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmFuZWdfZG9uZVxcdD0geXQ4NTIxX2FuZWdfZG9uZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbi1cXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0geXQ4NTIxX3Jlc3VtZSxcXG4tXFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4tXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuLVxcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbi1cXHR9LFxcbi1cXHR7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG4tXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjJfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbi1cXHRcXHQucHJvYmVcXHRcXHQ9IHl0ODUzMV9wcm9iZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4tXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG4tXFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuLVxcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXFxuLVxcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbi1cXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4tXFx0fSxcXG4tXFx0e1xcbi1cXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbi1cXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuLVxcdFxcdC5nZXRfZmVhdHVyZXNcXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXFxuLVxcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbi1cXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxcbi1cXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbi1cXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuLVxcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuLVxcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4tXFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxcbi1cXHRcXHQuc3VzcGVuZFxcdD0geXQ4NTIxX3N1c3BlbmQsXFxuLVxcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuLVxcdH0sXFxuLVxcdHtcXG4tXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbi1cXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuLVxcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuLVxcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4tXFx0XFx0LmdldF93b2xcXHRcXHQ9IHl0cGh5X2dldF93b2wsXFxuLVxcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbi1cXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4tXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODIxX2FuZWdfZG9uZSxcXG4tXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuLVxcdFxcdC5nZXRfcmF0ZV9tYXRjaGluZ1xcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcXG4tXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbi1cXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuLVxcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIGN1cnJlbnQgcmVnIHNwYWNlIG9mIHl0ODgyNCAoWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UvXFxuKyAqIFlUODgyNF9SU1NSX1VUUF9TUEFDRSkgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIG9sZF9wYWdlO1xcbitcXG4rXFx0aWYgKChvbGRfcGFnZSBcXHUwMDI2IFlUODgyNF9SU1NSX1NQQUNFX01BU0spID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKVxcbitcXHRcXHRyZXR1cm4gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0U7XFxuK1xcbitcXHRyZXR1cm4gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFO1xcbit9O1xcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfd3JpdGVfcGFnZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCBpbnQgcGFnZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdHUxNiBkYXRhO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0ZGF0YSA9IG9sZF9wYWdlIFxcdTAwMjYgKH4oMHgxKSk7XFxuK1xcdGRhdGEgfD0gcGFnZTtcXG4rXFxuK1xcdHJldHVybiB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgZGF0YSk7XFxuK307XFxuK1xcbisvKipcXG4rICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBlbmFibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0LyogaXNvbGF0aW9uICovXFxuK1xcdFxcdFxcdHJldCB8PSBCSVQoMTApO1xcbitcXHRcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkbyBZVDg4MjQgVVRQIHNvZnRyZXNldC5cXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2U9IDApIHtcXG4rXFx0XFx0aWYgKHJlZ19zcGFjZSA9PSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0cmV0IHw9IEJNQ1JfUkVTRVQ7XFxuK1xcdFxcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdGRvIHtcXG4rXFx0XFx0XFx0XFx0bXNsZWVwKDUwKTtcXG4rXFx0XFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0fSB3aGlsZSAoKHJldCBcXHUwMDI2IEJNQ1JfUkVTRVQpIFxcdTAwMjZcXHUwMDI2IC0tcmV0cnkpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwMjYgQk1DUl9SRVNFVClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBkaXNhYmxlIFlUODgyNCB0ZW1wbGF0ZSB0ZXN0IG1vZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XFxuK1xcdFxcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDAwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHRpZiAocG9ydCA9PSAwIHx8IHBvcnQgPT0gMikge1xcbitcXHRcXHRcXHRcXHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcXG4rXFx0XFx0XFx0XFx0ICogKiBvbmx5IGZvciByZWNvcmRpbmcuXFxuK1xcdFxcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XFxuK1xcdFxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogZGlzYWJsZSBZVDg4MjQgc2VyZGVzIGlzb2xhdGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCBpbnQgcmVnX3NwYWNlKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCByZXRyeSA9IDEyO1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQgPSAwO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0XFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0XFx0LyogZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0XFx0cmV0IFxcdTAwMjY9IH5CSVQoMTApO1xcbitcXHRcXHRcXHQvKiBzb2Z0IHJlc2V0ICovXFxuK1xcdFxcdFxcdHJldCB8PSBCTUNSX1JFU0VUO1xcbitcXHRcXHRcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0ZG8ge1xcbitcXHRcXHRcXHRcXHRtc2xlZXAoNTApO1xcbitcXHRcXHRcXHRcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRcXHR9IHdoaWxlICgocmV0IFxcdTAwMjYgQk1DUl9SRVNFVCkgXFx1MDAyNlxcdTAwMjYgLS1yZXRyeSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAyNiBCTUNSX1JFU0VUKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF9zb2Z0X3Jlc2V0KCkgLSBjYWxsZWQgdG8gaXNzdWUgYSBQSFkgc29mdHdhcmUgcmVzZXRcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqIGZvciBpbnRlcm5hbCBZVDg4MjRcXG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcXG4rICogMikgdXRwIHJlc3RhcnRcXG4rICogMykgZGlzYWJsZSB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXFxuKyAqIGZvciBleHRlcm5hbCBZVDg4MjRcXG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcXG4rICogMikgZW5hYmxlIHNlcmRlcyBpc29sYXRlXFxuKyAqIDMpIHV0cCByZXN0YXJ0XFxuKyAqIDQpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxcbisgKiA1KSBkaXNhYmxlIHNlcmRlcyBpc29sYXRlXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAzX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiB1dHAgc29mdCByZXNldCAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qKlxcbisgKiBleHRlcm5hbCBZVDg4MjQgaW5pdFxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0dTE2IHZhbF8xLCB2YWxfMiwgdmFsXzMsIHRtcDtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRwb3J0ID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgLSBwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyO1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcXG4rXFx0XFx0LyogcmVhZCBlZnVzZSAqL1xcbitcXHRcXHR2YWxfMSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2UpO1xcbitcXHRcXHRpZiAodmFsXzEgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMiA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExM2YpO1xcbitcXHRcXHRpZiAodmFsXzIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHR2YWxfMyA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCAweGExNDApO1xcbitcXHRcXHRpZiAodmFsXzMgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRpZiAocG9ydCA9PSAwKSB7XFxuK1xcdFxcdFxcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGJlLCAweDAwMGQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDlmLCAweDdkZWQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGE5LCAweDAwOWYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogYW5hbG9nIENEUiAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MDYsIDB4MDgwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBvcHRpbWl6ZWQgVkNPICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyOSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNykgfCBCSVQoNikpIFxcdTAwM2VcXHUwMDNlIDYpO1xcbitcXHRcXHRcXHRyZXQgfD0gKHRtcCBcXHUwMDNjXFx1MDAzYyAxMik7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQyOSwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDQxKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxKSB8IEJJVCgwKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMSBcXHUwMDI2IChCSVQoNSkgfCBCSVQoNCkpIFxcdTAwM2VcXHUwMDNlIDQpO1xcbitcXHRcXHRcXHRyZXQgfD0gdG1wO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NDEsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQyYik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XFxuK1xcdFxcdFxcdHRtcCA9ICh2YWxfMyBcXHUwMDI2IChCSVQoMSkgfCBCSVQoMCkpKTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgMTIpO1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MSwgMHgwMDdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIFNlcmRlcyB0cmFpbmluZyB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDU0LCAweDBmMTQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDk3LCAweDBhNDQpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogZGlnaXRhbCBleWUgZGlhZ3JhbSBvZiBTZXJEZXMgKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0LyogU2VyZGVzIExETyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDRiNSk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgXFx1MDAyNj0gfihCSVQoNikgfCBCSVQoNSkgfCBCSVQoNCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDQpIHwgQklUKDMpIHwgQklUKDIpKSBcXHUwMDNlXFx1MDAzZSAyKTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgNCk7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNSwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCBcXHUwMDI2PSB+KEJJVCgxMCkgfCBCSVQoOSkgfCBCSVQoOCkpO1xcbitcXHRcXHRcXHR0bXAgPSAodmFsXzIgXFx1MDAyNiAoQklUKDcpIHwgQklUKDYpIHwgQklUKDUpKSBcXHUwMDNlXFx1MDAzZSA1KTtcXG4rXFx0XFx0XFx0cmV0IHw9ICh0bXAgXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiNCwgcmV0KTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdC8qIG9wdGltaXplZCBTZXJkZXMgUlggKi9cXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGFmLCAweDQ1ZTMpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDhhLCAweDBmZmYpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA4LCAweDdjMDApO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQ2LCAweDAwN2YpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDRmLCAweGZmMDgpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0XFx0Lyogb3B0aW1pemVkIFNlcmRlcyBUWCAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjAsIDB4MDgwNCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YjEsIDB4NzA3NCk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YWYsIDB4NDVlNyk7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRcXHQvKiByZXN0YXJ0IGNhbGlicmF0aW9uICovXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMywgMHg1NjAzKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZmZmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5MiwgMHg3ZjdmKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDQwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MjAwMCwgMHgwMDAwKTtcXG4rXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0LyogVFggcHJlYW1ibGUgcGFkZGVkIHRvIDg7IFJYIElQRyBhbHdheXMgXFx1MDAzZSA4ICovXFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDE3LCAweDIwMDcpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCAweDAwMDAsIDB4OTAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdH0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xcbitcXHRcXHQvKiBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogcGxsIGNhbGlicmF0aW9uICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogZW5hYmxlIG5pYmJsZSAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRcXHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIGludGVybmFsIFlUODgyNCBpbml0XFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCBwb3J0ID0gMDtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHBvcnQgPSBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciAtIHByaXYtXFx1MDAzZXBoeV9iYXNlX2FkZHI7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MSwgMHgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgMHgxOTAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBlLCAweGNiYSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4YTAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGUwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNzIsIDB4NTAzOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdjLCAweDYwNjgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzU5LCAweDIxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV90b3BfZXh0KHBoeWRldiwgMHhhMmZhLCAweDgzKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMi41RyB0ZW1wYXRlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDdlLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODAsIDB4MzkzOSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgxLCAweDM5MzkpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMzYsIDB4YWIwYSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzQwLCAweDMwMWQpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzRhLCAweGZmMDMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGY4LCAweGIzZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmQsIDB4ZDA5NCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJlLCAweDUzMDgpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDMsIDB4NTIyMCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQyLCAweDUyMjApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiAxMDAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmYsIDB4NDU0NSk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3MSwgMHg0NTQ1KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NzFmLCAweDM2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0LyogMTAgdGVtcGF0ZSAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmMsIDB4MTgxOCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIDEwIHRlbXBhdGUgTUFVKi9cXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY3LCAweDZjNmMpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2OCwgMHg2YzZjKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdC8qIEVNQyBDUyAqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGM4LCAweGZmZik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzdhLCAweDQwZmYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHQvKiBFTUMgUkUqL1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0aWYgKHBvcnQgPT0gMCB8fCBwb3J0ID09IDIpIHtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODIsIDB4ZmZmZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyZDcsIDB4MWYxZik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFkLCAweGZmZjApO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRcXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMWUsIDB4ZmZmMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMDFlLCAweGZmZmYpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHR9XFxuK1xcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YywgMHg0MWExKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0cmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDIwMDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19pbml0KCkgLSBwaHkgaW5pdGlhbGl6YXRpb2luXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiBSZXR1cm5zOiAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19pbml0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBiYXNlIGFkZHIgYW5kIHRvcCBhZGRyIHVwZGF0ZSBmb3IgaW50ZXJuYWwgWVQ4ODI0Ki9cXG4rXFx0XFx0cHJpdi1cXHUwMDNlcGh5X2Jhc2VfYWRkciA9IDB4NDtcXG4rXFx0XFx0cHJpdi1cXHUwMDNldG9wX3BoeV9hZGRyID0gMHg5O1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRuZXRkZXZfaW5mbyhwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2RldixcXG4rXFx0XFx0ICAgIFxcXCIlcyBkb25lLCBwaHkgYWRkcjogJWQsIHBoeSBiYXNlIGFkZHIgPSAlZFxcXFxuXFxcIixcXG4rXFx0XFx0ICAgIF9fZnVuY19fLCBwaHlkZXYtXFx1MDAzZW1kaW8uYWRkciwgcHJpdi1cXHUwMDNlcGh5X2Jhc2VfYWRkcik7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcXG4rXFx0aW50IHBvcnQ7XFxuK1xcbitcXHRwb3J0ID0gcGh5ZGV2LVxcdTAwM2VtZGlvLmFkZHIgLSBwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyO1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVycnVwdHMgPT0gUEhZX0lOVEVSUlVQVF9FTkFCTEVEKSB7XFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAwMFxcbitcXHRcXHQgKiBiaXQ2IGludF9wb2xhcml0eSAxJ2IwIGxvdyBhY3RpdmUsIDEnYjEgaGlnaCBhY3RpdmVcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUODUyMV9SRUdfU1BBQ0VfU0VMRUNUX1JFRywgcmV0IFxcdTAwMjYgKH5CSVQoNikpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOVxcbitcXHRcXHQgKiBiaXQ1IGludHJfcGh5X3B1bHNlX2VuIDEnYjAgbGV2ZWwsIDEnYjEgcHVsc2VcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE5KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0IHwgQklUKDUpKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxOCBwaHlfcHVsc2VfbHRoIGJpdDE0OjhcXG4rXFx0XFx0ICogdG9wIGV4dCByZWcgMHhhMDE5IHRpbWVyX3RpY2tfc2VsIGJpdDg6N1xcbitcXHRcXHQgKiBiaXQxNDo4IHBoeV9wdWxzZV9sdGggYml0ODo3IHRpbWVyX3RpY2tfc2VsICAgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDdhXFx0XFx0IDB4MDAwMlxcdFxcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDY0XFx0XFx0IDB4MDAwMVxcdFxcdCAgICAgICAgIDFtcyBwdWxzZSB3aWR0aFxcbitcXHRcXHQgKiAweDAwNGVcXHRcXHQgMHgwMDAwXFx0XFx0ICAgICAgICAgMTAwbXMgcHVsc2Ugd2lkdGhcXG4rXFx0XFx0ICogMHgwMDA5XFx0XFx0IDB4MDAwMFxcdFxcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGgoZGVmYXVsdClcXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdHJldCBcXHUwMDI2PSB+MHg3ZjAwO1xcbitcXHRcXHRyZXQgfD0gKDB4MDAwOSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH4weDE4MDtcXG4rXFx0XFx0cmV0IHw9ICgweDAwMDAgXFx1MDAzY1xcdTAwM2MgNyk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcXG4rXFx0XFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0XFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0XFx0ICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdFxcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXFxuK1xcdFxcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XFxuK1xcdFxcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWEpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IFxcdTAwMjY9IH5CSVQoNSk7XFxuK1xcdFxcdHJldCB8PSBCSVQoNCk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYSwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdFxcdC8qIHRvcCBleHQgcmVnIDB4YTAxYiBpbnRlcnJ1cHQgbWFza1xcbitcXHRcXHQgKiBiaXQxMSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0NyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0MyAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDEwIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKiBiaXQ2IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKiBiaXQyIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICpcXG4rXFx0XFx0ICogYml0OSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0NSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cXG4rXFx0XFx0ICogYml0MSAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqXFxuK1xcdFxcdCAqIGJpdDggMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqIGJpdDQgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXFxuK1xcdFxcdCAqIGJpdDAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWIpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0XFx0cmV0IHw9IChCSVQocG9ydCArIDgpIHwgQklUKHBvcnQgKyA0KSB8IEJJVChwb3J0KSk7XFxuK1xcdFxcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxYiwgcmV0KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFx0fVxcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rc3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHQvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpXFxuK1xcdCAqIGJpdDExIFBIWTMgaW50ZXJydXB0IDE6IHBoeTMgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQxMCBQSFkyIGludGVycnVwdCAxOiBwaHkyIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDggIFBIWTAgaW50ZXJydXB0IDE6IHBoeTAgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ3ICBQSFkzIGxpbmsgZG93biAxOiBwaHkzIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXFxuK1xcdCAqIGJpdDUgIFBIWTEgbGluayBkb3duIDE6IHBoeTEgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxcbitcXHQgKiBiaXQ0ICBQSFkwIGxpbmsgZG93biAxOiBwaHkwIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MiAgUEhZMiBsaW5rIHVwIDE6IHBoeTIgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MSAgUEhZMSBsaW5rIHVwIDE6IHBoeTEgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcXG4rXFx0ICovXFxuK1xcdHJldCA9IHl0cGh5X3JlYWRfdG9wX2V4dChwaHlkZXYsIDB4YTAxYyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRwaHlfdHJpZ2dlcl9tYWNoaW5lKHBoeWRldik7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZSAwKVxcbitcXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuIElSUV9OT05FO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9hbmVnX2RvbmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgbGluayA9IDA7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldCA9IDA7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK1xcdG5ldGRldl9pbmZvKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LCBcXFwiJXMsIHBoeSBhZGRyOiAlZCwgbGlua191dHA6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHQgICAgX19mdW5jX18sIHBoeWRldi1cXHUwMDNlbWRpby5hZGRyLCBsaW5rKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cXG4rICogb3BlcmF0ZS5cXG4rICpcXG4rICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHBhZ2UsXFxuK1xcdFxcdFxcdFxcdCAgICBpbnQgKnN0YXR1cywgaW50ICpscGEpXFxuK3tcXG4rXFx0aW50IG9sZF9wYWdlO1xcbitcXHRpbnQgcmV0ID0gMDtcXG4rXFxuK1xcdHBhZ2UgXFx1MDAyNj0gWVQ4ODI0X1JTU1JfU1BBQ0VfTUFTSztcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xcbitcXHQqbHBhID0gcmV0O1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIFlUUEhZX1NQRUNJRklDX1NUQVRVU19SRUcpO1xcbitcXHQqc3RhdHVzID0gcmV0O1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gISEoKnN0YXR1cyBcXHUwMDI2IFlUUEhZX1NTUl9MSU5LKTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXMoKSAtICBkZXRlcm1pbmVzIHRoZSBuZWdvdGlhdGVkIHNwZWVkIGFuZCBkdXBsZXhcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBsaW5rO1xcbitcXHRpbnQgbHBhO1xcbitcXHRpbnQgdmFsO1xcbitcXG4rXFx0cGh5ZGV2LVxcdTAwM2VwYXVzZSA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlbGluayA9IDA7XFxuK1xcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbitcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbitcXG4rXFx0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXFx1MDAyNnZhbCwgXFx1MDAyNmxwYSk7XFxuK1xcdGlmIChsaW5rIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGxpbms7XFxuK1xcbitcXHRpZiAobGluaykge1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWxpbmsgPSAxO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXBhdXNlID0gISEobHBhIFxcdTAwMjYgQklUKDEwKSk7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9ICEhKGxwYSBcXHUwMDI2IEJJVCgxMSkpO1xcbitcXG4rXFx0XFx0LyogdXBkYXRlIHNwZWVkIFxcdTAwMjYgZHVwbGV4ICovXFxuK1xcdFxcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VsaW5rID0gMDtcXG4rXFx0XFx0cGh5ZGV2LVxcdTAwM2VwYXVzZSA9IDA7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlYXN5bV9wYXVzZSA9IDA7XFxuK1xcdFxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfb24oKVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3V0cF9wb3dlcl9vbihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgICAgaW50IHJlZ19zcGFjZSlcXG4re1xcbitcXHRpbnQgb2xkX3BhZ2U7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XFxuK1xcdGlmIChvbGRfcGFnZSBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK1xcdHJldCBcXHUwMDI2PSB+Qk1DUl9QRE9XTjtcXG4rXFx0cmV0IFxcdTAwMjY9IH5CTUNSX0lTT0xBVEU7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xcbitcXG4rZXJyX3Jlc3RvcmVfcGFnZTpcXG4rXFx0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcXG4rfVxcbitcXG4rLyoqXFxuKyAqIHl0ODgyNF91dHBfcG93ZXJfZG93bigpXFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxcbisgKlxcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxcbisgKi9cXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcXG4rXFx0XFx0XFx0XFx0IGludCByZWdfc3BhY2UpXFxuK3tcXG4rXFx0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xcbitcXG4rXFx0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRpZiAob2xkX3BhZ2UgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitcXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XFxuK1xcbitlcnJfcmVzdG9yZV9wYWdlOlxcbitcXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X3Bvd2VyX29uKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqIG5lZWQgV0EgbGlrZSBzb2Z0cmVzZXRcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGlmIChwaHlkZXYtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcXG4rXFx0XFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX29uKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBub3JtYWwgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRyZXR1cm4geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0aWYgKHBoeWRldi1cXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0LyogdXRwIHBvd2VyIGRvd24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdC8qIG5vcm1hbCBtb2RlICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xcbitcXHRcXHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHNkcyBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdFxcdC8qIHV0cCBwb3dlciBkb3duICovXFxuK1xcdFxcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfZG93bihwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0Lyogbm9ybWFsIG1vZGUgKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cXG4rXFx0XFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xcbit9XFxuK1xcbisvKipcXG4rICogeXQ4ODI0X2NvbmZpZ19hbmVnKClcXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXFxuKyAqXFxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXFxuKyAqL1xcbitzdGF0aWMgaW50IHl0ODgyNF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbit7XFxuK1xcdGludCBwaHlfY3RybCA9IDA7XFxuK1xcdGludCBvbGRfcGFnZTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcXG4rXFx0aWYgKG9sZF9wYWdlIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0aWYgKGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCxcXG4rXFx0XFx0XFx0ICAgICAgcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZykpXFxuK1xcdFxcdHBoeV9jdHJsID0gTURJT19BTl8xMEdCVF9DVFJMX0FEVjJfNUc7XFxuK1xcbitcXHRyZXQgPSBwaHlfbW9kaWZ5X21tZF9jaGFuZ2VkKHBoeWRldiwgTURJT19NTURfQU4sXFxuK1xcdFxcdFxcdFxcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICAgIE1ESU9fQU5fMTBHQlRfQ1RSTF9BRFYyXzVHLFxcbitcXHRcXHRcXHRcXHQgICAgIHBoeV9jdHJsKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xcbitcXG4rXFx0cmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcXG4rXFxuK2Vycl9yZXN0b3JlX3BhZ2U6XFxuK1xcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XFxuK31cXG4rXFxuKy8qKlxcbisgKiB5dDg4MjRfcHJvYmUoKVxcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcXG4rICpcXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcXG4rICovXFxuK3N0YXRpYyBpbnQgeXQ4ODI0X3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXY7XFxuK1xcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdjtcXG4rXFx0dTMyIHBoeV9iYXNlX2FkZHI7XFxuK1xcbitcXHRwcml2ID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghcHJpdilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRwaHlkZXYtXFx1MDAzZXByaXYgPSBwcml2O1xcbitcXG4rXFx0LyogZ2V0IGJhc2UgYWRkciBhbmQgdG9wIGFkZHIgZm9yIGV4dGVybmFsIFlUODgyNCAqL1xcbitcXHRpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFxcXCJtb3RvcmNvbW0sYmFzZS1hZGRyZXNzXFxcIixcXG4rXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBoeV9iYXNlX2FkZHIpKVxcbitcXHRcXHRwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyID0gcGh5X2Jhc2VfYWRkcjtcXG4rXFx0ZWxzZVxcbitcXHRcXHRwcml2LVxcdTAwM2VwaHlfYmFzZV9hZGRyID0gUEhZX0JBU0VfQUREUjtcXG4rXFxuK1xcdHByaXYtXFx1MDAzZXRvcF9waHlfYWRkciA9IHByaXYtXFx1MDAzZXBoeV9iYXNlX2FkZHIgKyA0O1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciBtb3RvcmNvbW1fcGh5X2RydnNbXSA9IHtcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTExIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHQ9IHl0ODUxMV9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnN1c3BlbmRcXHQ9IGdlbnBoeV9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0PSBnZW5waHlfcmVzdW1lLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MTFfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MjEpLFxcbitcXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XFxcIixcXG4rXFx0XFx0LmdldF9mZWF0dXJlc1xcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcXG4rXFx0XFx0LnByb2JlXFx0XFx0PSB5dDg1MjFfcHJvYmUsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0PSB5dHBoeV9zZXRfd29sLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdD0geXQ4NTIxX2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5yZWFkX3N0YXR1c1xcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxcbitcXHRcXHQuc29mdF9yZXNldFxcdD0geXQ4NTIxX3NvZnRfcmVzZXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSB5dDg1MjFfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0geXQ4NTIxX3Jlc3VtZSxcXG4rXFx0XFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcXG4rXFx0XFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXFxuK1xcdFxcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxcbitcXHR9LFxcbitcXHR7XFxuK1xcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcXG4rXFx0XFx0Lm5hbWVcXHRcXHQ9IFxcXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MjJfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXFxuK1xcdFxcdC5uYW1lXFx0XFx0PSBcXFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQucHJvYmVcXHRcXHQ9IHl0ODUzMV9wcm9iZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4rXFx0XFx0LnJlc3VtZVxcdFxcdD0gZ2VucGh5X3Jlc3VtZSxcXG4rXFx0XFx0LmdldF93b2xcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0PSB5dDg1MzFfc2V0X3dvbCxcXG4rXFx0XFx0LmxpbmtfY2hhbmdlX25vdGlmeSA9IHl0ODUzMV9saW5rX2NoYW5nZV9ub3RpZnksXFxuK1xcdFxcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXFxuK1xcdFxcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxcbitcXHRcXHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcXG4rXFx0fSxcXG4rXFx0e1xcbitcXHRcXHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxcbitcXHRcXHQubmFtZVxcdFxcdD0gXFxcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdD0geXQ4NTIxX3Byb2JlLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5nZXRfd29sXFx0PSB5dHBoeV9nZXRfd29sLFxcbitcXHRcXHQuc2V0X3dvbFxcdD0geXRwaHlfc2V0X3dvbCxcXG4rXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSB5dDg1MjFfY29uZmlnX2FuZWcsXFxuK1xcdFxcdC5hbmVnX2RvbmVcXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXFxuK1xcdFxcdC5jb25maWdfaW5pdFxcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHl0ODUyMV9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdD0geXQ4NTIxX3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHQ9IHl0ODUyMV9yZXN1bWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyMSAyLjVHYnBzIFBIWVxcXCIsXFxuK1xcdFxcdC5nZXRfZmVhdHVyZXNcXHRcXHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXFxuK1xcdFxcdC5yZWFkX3BhZ2VcXHRcXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXFxuK1xcdFxcdC53cml0ZV9wYWdlXFx0XFx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcXG4rXFx0XFx0LmdldF93b2xcXHRcXHQ9IHl0cGh5X2dldF93b2wsXFxuK1xcdFxcdC5zZXRfd29sXFx0XFx0PSB5dHBoeV9zZXRfd29sLFxcbitcXHRcXHQuY29uZmlnX2FuZWdcXHRcXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcXG4rXFx0XFx0LmFuZWdfZG9uZVxcdFxcdD0geXQ4ODIxX2FuZWdfZG9uZSxcXG4rXFx0XFx0LmNvbmZpZ19pbml0XFx0XFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXFxuK1xcdFxcdC5nZXRfcmF0ZV9tYXRjaGluZ1xcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxcbitcXHRcXHQucmVhZF9zdGF0dXNcXHRcXHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcXG4rXFx0XFx0LnNvZnRfcmVzZXRcXHRcXHQ9IHl0ODgyMV9zb2Z0X3Jlc2V0LFxcbitcXHRcXHQuc3VzcGVuZFxcdFxcdD0geXQ4ODIxX3N1c3BlbmQsXFxuK1xcdFxcdC5yZXN1bWVcXHRcXHRcXHQ9IHl0ODgyMV9yZXN1bWUsXFxuK1xcdH0sXFxuK1xcdHtcXG4rXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjQpLFxcbitcXHRcXHQubmFtZVxcdFxcdFxcdD0gXFxcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcXFwiLFxcbitcXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0XFx0PSB5dDg4MjFfZ2V0X2ZlYXR1cmVzLFxcbitcXHRcXHQucmVhZF9wYWdlXFx0XFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxcbitcXHRcXHQud3JpdGVfcGFnZVxcdFxcdD0geXQ4ODI0X3dyaXRlX3BhZ2UsXFxuK1xcdFxcdC5jb25maWdfaW50ciAgICAgICAgICAgID0geXQ4ODI0X2NvbmZpZ19pbnRyLFxcbitcXHRcXHQuaGFuZGxlX2ludGVycnVwdFxcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXFxuK1xcdFxcdC5wcm9iZVxcdFxcdCAgICAgICAgPSB5dDg4MjRfcHJvYmUsXFxuK1xcdFxcdC5jb25maWdfYW5lZ1xcdFxcdD0geXQ4ODI0X2NvbmZpZ19hbmVnLFxcbitcXHRcXHQuYW5lZ19kb25lXFx0XFx0PSB5dDg4MjRfYW5lZ19kb25lLFxcbitcXHRcXHQuY29uZmlnX2luaXRcXHRcXHQ9IHl0ODgyNF9jb25maWdfaW5pdCxcXG4rXFx0XFx0LnJlYWRfc3RhdHVzXFx0XFx0PSB5dDg4MjRfcmVhZF9zdGF0dXMsXFxuK1xcdFxcdC5zb2Z0X3Jlc2V0XFx0XFx0PSB5dDg4MjRfc29mdF9yZXNldCxcXG4rXFx0XFx0LnN1c3BlbmRcXHRcXHQ9IHl0ODgyNF9zdXNwZW5kLFxcbitcXHRcXHQucmVzdW1lXFx0XFx0XFx0PSB5dDg4MjRfcmVzdW1lLFxcbiBcXHR9LFxcbiB9O1xcbiBcXG4gbW9kdWxlX3BoeV9kcml2ZXIobW90b3Jjb21tX3BoeV9kcnZzKTtcXG4gXFxuLU1PRFVMRV9ERVNDUklQVElPTihcXFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlclxcXCIpO1xcbitNT0RVTEVfREVTQ1JJUFRJT04oXFxcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlclxcXCIpO1xcbiBNT0RVTEVfQVVUSE9SKFxcXCJQZXRlciBHZWlzXFxcIik7XFxuIE1PRFVMRV9BVVRIT1IoXFxcIkZyYW5rXFxcIik7XFxuK01PRFVMRV9BVVRIT1IoXFxcIkt5bGVcXFwiKTtcXG4gTU9EVUxFX0xJQ0VOU0UoXFxcIkdQTFxcXCIpO1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBtZGlvX2RldmljZV9pZCBfX21heWJlX3VudXNlZCBtb3RvcmNvbW1fdGJsW10gPSB7XFxuQEAgLTMxNjEsNiArNDgxMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbWRpb19kZXZpY2VfaWQgX19tYXliZV91bnVzZWQgbW90b3Jjb21tX3RibFtdID0ge1xcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxKSB9LFxcbiBcXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcXG4gXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSkgfSxcXG4rXFx0eyBQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCkgfSxcXG4gXFx0eyAvKiBzZW50aW5lbCAqLyB9XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzowNC4wNjIxNzM1MThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk3NzIyOTY4MDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1PVE9SQ09NTV9QSFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ5dDg4MjRfcHJvYmVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW5pdFwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19hbmVnXCIsXG4gICAgXCJ5dDg4MjRfcmVhZF9zdGF0dXNcIixcbiAgICBcInl0ODgyNF9zb2Z0X3Jlc2V0XCIsXG4gICAgXCJ5dDg4MjRfc3VzcGVuZFwiLFxuICAgIFwieXQ4ODI0X3Jlc3VtZVwiLFxuICAgIFwieXQ4ODI0X2NvbmZpZ19pbnRyXCIsXG4gICAgXCJ5dDg4MjRfaGFuZGxlX2ludGVycnVwdFwiLFxuICAgIFwieXQ4ODI0X2FuZWdfZG9uZVwiLFxuICAgIFwieXQ4ODI0X3JlYWRfcGFnZVwiLFxuICAgIFwieXQ4ODI0X3dyaXRlX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIHRoZSBNb3RvcmNvbW0gWVQ4ODI0IFBIWS4gVGhpcyBjb2RlIGNhbiBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkgdGhhdCByZWdpc3RlcnMgYW4gTURJTyBidXMsIGFuZCByZXNwb25kaW5nIHRvIE1ESU8gcmVhZHMgd2l0aCB0aGUgWVQ4ODI0IFBIWSBJRC4gVGhpcyB3aWxsIGNhdXNlIHRoZSBrZXJuZWwgdG8gYmluZCB0aGUgbmV3IFBIWSBkcml2ZXIgYW5kIGV4ZWN1dGUgaXRzIGluaXRpYWxpemF0aW9uIGFuZCBzdGF0ZSBtYWNoaW5lIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljMWE4YzNlMTNmMGY3ZGFlNTA3ZTUzNWRlODgwMTk2ODQ1ZWQ2NjRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCAxNCAxNjozNzowMSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uYyBiL2RyaXZlcnMvbmV0L3BoeS9tb3RvcmNvbW0uY1xuaW5kZXggNTA3MTYwNWExYTExN2EuLmU2ZjkzZWQ0MzQ5Y2FiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jXG4rKysgYi9kcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNcbkBAIC0xLDkgKzEsMTAgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCtcbiAvKlxuLSAqIE1vdG9yY29tbSA4NTExLzg1MjEvODUyMi84NTMxLzg1MzFTLzg4MjEgUEhZIGRyaXZlci5cbisgKiBNb3RvcmNvbW0gODUxMS84NTIxLzg1MjIvODUzMS84NTMxUy84ODIxLzg4MjQgUEhZIGRyaXZlci5cbiAgKlxuICAqIEF1dGhvcjogUGV0ZXIgR2VpcyBcdTAwM2NwZ3dpcGVvdXRAZ21haWwuY29tXHUwMDNlXG4gICogQXV0aG9yOiBGcmFuayBcdTAwM2NGcmFuay5TYWVAbW90b3ItY29tbS5jb21cdTAwM2VcbisgKiBBdXRob3I6IEt5bGUgXHUwMDNja3lsZS5zd2l0Y2hAbW90b3ItY29tbS5jb21cdTAwM2VcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9ldGhlcmRldmljZS5oXHUwMDNlXG5AQCAtMTIsMTIgKzEzLDE2IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcm9wZXJ0eS5oXHUwMDNlXG4gXG4rLyogdXNlZCBmb3IgcGh5ODgyNCBiYXNlYWRkciAqL1xuKyNkZWZpbmUgUEhZX0JBU0VfQUREUiAoMSlcbitcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MTFcdFx0MHgwMDAwMDEwYVxuICNkZWZpbmUgUEhZX0lEX1lUODUyMVx0XHQweDAwMDAwMTFhXG4gI2RlZmluZSBQSFlfSURfWVQ4NTIyXHRcdDB4NGY1MWU5MjhcbiAjZGVmaW5lIFBIWV9JRF9ZVDg1MzFcdFx0MHg0ZjUxZTkxYlxuICNkZWZpbmUgUEhZX0lEX1lUODUzMVNcdFx0MHg0ZjUxZTkxYVxuICNkZWZpbmUgUEhZX0lEX1lUODgyMVx0XHQweDRmNTFlYTE5XG4rI2RlZmluZSBQSFlfSURfWVQ4ODI0XHRcdDB4NGY1MWU4YjhcbiAvKiBZVDg1MjEvWVQ4NTMxUy9ZVDg4MjEgUmVnaXN0ZXIgT3ZlcnZpZXdcbiAgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbkBAIC0yOSw2ICszNCwxOCBAQFxuICAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgKi9cbiBcbisvKiBZVDg4MjQgUmVnaXN0ZXIgT3ZlcnZpZXdcbisgKlx0VVRQIFJlZ2lzdGVyIHNwYWNlXHR8XHRGSUJFUiBSZWdpc3RlciBzcGFjZVxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKiB8XHRVVFAgTUlJXHRcdFx0fFx0RklCRVIgTUlJXHQgICAgICAgIHxcbisgKiB8XHRVVFAgTU1EXHRcdFx0fFx0XHRcdFx0fFxuKyAqIHxcdFVUUCBFeHRlbmRlZFx0XHR8XHRGSUJFUiBFeHRlbmRlZFx0XHR8XG4rICogfFx0VVRQIFRvcCBFeHRlbmRlZFx0fFx0RklCRVIgVG9wIEV4dGVuZGVkXHR8XG4rICogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuKyAqIHxcdFx0XHRDb21tb24gVG9wIEV4dGVuZGVkXHRcdFx0fFxuKyAqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbisgKi9cbitcbiAvKiAweDEwIH4gMHgxNSAsIDB4MUUgYW5kIDB4MUYgYXJlIGNvbW1vbiBNSUkgcmVnaXN0ZXJzIG9mIHl0IHBoeSAqL1xuIFxuIC8qIFNwZWNpZmljIEZ1bmN0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi9cbkBAIC0zNzUsNiArMzkyLDEyIEBAXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0FVVE9fQlgyNTAwX1NHTUlJXHQwXG4gI2RlZmluZSBZVDg4MjFfQ0hJUF9NT0RFX0ZPUkNFX0JYMjUwMFx0XHQxXG4gXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLXHRcdFx0QklUKDApXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRVx0XHRcdCgweDEpXG4rI2RlZmluZSBZVDg4MjRfUlNTUl9VVFBfU1BBQ0VcdFx0XHQoMHgwKVxuKyNkZWZpbmUgUkVHX01JSV9NTURfQ1RSTFx0XHRcdDB4MERcbisjZGVmaW5lIFJFR19NSUlfTU1EX0RBVEFcdFx0XHQweDBFXG4rXG4gc3RydWN0IHl0ODUyMV9wcml2IHtcbiBcdC8qIGNvbWJvX2FkdmVydGlzaW5nIGlzIHVzZWQgZm9yIGNhc2Ugb2YgWVQ4NTIxIGluIGNvbWJvIG1vZGUsXG4gXHQgKiB0aGlzIG1lYW5zIHRoYXQgeXQ4NTIxIG1heSB3b3JrIGluIHV0cCBvciBmaWJlciBtb2RlIHdoaWNoIGRlcGVuZHNcbkBAIC0zOTEsOCArNDE0LDI5IEBAIHN0cnVjdCB5dDg1MjFfcHJpdiB7XG4gXHQgKiBZVDg1MjFfUlNTUl9UT19CRV9BUkJJVFJBVEVEXG4gXHQgKi9cbiBcdHU4IHJlZ19wYWdlO1xuK1x0LyogWVQ4ODI0IHJlZyBzcGFjZSBhZGRyICovXG4rXHR1OCBwaHlfYmFzZV9hZGRyO1xuK1x0LyogdG9wIGV4dGVuZCByZWcgYWRkciAqL1xuK1x0dTggdG9wX3BoeV9hZGRyO1xuIH07XG4gXG4rc3RhdGljIGlubGluZSBpbnQgeXRwaHlfdG9wX3dyaXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiByZWdudW0sXG4rXHRcdFx0XHQgIHUxNiB2YWwpXG4re1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0cmV0dXJuIGJ1cy1cdTAwM2V3cml0ZShidXMsIHByaXYtXHUwMDNldG9wX3BoeV9hZGRyLCByZWdudW0sIHZhbCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHl0cGh5X3RvcF9yZWFkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUzMiByZWdudW0pXG4re1xuK1x0c3RydWN0IHl0ODUyMV9wcml2ICpwcml2ID0gcGh5ZGV2LVx1MDAzZXByaXY7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcGh5ZGV2LVx1MDAzZW1kaW8uYnVzO1xuK1xuK1x0cmV0dXJuIGJ1cy1cdTAwM2VyZWFkKGJ1cywgcHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIsIHJlZ251bSk7XG4rfVxuK1xuIC8qKlxuICAqIHl0cGh5X3JlYWRfZXh0KCkgLSByZWFkIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTQzMSw2ICs0NzUsNzAgQEAgc3RhdGljIGludCB5dHBoeV9yZWFkX2V4dF93aXRoX2xvY2soc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSlcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKy8qKlxuKyAqIHl0cGh5X3JlYWRfdG9wX2V4dCgpIC0gcmVhZCBhIFBIWSdzIHRvcCBleHRlbmRlZCByZWdpc3RlciBmb3IgWVQ4ODI0XG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcmVnbnVtOiByZWdpc3RlciBudW1iZXIgdG8gcmVhZFxuKyAqXG4rICogTk9URTpUaGUgY2FsbGVyIG11c3QgaGF2ZSB0YWtlbiB0aGUgTURJTyBidXMgbG9jay5cbisgKlxuKyAqIHJldHVybnMgdGhlIHZhbHVlIG9mIHJlZ251bSByZWcgb3IgbmVnYXRpdmUgZXJyb3IgY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIHUxNiByZWdudW0pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfU0VMRUNULCByZWdudW0pO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHJldHVybiB5dHBoeV90b3BfcmVhZChwaHlkZXYsIFlUUEhZX1BBR0VfREFUQSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtKVxuK3tcbitcdGludCByZXQ7XG4rXG4rXHRwaHlfbG9ja19tZGlvX2J1cyhwaHlkZXYpO1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgcmVnbnVtKTtcbitcdHBoeV91bmxvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcbitcdHJldHVybiByZXQ7XG4rfVxuK1xuKy8qKlxuKyAqIHl0cGh5X3dyaXRlX3RvcF9leHQoKSAtIHJlYWQgYSBQSFkncyB0b3AgZXh0ZW5kZWQgcmVnaXN0ZXIgZm9yIFlUODgyNFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHJlZ251bTogcmVnaXN0ZXIgbnVtYmVyIHRvIHJlYWRcbisgKlxuKyAqIE5PVEU6VGhlIGNhbGxlciBtdXN0IGhhdmUgdGFrZW4gdGhlIE1ESU8gYnVzIGxvY2suXG4rICpcbisgKiByZXR1cm5zIHRoZSB2YWx1ZSBvZiByZWdudW0gcmVnIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0cGh5X3dyaXRlX3RvcF9leHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgdTE2IHJlZ251bSxcbitcdFx0XHQgICAgICAgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVRQSFlfUEFHRV9TRUxFQ1QsIHJlZ251bSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIFlUUEhZX1BBR0VfREFUQSwgdmFsKTtcbit9XG4rXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV90b3BfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuK1x0XHRcdFx0XHQgdTE2IHZhbClcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cGh5X2xvY2tfbWRpb19idXMocGh5ZGV2KTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCByZWdudW0sIHZhbCk7XG4rXHRwaHlfdW5sb2NrX21kaW9fYnVzKHBoeWRldik7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV93cml0ZV9leHQoKSAtIHdyaXRlIGEgUEhZJ3MgZXh0ZW5kZWQgcmVnaXN0ZXJcbiAgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuQEAgLTUyMSw2ICs2MjksMjYgQEAgc3RhdGljIGludCB5dHBoeV9tb2RpZnlfZXh0X3dpdGhfbG9jayhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LCB1MTYgcmVnbnVtLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIGludCB5dHBoeV93cml0ZV9tbWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHQgICB1MTYgZGV2aWNlLCB1MTYgcmVnLFxuK1x0XHRcdCAgIHUxNiB2YWx1ZSlcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9DVFJMLCBkZXZpY2UpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgUkVHX01JSV9NTURfREFUQSwgcmVnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIFJFR19NSUlfTU1EX0NUUkwsIGRldmljZSB8IDB4NDAwMCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBSRUdfTUlJX01NRF9EQVRBLCB2YWx1ZSk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiAvKipcbiAgKiB5dHBoeV9nZXRfd29sKCkgLSByZXBvcnQgd2hldGhlciB3YWtlLW9uLWxhbiBpcyBlbmFibGVkXG4gICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbkBAIC0zMDU5LDk5ICszMTg3LDE2MjAgQEAgc3RhdGljIGludCB5dDg4MjFfcmVzdW1lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4geXQ4ODIxX21vZGlmeV91dHBfZmliZXJfYm1jcihwaHlkZXYsIEJNQ1JfUERPV04sIDApO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgbW90b3Jjb21tX3BoeV9kcnZzW10gPSB7XG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTExKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUxMSBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MTFfY29uZmlnX2luaXQsXG4tXHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbi1cdFx0LnJlYWRfcGFnZVx0PSB5dDg1MTFfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSB5dDg1MTFfd3JpdGVfcGFnZSxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIxKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUyMSBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuLVx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4tXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuLVx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHl0ODUyMV9yZXN1bWUsXG4tXHRcdC5sZWRfaHdfaXNfc3VwcG9ydGVkID0geXQ4NTIxX2xlZF9od19pc19zdXBwb3J0ZWQsXG4tXHRcdC5sZWRfaHdfY29udHJvbF9zZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfc2V0LFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfZ2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX2dldCxcbi1cdH0sXG4tXHR7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTIyKSxcbi1cdFx0Lm5hbWVcdFx0PSBcIllUODUyMiAxMDAgTWVnYWJpdCBFdGhlcm5ldFwiLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuLVx0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIyX2NvbmZpZ19pbml0LFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMSksXG4tXHRcdC5uYW1lXHRcdD0gXCJZVDg1MzEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuLVx0XHQucHJvYmVcdFx0PSB5dDg1MzFfcHJvYmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MzFfY29uZmlnX2luaXQsXG4tXHRcdC5zdXNwZW5kXHQ9IGdlbnBoeV9zdXNwZW5kLFxuLVx0XHQucmVzdW1lXHRcdD0gZ2VucGh5X3Jlc3VtZSxcbi1cdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdD0geXQ4NTMxX3NldF93b2wsXG4tXHRcdC5saW5rX2NoYW5nZV9ub3RpZnkgPSB5dDg1MzFfbGlua19jaGFuZ2Vfbm90aWZ5LFxuLVx0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuLVx0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbi1cdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUzMVMpLFxuLVx0XHQubmFtZVx0XHQ9IFwiWVQ4NTMxUyBHaWdhYml0IEV0aGVybmV0XCIsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0geXQ4NTIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnByb2JlXHRcdD0geXQ4NTIxX3Byb2JlLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuLVx0XHQuZ2V0X3dvbFx0PSB5dHBoeV9nZXRfd29sLFxuLVx0XHQuc2V0X3dvbFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdD0geXQ4NTIxX2NvbmZpZ19hbmVnLFxuLVx0XHQuYW5lZ19kb25lXHQ9IHl0ODUyMV9hbmVnX2RvbmUsXG4tXHRcdC5jb25maWdfaW5pdFx0PSB5dDg1MjFfY29uZmlnX2luaXQsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSB5dDg1MjFfcmVhZF9zdGF0dXMsXG4tXHRcdC5zb2Z0X3Jlc2V0XHQ9IHl0ODUyMV9zb2Z0X3Jlc2V0LFxuLVx0XHQuc3VzcGVuZFx0PSB5dDg1MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHl0ODUyMV9yZXN1bWUsXG4tXHR9LFxuLVx0e1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyMSksXG4tXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyMSAyLjVHYnBzIFBIWVwiLFxuLVx0XHQuZ2V0X2ZlYXR1cmVzXHRcdD0geXQ4ODIxX2dldF9mZWF0dXJlcyxcbi1cdFx0LnJlYWRfcGFnZVx0XHQ9IHl0ODUyMV9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHRcdD0geXQ4NTIxX3dyaXRlX3BhZ2UsXG4tXHRcdC5nZXRfd29sXHRcdD0geXRwaHlfZ2V0X3dvbCxcbi1cdFx0LnNldF93b2xcdFx0PSB5dHBoeV9zZXRfd29sLFxuLVx0XHQuY29uZmlnX2FuZWdcdFx0PSBnZW5waHlfY29uZmlnX2FuZWcsXG4tXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjFfYW5lZ19kb25lLFxuLVx0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjFfY29uZmlnX2luaXQsXG4tXHRcdC5nZXRfcmF0ZV9tYXRjaGluZ1x0PSB5dDg4MjFfZ2V0X3JhdGVfbWF0Y2hpbmcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyMV9yZWFkX3N0YXR1cyxcbi1cdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjFfc29mdF9yZXNldCxcbi1cdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjFfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODIxX3Jlc3VtZSxcbisvKipcbisgKiB5dDg4MjRfcmVhZF9wYWdlKCkgLSByZWFkIHJlZyBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgY3VycmVudCByZWcgc3BhY2Ugb2YgeXQ4ODI0IChZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9cbisgKiBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9yZWFkX3BhZ2Uoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXG4rXHRvbGRfcGFnZSA9IHl0cGh5X3JlYWRfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gb2xkX3BhZ2U7XG4rXG4rXHRpZiAoKG9sZF9wYWdlIFx1MDAyNiBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLKSA9PSBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSlcbitcdFx0cmV0dXJuIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFO1xuK1xuK1x0cmV0dXJuIFlUODgyNF9SU1NSX1VUUF9TUEFDRTtcbit9O1xuK1xuKy8qKlxuKyAqIHl0ODgyNF93cml0ZV9wYWdlKCkgLSB3cml0ZSByZWcgcGFnZVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogQHBhZ2U6IFRoZSByZWcgcGFnZShZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRS9ZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpIHRvIHdyaXRlLlxuKyAqXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF93cml0ZV9wYWdlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdHUxNiBkYXRhO1xuK1xuK1x0b2xkX3BhZ2UgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHKTtcbitcdGRhdGEgPSBvbGRfcGFnZSBcdTAwMjYgKH4oMHgxKSk7XG4rXHRkYXRhIHw9IHBhZ2U7XG4rXG4rXHRyZXR1cm4geXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2socGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcsIGRhdGEpO1xuK307XG4rXG4rLyoqXG4rICogY29uZmlndXJhdGlvbiBZVDg4MjQgdG8gb25lIHRlbXBsYXRlIHRlc3QgbW9kZS5cbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdFx0cmV0ID0gIHl0cGh5X3dyaXRlX21tZChwaHlkZXYsIDB4MSwgMHgwMDg0LCAweDIwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogZW5hYmxlIFlUODgyNCBzZXJkZXMgaXNvbGF0ZS5cbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0XHRcdCBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQgPSAwO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpIHtcbitcdFx0XHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0LyogaXNvbGF0aW9uICovXG4rXHRcdFx0cmV0IHw9IEJJVCgxMCk7XG4rXHRcdFx0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHR9XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRvIFlUODgyNCBVVFAgc29mdHJlc2V0LlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDNfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0XHRyZXQgfD0gQk1DUl9SRVNFVDtcbitcdFx0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0bXNsZWVwKDUwKTtcbitcdFx0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fSB3aGlsZSAoKHJldCBcdTAwMjYgQk1DUl9SRVNFVCkgXHUwMDI2XHUwMDI2IC0tcmV0cnkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogZGlzYWJsZSBZVDg4MjQgdGVtcGxhdGUgdGVzdCBtb2RlLlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHBvcnQ7XG4rXHRpbnQgcmV0O1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNlPSAwKSB7XG4rXHRcdGlmIChyZWdfc3BhY2UgPT0gWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKSB7XG4rXHRcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4MDA4NCwgMHgwMDAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdFx0XHQvKiByZWFkIHRoZSBjYWxpYnJhdGlvbiB2YWwgb2YgYmFuZCBhZnRlciBwb3dlciBvbixcbitcdFx0XHRcdCAqICogb25seSBmb3IgcmVjb3JkaW5nLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRyZXQgPSB5dHBoeV9yZWFkX2V4dChwaHlkZXYsIDB4MDQzZSk7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGRpc2FibGUgWVQ4ODI0IHNlcmRlcyBpc29sYXRlLlxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0dW5zaWduZWQgaW50IHJldHJ5ID0gMTI7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzZT0gMCkge1xuK1x0XHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdFx0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9CTUNSKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRcdC8qIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdFx0cmV0IFx1MDAyNj0gfkJJVCgxMCk7XG4rXHRcdFx0Lyogc29mdCByZXNldCAqL1xuK1x0XHRcdHJldCB8PSBCTUNSX1JFU0VUO1xuK1x0XHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgTUlJX0JNQ1IsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdFx0ZG8ge1xuK1x0XHRcdFx0bXNsZWVwKDUwKTtcbitcdFx0XHRcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBNSUlfQk1DUik7XG4rXHRcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdFx0fSB3aGlsZSAoKHJldCBcdTAwMjYgQk1DUl9SRVNFVCkgXHUwMDI2XHUwMDI2IC0tcmV0cnkpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDI2IEJNQ1JfUkVTRVQpXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdH1cbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3NvZnRfcmVzZXQoKSAtIGNhbGxlZCB0byBpc3N1ZSBhIFBIWSBzb2Z0d2FyZSByZXNldFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICogZm9yIGludGVybmFsIFlUODgyNFxuKyAqIDEpIHNldCB1dHAgdGVtcGxhdGUgdGVzdCBtb2RlXG4rICogMikgdXRwIHJlc3RhcnRcbisgKiAzKSBkaXNhYmxlIHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbisgKiBmb3IgZXh0ZXJuYWwgWVQ4ODI0XG4rICogMSkgc2V0IHV0cCB0ZW1wbGF0ZSB0ZXN0IG1vZGVcbisgKiAyKSBlbmFibGUgc2VyZGVzIGlzb2xhdGVcbisgKiAzKSB1dHAgcmVzdGFydFxuKyAqIDQpIGRpc2FibGUgdXRwIHRlbXBsYXRlIHRlc3QgbW9kZVxuKyAqIDUpIGRpc2FibGUgc2VyZGVzIGlzb2xhdGVcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3NvZnRfcmVzZXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMl9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiB1dHAgc29mdCByZXNldCAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogbm9ybWFsIG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBzb2Z0IHJlc2V0IGFuZCBkaXNhYmxlIGlzb2xhdGlvbiAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qKlxuKyAqIGV4dGVybmFsIFlUODgyNCBpbml0XG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgaW50IHJlZ19zcGFjZSlcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdHUxNiB2YWxfMSwgdmFsXzIsIHZhbF8zLCB0bXA7XG4rXHRpbnQgcG9ydDtcbitcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCByZWdfc3BhY2UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFKSB7XG4rXHRcdC8qIHJlYWQgZWZ1c2UgKi9cbitcdFx0dmFsXzEgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNlKTtcbitcdFx0aWYgKHZhbF8xIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0dmFsXzIgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTNmKTtcbitcdFx0aWYgKHZhbF8yIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0dmFsXzMgPSB5dHBoeV9yZWFkX3RvcF9leHRfd2l0aF9sb2NrKHBoeWRldiwgMHhhMTQwKTtcbitcdFx0aWYgKHZhbF8zIFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0aWYgKHBvcnQgPT0gMCkge1xuK1x0XHRcdC8qIFNlcmRlcyBvcHRpbWl6YXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YmUsIDB4MDAwZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OWYsIDB4N2RlZCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0YTksIDB4MDA5Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBhbmFsb2cgQ0RSICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDA2LCAweDA4MDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFZDTyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOCwgMHg5MDI0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQzOSwgMHgwMGMwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBQTEwgbG9jayAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNDI5KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDEzKSB8IEJJVCgxMikpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg3KSB8IEJJVCg2KSkgXHUwMDNlXHUwMDNlIDYpO1xuK1x0XHRcdHJldCB8PSAodG1wIFx1MDAzY1x1MDAzYyAxMik7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDI5LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0NDEpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMSkgfCBCSVQoMCkpO1xuK1x0XHRcdHRtcCA9ICh2YWxfMSBcdTAwMjYgKEJJVCg1KSB8IEJJVCg0KSkgXHUwMDNlXHUwMDNlIDQpO1xuK1x0XHRcdHJldCB8PSB0bXA7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDQxLCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0MmIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTMpIHwgQklUKDEyKSk7XG4rXHRcdFx0dG1wID0gKHZhbF8zIFx1MDAyNiAoQklUKDEpIHwgQklUKDApKSk7XG4rXHRcdFx0cmV0IHw9ICh0bXAgXHUwMDNjXHUwMDNjIDEyKTtcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmIsIHJldCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0M2EsIDB4MTAwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0MmEsIDB4ZjA3MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBjYWJsZSBsZW5ndGggdGhyZXNob2xkICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkxLCAweDAwN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDkyLCAweDdmN2YpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIHRyYWluaW5nIHRocmVzaG9sZCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ1NCwgMHgwZjE0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ5NywgMHgwYTQ0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIGRpZ2l0YWwgZXllIGRpYWdyYW0gb2YgU2VyRGVzICovXG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGNkLCAweDAwMDApO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0LyogU2VyZGVzIExETyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3JlYWRfZXh0KHBoeWRldiwgMHgwNGI1KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCBcdTAwMjY9IH4oQklUKDYpIHwgQklUKDUpIHwgQklUKDQpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNCkgfCBCSVQoMykgfCBCSVQoMikpIFx1MDAzZVx1MDAzZSAyKTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgNCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI1LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0ID0geXRwaHlfcmVhZF9leHQocGh5ZGV2LCAweDA0YjQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0cmV0IFx1MDAyNj0gfihCSVQoMTApIHwgQklUKDkpIHwgQklUKDgpKTtcbitcdFx0XHR0bXAgPSAodmFsXzIgXHUwMDI2IChCSVQoNykgfCBCSVQoNikgfCBCSVQoNSkpIFx1MDAzZVx1MDAzZSA1KTtcbitcdFx0XHRyZXQgfD0gKHRtcCBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGI0LCByZXQpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdFx0Lyogb3B0aW1pemVkIFNlcmRlcyBSWCAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWUzKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4YSwgMHgwZmZmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQwOCwgMHg3YzAwKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRkNiwgMHgwMDdmKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ0ZiwgMHhmZjA4KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIG9wdGltaXplZCBTZXJkZXMgVFggKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OGUsIDB4N2QwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGQsIDB4MDYwNik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHQvKiBTZXJkZXMgbWFudWFsIGNvbmZpZyAqL1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMCwgMHgwODA0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRiMSwgMHg3MDc0KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDRhZiwgMHg0NWU3KTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRcdC8qIHJlc3RhcnQgY2FsaWJyYXRpb24gKi9cbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMDMsIDB4NTYwMyk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2ZmZik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0OTIsIDB4N2Y3Zik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDA0MCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDIwMDAsIDB4MDAwMCk7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0fVxuK1xuK1x0XHQvKiBUWCBwcmVhbWJsZSBwYWRkZWQgdG8gODsgUlggSVBHIGFsd2F5cyBcdTAwM2UgOCAqL1xuK1x0XHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIDB4MDAxNywgMHgyMDA3KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDkwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH0gZWxzZSBpZiAocmVnX3NwYWNlID09IFlUODgyNF9SU1NSX1VUUF9TUEFDRSkge1xuK1x0XHQvKiBwb3dlciBkb3duICovXG4rXHRcdHJldCA9IF9fcGh5X3dyaXRlKHBoeWRldiwgMHgwMDAwLCAweDE5MDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogcGxsIGNhbGlicmF0aW9uICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDAwMSwgMHgwMDAzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHgwY2JhKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYSwgMHhjM2YxKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwYywgMHgxNjIwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwYTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJiNiwgMHgwZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXphdGlvbiB1dHAgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDAxLCAweDAwMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogZW5hYmxlIG5pYmJsZSAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEwMDMsIDB4MDAwMyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBpZGxlIGVyciBkZXRlY3QgZW5hYmxlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDNkMCwgMHg1MjEwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAyLjVHIGxvbmcgY2FibGUgcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzcyLCAweDUwMzgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzdjLCAweDYwNjgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzg4LCAweDAwYTApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIGZhc3QgcmV0cmFpbiAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzNTksIDB4MjE0MCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwMGMsIDB4YzFhMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAyLjVHIHRlbXBsYXRlIHRvbmUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmZhLCAweDAwODMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGUyLCAweDAxNDkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDIuNUcgdGVtcGxhdGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdlLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDdmLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgwLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDgxLCAweDM5MzkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwMDBNIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzM2LCAweGFiMGEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzQwLCAweDMwMWQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogMTAwTSB0ZW1wbGF0ZSBhbXBsaXR1ZGUgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZlLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDZmLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcwLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNDcxLCAweDQ1NDUpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIDEwME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzMGIsIDB4YWExZCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA3MWYsIDB4MDAzNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiAxME0gdGVtcGxhdGUgYW1wbGl0dWRlICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YiwgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ2YywgMHgxODE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIG9wdGltaXplZCAxME0gY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjYsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjcsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjgsIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDA0NjksIDB4NmM2Yyk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZSB1dHAgMTAwME0gcGVyZm9ybWFuY2UgKi9cbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzRhLCAweGZmMDMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMGY4LCAweGIzZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMDU5LCAweDQwNDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJjLCAweDUwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJkLCAweGQwOTQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzJlLCAweDUzMDgpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwMzIyLCAweDY0NDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQzLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgwNGQyLCAweDUyMjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0Lyogb3B0aW1pemVkIEVNQyBDUyAqL1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYzgsIDB4ZmZmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAwYmUsIDB4NjQwNik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDAzN2EsIDB4NDBmZik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiBvcHRpbWl6ZWQgRU1DIFJFICovXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MDQ4MiwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNSwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNiwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkNywgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTJkOCwgMHgxZjFmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIxOCwgMHgwMDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIGludGVybmFsIFlUODgyNCBpbml0XG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHRcdFx0ICAgICBpbnQgcmVnX3NwYWNlKVxuK3tcbitcdHN0cnVjdCB5dDg1MjFfcHJpdiAqcHJpdiA9IHBoeWRldi1cdTAwM2Vwcml2O1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHBvcnQgPSAwO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIHJlZ19zcGFjZSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHBvcnQgPSBwaHlkZXYtXHUwMDNlbWRpby5hZGRyIC0gcHJpdi1cdTAwM2VwaHlfYmFzZV9hZGRyO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgxLCAweDMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgMHgxOTAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTIwZSwgMHhjYmEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBhLCAweGMzZjEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjBjLCAweDE2MjApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmI2LCAweGEwMCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0XHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGEyYjYsIDB4ZTAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAwMywgMHgzKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDNkMCwgMHg1MjEwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzcyLCAweDUwMzgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzN2MsIDB4NjA2OCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM4OCwgMHhhMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM1OSwgMHgyMTQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX3RvcF9leHQocGh5ZGV2LCAweGEyZmEsIDB4ODMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZTIsIDB4MTQ5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIDIuNUcgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0N2UsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ3ZiwgMHgzOTM5KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgwLCAweDM5MzkpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ODEsIDB4MzkzOSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAwIGNhYmxlIGxlbmd0aCB0aHJlc2hvbGQgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzM2LCAweGFiMGEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzNDAsIDB4MzAxZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAwIHBlcmZvcm1hbmNlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM0YSwgMHhmZjAzKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4ZjgsIDB4YjNmZik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyYywgMHg1MDk0KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4MzJkLCAweGQwOTQpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMmUsIDB4NTMwOCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDMyMiwgMHg2NDQwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NGQzLCAweDUyMjApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0ZDIsIDB4NTIyMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAgdGVtcGF0ZSAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NmUsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2ZiwgMHg0NTQ1KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDcwLCAweDQ1NDUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NzEsIDB4NDU0NSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMDAgY2FibGUgbGVuZ3RoIHRocmVzaG9sZCAqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHgzMGIsIDB4YWExZCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDcxZiwgMHgzNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiAxMCB0ZW1wYXRlICovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2YiwgMHgxODE4KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDZjLCAweDE4MTgpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0LyogMTAgdGVtcGF0ZSBNQVUqL1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjYsIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ2NywgMHg2YzZjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDY4LCAweDZjNmMpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHg0NjksIDB4NmM2Yyk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHQvKiBFTUMgQ1MgKi9cbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YzgsIDB4ZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YmUsIDB4NjQwNik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDM3YSwgMHg0MGZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdC8qIEVNQyBSRSovXG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweDQ4MiwgMHhmZmZmKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdGlmIChwb3J0ID09IDAgfHwgcG9ydCA9PSAyKSB7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4NDgyLCAweGZmZmYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ1LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ2LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ3LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMmQ4LCAweDFmMWYpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdFx0cmV0ID0geXRwaHlfd3JpdGVfZXh0KHBoeWRldiwgMHhhMjE4LCAweDZlKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmYwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZCwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRcdHJldCA9IHl0cGh5X3dyaXRlX2V4dChwaHlkZXYsIDB4YTAxZSwgMHhmZmZmKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHR9XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9leHQocGh5ZGV2LCAweGMsIDB4NDFhMSk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSB5dHBoeV93cml0ZV9tbWQocGh5ZGV2LCAweDEsIDB4ODQsIDB4MjAwMCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXHRyZXQgPSBfX3BoeV93cml0ZShwaHlkZXYsIE1JSV9CTUNSLCAweDkxNDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1x0cmV0ID0geXRwaHlfd3JpdGVfbW1kKHBoeWRldiwgMHgxLCAweDg0LCAweDApO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2luaXQoKSAtIHBoeSBpbml0aWFsaXphdGlvaW5cbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogUmV0dXJuczogMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2luaXQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQ7XG4rXG4rXHRpZiAocGh5ZGV2LVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUwpIHtcbitcdFx0LyogYmFzZSBhZGRyIGFuZCB0b3AgYWRkciB1cGRhdGUgZm9yIGludGVybmFsIFlUODgyNCovXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IDB4NDtcbitcdFx0cHJpdi1cdTAwM2V0b3BfcGh5X2FkZHIgPSAweDk7XG4rXHRcdHJldCA9IHl0ODgyNF9pbnRlcm5hbF9jb25maWdfaW5pdF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0XHRZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9IGVsc2Uge1xuK1x0XHRyZXQgPSB5dDg4MjRfY29uZmlnX2luaXRfcGFnZWQocGh5ZGV2LCBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0geXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1x0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXQocGh5ZGV2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LFxuK1x0XHQgICAgXCIlcyBkb25lLCBwaHkgYWRkcjogJWQsIHBoeSBiYXNlIGFkZHIgPSAlZFxcblwiLFxuK1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkcik7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB5dDg4MjRfY29uZmlnX2ludHIoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXYgPSBwaHlkZXYtXHUwMDNlcHJpdjtcbitcdGludCByZXQgPSAwLCBvbGRfcGFnZTtcbitcdGludCBwb3J0O1xuK1xuK1x0cG9ydCA9IHBoeWRldi1cdTAwM2VtZGlvLmFkZHIgLSBwcml2LVx1MDAzZXBoeV9iYXNlX2FkZHI7XG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJydXB0cyA9PSBQSFlfSU5URVJSVVBUX0VOQUJMRUQpIHtcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDAwXG4rXHRcdCAqIGJpdDYgaW50X3BvbGFyaXR5IDEnYjAgbG93IGFjdGl2ZSwgMSdiMSBoaWdoIGFjdGl2ZVxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCBZVDg1MjFfUkVHX1NQQUNFX1NFTEVDVF9SRUcpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgWVQ4NTIxX1JFR19TUEFDRV9TRUxFQ1RfUkVHLCByZXQgXHUwMDI2ICh+QklUKDYpKSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTlcbitcdFx0ICogYml0NSBpbnRyX3BoeV9wdWxzZV9lbiAxJ2IwIGxldmVsLCAxJ2IxIHB1bHNlXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV90b3BfcmVhZChwaHlkZXYsIDB4YTAxOSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgPSB5dHBoeV90b3Bfd3JpdGUocGh5ZGV2LCAweGEwMTksIHJldCB8IEJJVCg1KSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHQvKiB0b3AgZXh0IHJlZyAweGEwMTggcGh5X3B1bHNlX2x0aCBiaXQxNDo4XG4rXHRcdCAqIHRvcCBleHQgcmVnIDB4YTAxOSB0aW1lcl90aWNrX3NlbCBiaXQ4OjdcbitcdFx0ICogYml0MTQ6OCBwaHlfcHVsc2VfbHRoIGJpdDg6NyB0aW1lcl90aWNrX3NlbCAgIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA3YVx0XHQgMHgwMDAyXHRcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGhcbitcdFx0ICogMHgwMDY0XHRcdCAweDAwMDFcdFx0ICAgICAgICAgMW1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDA0ZVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwMG1zIHB1bHNlIHdpZHRoXG4rXHRcdCAqIDB4MDAwOVx0XHQgMHgwMDAwXHRcdCAgICAgICAgIDEwbXMgcHVsc2Ugd2lkdGgoZGVmYXVsdClcbitcdFx0ICovXG4rXHRcdHJldCA9IHl0cGh5X3RvcF9yZWFkKHBoeWRldiwgMHhhMDE4KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdHJldCBcdTAwMjY9IH4weDdmMDA7XG4rXHRcdHJldCB8PSAoMHgwMDA5IFx1MDAzY1x1MDAzYyA4KTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDE4LCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMTkpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfjB4MTgwO1xuK1x0XHRyZXQgfD0gKDB4MDAwMCBcdTAwM2NcdTAwM2MgNyk7XG4rXHRcdHJldCA9IHl0cGh5X3RvcF93cml0ZShwaHlkZXYsIDB4YTAxOSwgcmV0KTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRcdC8qIHRvcCBleHQgcmVnIDB4YTAxYyBpbnRlcnJ1cHQgc3RhdGUoUmVhZCBDbGVhcilcbitcdFx0ICogYml0MTEgUEhZMyBpbnRlcnJ1cHQgMTogcGh5MyBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQ5ICBQSFkxIGludGVycnVwdCAxOiBwaHkxIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdFx0ICogYml0OCAgUEhZMCBpbnRlcnJ1cHQgMTogcGh5MCBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqXG4rXHRcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQ2ICBQSFkyIGxpbmsgZG93biAxOiBwaHkyIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdFx0ICogYml0NSAgUEhZMSBsaW5rIGRvd24gMTogcGh5MSBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHRcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKlxuK1x0XHQgKiBiaXQzICBQSFkzIGxpbmsgdXAgMTogcGh5MyBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQyICBQSFkyIGxpbmsgdXAgMTogcGh5MiBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKiBiaXQwICBQSFkwIGxpbmsgdXAgMTogcGh5MCBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWMpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFhXG4rXHRcdCAqIGJpdDUgaW50bl93b2xfbW9kZSAxJ2IxIGVuYWJsZSBpbnRuX3dvbCBwaW4gb3V0cHV0XG4rXHRcdCAqIGJpdDQgaW50bl9tb2RlIDEnYjEgZW5hYmxlIGludG4gcGluIG91dHB1dFxuK1x0XHQgKi9cbitcdFx0cmV0ID0geXRwaHlfdG9wX3JlYWQocGh5ZGV2LCAweGEwMWEpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0cmV0IFx1MDAyNj0gfkJJVCg1KTtcbitcdFx0cmV0IHw9IEJJVCg0KTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDFhLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdFx0LyogdG9wIGV4dCByZWcgMHhhMDFiIGludGVycnVwdCBtYXNrXG4rXHRcdCAqIGJpdDExIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQ3IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQzIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0MTAgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwL2Rvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqIGJpdDYgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIGRvd24pIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqIGJpdDIgMSdiMSBlbmFibGUgaW50ZXJydXB0IHNpZ25hbChsaW5rIHVwKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKlxuK1x0XHQgKiBiaXQ5IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cC9kb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQ1IDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayBkb3duKSBvdXRwdXQgdG8gaW50ZXJydXB0IHBpblxuK1x0XHQgKiBiaXQxIDEnYjEgZW5hYmxlIGludGVycnVwdCBzaWduYWwobGluayB1cCkgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICpcbitcdFx0ICogYml0OCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXAvZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICogYml0NCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgZG93bikgb3V0cHV0IHRvIGludGVycnVwdCBwaW5cbitcdFx0ICogYml0MCAxJ2IxIGVuYWJsZSBpbnRlcnJ1cHQgc2lnbmFsKGxpbmsgdXApIG91dHB1dCB0byBpbnRlcnJ1cHQgcGluXG4rXHRcdCAqL1xuK1x0XHRyZXQgPSB5dHBoeV90b3BfcmVhZChwaHlkZXYsIDB4YTAxYik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0XHRyZXQgfD0gKEJJVChwb3J0ICsgOCkgfCBCSVQocG9ydCArIDQpIHwgQklUKHBvcnQpKTtcbitcdFx0cmV0ID0geXRwaHlfdG9wX3dyaXRlKHBoeWRldiwgMHhhMDFiLCByZXQpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcdH1cbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rc3RhdGljIGlycXJldHVybl90IHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHQvKiB0b3AgZXh0IHJlZyAweGEwMWMgaW50ZXJydXB0IHN0YXRlKFJlYWQgQ2xlYXIpXG4rXHQgKiBiaXQxMSBQSFkzIGludGVycnVwdCAxOiBwaHkzIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDEwIFBIWTIgaW50ZXJydXB0IDE6IHBoeTIgbGluayB1cC9kb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0OSAgUEhZMSBpbnRlcnJ1cHQgMTogcGh5MSBsaW5rIHVwL2Rvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQ4ICBQSFkwIGludGVycnVwdCAxOiBwaHkwIGxpbmsgdXAvZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDcgIFBIWTMgbGluayBkb3duIDE6IHBoeTMgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0NiAgUEhZMiBsaW5rIGRvd24gMTogcGh5MiBsaW5rIGRvd24gaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQ1ICBQSFkxIGxpbmsgZG93biAxOiBwaHkxIGxpbmsgZG93biBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDQgIFBIWTAgbGluayBkb3duIDE6IHBoeTAgbGluayBkb3duIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MyAgUEhZMyBsaW5rIHVwIDE6IHBoeTMgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqIGJpdDIgIFBIWTIgbGluayB1cCAxOiBwaHkyIGxpbmsgdXAgaW50ZXJydXB0IGhhcHBlbmVkLCAwOiBpbnRlcnJ1cHQgbm90IGhhcHBlbmVkXG4rXHQgKiBiaXQxICBQSFkxIGxpbmsgdXAgMTogcGh5MSBsaW5rIHVwIGludGVycnVwdCBoYXBwZW5lZCwgMDogaW50ZXJydXB0IG5vdCBoYXBwZW5lZFxuK1x0ICogYml0MCAgUEhZMCBsaW5rIHVwIDE6IHBoeTAgbGluayB1cCBpbnRlcnJ1cHQgaGFwcGVuZWQsIDA6IGludGVycnVwdCBub3QgaGFwcGVuZWRcbitcdCAqL1xuK1x0cmV0ID0geXRwaHlfcmVhZF90b3BfZXh0KHBoeWRldiwgMHhhMDFjKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHBoeV90cmlnZ2VyX21hY2hpbmUocGh5ZGV2KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK1x0aWYgKHJldCBcdTAwM2UgMClcbitcdFx0cmV0dXJuIElSUV9IQU5ETEVEO1xuK1x0ZWxzZVxuK1x0XHRyZXR1cm4gSVJRX05PTkU7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9jb25maWdfYW5lZygpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfYW5lZ19kb25lKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGxpbmsgPSAwO1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldCA9IDA7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGxpbmsgPSAhIShfX3BoeV9yZWFkKHBoeWRldiwgWVRQSFlfU1BFQ0lGSUNfU1RBVFVTX1JFRykgXHUwMDI2XG4rXHRcdFx0ICAgICBZVFBIWV9TU1JfTElOSyk7XG4rXG4rXHRuZXRkZXZfaW5mbyhwaHlkZXYtXHUwMDNlYXR0YWNoZWRfZGV2LCBcIiVzLCBwaHkgYWRkcjogJWQsIGxpbmtfdXRwOiAlZFxcblwiLFxuK1x0XHQgICAgX19mdW5jX18sIHBoeWRldi1cdTAwM2VtZGlvLmFkZHIsIGxpbmspO1xuK1xuK2Vycl9yZXN0b3JlX3BhZ2U6XG4rXHRyZXR1cm4gcGh5X3Jlc3RvcmVfcGFnZShwaHlkZXYsIG9sZF9wYWdlLCByZXQpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfcmVhZF9zdGF0dXNfcGFnZWQoKSAtICBkZXRlcm1pbmVzIHRoZSBzcGVlZCBhbmQgZHVwbGV4IG9mIG9uZSBwYWdlXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKiBAcGFnZTogVGhlIHJlZyBwYWdlKFlUODgyNF9SU1NSX0ZJQkVSX1NQQUNFL1lUODgyNF9SU1NSX1VUUF9TUEFDRSkgdG9cbisgKiBvcGVyYXRlLlxuKyAqXG4rICogcmV0dXJucyAxICh1dHAgb3IgZmliZXIgbGluayksMCAobm8gbGluaykgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsIGludCBwYWdlLFxuK1x0XHRcdFx0ICAgIGludCAqc3RhdHVzLCBpbnQgKmxwYSlcbit7XG4rXHRpbnQgb2xkX3BhZ2U7XG4rXHRpbnQgcmV0ID0gMDtcbitcbitcdHBhZ2UgXHUwMDI2PSBZVDg4MjRfUlNTUl9TUEFDRV9NQVNLO1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBwYWdlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfcmVhZChwaHlkZXYsIE1JSV9MUEEpO1xuK1x0KmxwYSA9IHJldDtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdHJldCA9IF9fcGh5X3JlYWQocGh5ZGV2LCBZVFBIWV9TUEVDSUZJQ19TVEFUVVNfUkVHKTtcbitcdCpzdGF0dXMgPSByZXQ7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSAhISgqc3RhdHVzIFx1MDAyNiBZVFBIWV9TU1JfTElOSyk7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9yZWFkX3N0YXR1cygpIC0gIGRldGVybWluZXMgdGhlIG5lZ290aWF0ZWQgc3BlZWQgYW5kIGR1cGxleFxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IGxpbms7XG4rXHRpbnQgbHBhO1xuK1x0aW50IHZhbDtcbitcbitcdHBoeWRldi1cdTAwM2VwYXVzZSA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlbGluayA9IDA7XG4rXHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuK1x0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IERVUExFWF9VTktOT1dOO1xuK1xuK1x0bGluayA9IHl0ODgyNF9yZWFkX3N0YXR1c19wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFlUODgyNF9SU1NSX1VUUF9TUEFDRSwgXHUwMDI2dmFsLCBcdTAwMjZscGEpO1xuK1x0aWYgKGxpbmsgXHUwMDNjIDApXG4rXHRcdHJldHVybiBsaW5rO1xuK1xuK1x0aWYgKGxpbmspIHtcbitcdFx0cGh5ZGV2LVx1MDAzZWxpbmsgPSAxO1xuK1x0XHRwaHlkZXYtXHUwMDNlcGF1c2UgPSAhIShscGEgXHUwMDI2IEJJVCgxMCkpO1xuK1x0XHRwaHlkZXYtXHUwMDNlYXN5bV9wYXVzZSA9ICEhKGxwYSBcdTAwMjYgQklUKDExKSk7XG4rXG4rXHRcdC8qIHVwZGF0ZSBzcGVlZCBcdTAwMjYgZHVwbGV4ICovXG4rXHRcdHl0ODgyMV9hZGp1c3Rfc3RhdHVzKHBoeWRldiwgdmFsKTtcbitcdH0gZWxzZSB7XG4rXHRcdHBoeWRldi1cdTAwM2VsaW5rID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZXBhdXNlID0gMDtcbitcdFx0cGh5ZGV2LVx1MDAzZWFzeW1fcGF1c2UgPSAwO1xuK1x0XHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuK1x0XHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX1VOS05PV047XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9vbigpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfdXRwX3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4rXHRcdFx0ICAgICAgIGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IG9sZF9wYWdlO1xuK1x0aW50IHJldDtcbitcbitcdG9sZF9wYWdlID0gcGh5X3NlbGVjdF9wYWdlKHBoeWRldiwgcmVnX3NwYWNlKTtcbitcdGlmIChvbGRfcGFnZSBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0IFx1MDAyNj0gfkJNQ1JfUERPV047XG4rXHRyZXQgXHUwMDI2PSB+Qk1DUl9JU09MQVRFO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0KTtcbitcbitlcnJfcmVzdG9yZV9wYWdlOlxuK1x0cmV0dXJuIHBoeV9yZXN0b3JlX3BhZ2UocGh5ZGV2LCBvbGRfcGFnZSwgcmV0KTtcbit9XG4rXG4rLyoqXG4rICogeXQ4ODI0X3V0cF9wb3dlcl9kb3duKClcbisgKiBAcGh5ZGV2OiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5X2RldmljZVxuKyAqXG4rICogcmV0dXJucyAwIG9yIG5lZ2F0aXZlIGVycm5vIGNvZGVcbisgKi9cbitzdGF0aWMgaW50IHl0ODgyNF91dHBfcG93ZXJfZG93bihzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdFx0IGludCByZWdfc3BhY2UpXG4re1xuK1x0aW50IHJldCA9IDAsIG9sZF9wYWdlO1xuK1xuK1x0b2xkX3BhZ2UgPSBwaHlfc2VsZWN0X3BhZ2UocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0aWYgKG9sZF9wYWdlIFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rXHRyZXQgPSBfX3BoeV9yZWFkKHBoeWRldiwgTUlJX0JNQ1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gX19waHlfd3JpdGUocGh5ZGV2LCBNSUlfQk1DUiwgcmV0IHwgQk1DUl9QRE9XTik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wb3dlcl9vbigpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICogbmVlZCBXQSBsaWtlIHNvZnRyZXNldFxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX29uKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdGlmIChwaHlkZXYtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTCkge1xuK1x0XHQvKiBpbnZhbGlkIHRlc3QgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwMV9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIG9uICovXG4rXHRcdHJldCA9IHl0ODgyNF91dHBfcG93ZXJfb24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBzZHMgc29mdCByZXNldCBhbmQgZGlzYWJsZSBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDVfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHl0ODgyNF9yZXN1bWUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRyZXR1cm4geXQ4ODI0X3Bvd2VyX29uKHBoeWRldik7XG4rfVxuK1xuK3N0YXRpYyBpbnQgeXQ4ODI0X3Bvd2VyX2Rvd24oc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRpbnQgcmV0O1xuK1xuK1x0aWYgKHBoeWRldi1cdTAwM2VpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMKSB7XG4rXHRcdC8qIGludmFsaWQgdGVzdCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAxX3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHQvKiB1dHAgcG93ZXIgZG93biAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfdXRwX3Bvd2VyX2Rvd24ocGh5ZGV2LCBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdC8qIG5vcm1hbCBtb2RlICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA0X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fSBlbHNlIHtcbitcdFx0LyogaW52YWxpZCB0ZXN0IG1vZGUgKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9VVFBfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXG4rXHRcdC8qIHNkcyBpc29sYXRpb24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDJfcGFnZWQocGh5ZGV2LFxuK1x0XHRcdFx0XHRcdCAgICBZVDg4MjRfUlNTUl9GSUJFUl9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0LyogdXRwIHBvd2VyIGRvd24gKi9cbitcdFx0cmV0ID0geXQ4ODI0X3V0cF9wb3dlcl9kb3duKHBoeWRldiwgWVQ4ODI0X1JTU1JfVVRQX1NQQUNFKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHQvKiBub3JtYWwgbW9kZSAqL1xuK1x0XHRyZXQgPSB5dDg4MjRfc29mdF9yZXNldF9zdGVwNF9wYWdlZChwaHlkZXYsXG4rXHRcdFx0XHRcdFx0ICAgIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0Lyogc2RzIHNvZnQgcmVzZXQgYW5kIGRpc2FibGUgaXNvbGF0aW9uICovXG4rXHRcdHJldCA9IHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkKHBoeWRldixcbitcdFx0XHRcdFx0XHQgICAgWVQ4ODI0X1JTU1JfRklCRVJfU1BBQ0UpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCB5dDg4MjRfc3VzcGVuZChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuK3tcbitcdHJldHVybiB5dDg4MjRfcG93ZXJfZG93bihwaHlkZXYpO1xuK31cbitcbisvKipcbisgKiB5dDg4MjRfY29uZmlnX2FuZWcoKVxuKyAqIEBwaHlkZXY6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlfZGV2aWNlXG4rICpcbisgKiByZXR1cm5zIDAgb3IgbmVnYXRpdmUgZXJybm8gY29kZVxuKyAqL1xuK3N0YXRpYyBpbnQgeXQ4ODI0X2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4re1xuK1x0aW50IHBoeV9jdHJsID0gMDtcbitcdGludCBvbGRfcGFnZTtcbitcdGludCByZXQ7XG4rXG4rXHRvbGRfcGFnZSA9IHBoeV9zZWxlY3RfcGFnZShwaHlkZXYsIFlUODgyNF9SU1NSX1VUUF9TUEFDRSk7XG4rXHRpZiAob2xkX3BhZ2UgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3Jlc3RvcmVfcGFnZTtcbitcbitcdGlmIChsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQsXG4rXHRcdFx0ICAgICAgcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nKSlcbitcdFx0cGh5X2N0cmwgPSBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RztcbitcbitcdHJldCA9IHBoeV9tb2RpZnlfbW1kX2NoYW5nZWQocGh5ZGV2LCBNRElPX01NRF9BTixcbitcdFx0XHRcdCAgICAgTURJT19BTl8xMEdCVF9DVFJMLFxuK1x0XHRcdFx0ICAgICBNRElPX0FOXzEwR0JUX0NUUkxfQURWMl81RyxcbitcdFx0XHRcdCAgICAgcGh5X2N0cmwpO1xuK1x0aWYgKHJldClcbitcdFx0Z290byBlcnJfcmVzdG9yZV9wYWdlO1xuK1xuK1x0cmV0ID0gZ2VucGh5X2NvbmZpZ19hbmVnKHBoeWRldik7XG4rXHRpZiAocmV0KVxuK1x0XHRnb3RvIGVycl9yZXN0b3JlX3BhZ2U7XG4rXG4rZXJyX3Jlc3RvcmVfcGFnZTpcbitcdHJldHVybiBwaHlfcmVzdG9yZV9wYWdlKHBoeWRldiwgb2xkX3BhZ2UsIHJldCk7XG4rfVxuK1xuKy8qKlxuKyAqIHl0ODgyNF9wcm9iZSgpXG4rICogQHBoeWRldjogYSBwb2ludGVyIHRvIGEgXHUwMDI2c3RydWN0IHBoeV9kZXZpY2VcbisgKlxuKyAqIHJldHVybnMgMCBvciBuZWdhdGl2ZSBlcnJubyBjb2RlXG4rICovXG4rc3RhdGljIGludCB5dDg4MjRfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXY7XG4rXHRzdHJ1Y3QgeXQ4NTIxX3ByaXYgKnByaXY7XG4rXHR1MzIgcGh5X2Jhc2VfYWRkcjtcbitcbitcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbitcdGlmICghcHJpdilcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRwaHlkZXYtXHUwMDNlcHJpdiA9IHByaXY7XG4rXG4rXHQvKiBnZXQgYmFzZSBhZGRyIGFuZCB0b3AgYWRkciBmb3IgZXh0ZXJuYWwgWVQ4ODI0ICovXG4rXHRpZiAoIWRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYsIFwibW90b3Jjb21tLGJhc2UtYWRkcmVzc1wiLFxuK1x0XHRcdFx0ICAgICAgXHUwMDI2cGh5X2Jhc2VfYWRkcikpXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IHBoeV9iYXNlX2FkZHI7XG4rXHRlbHNlXG4rXHRcdHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciA9IFBIWV9CQVNFX0FERFI7XG4rXG4rXHRwcml2LVx1MDAzZXRvcF9waHlfYWRkciA9IHByaXYtXHUwMDNlcGh5X2Jhc2VfYWRkciArIDQ7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIG1vdG9yY29tbV9waHlfZHJ2c1tdID0ge1xuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUxMSksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MTEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTExX2NvbmZpZ19pbml0LFxuK1x0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4rXHRcdC5yZWFkX3BhZ2VcdD0geXQ4NTExX3JlYWRfcGFnZSxcbitcdFx0LndyaXRlX3BhZ2VcdD0geXQ4NTExX3dyaXRlX3BhZ2UsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMSksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MjEgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbitcdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbitcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuK1x0XHQubGVkX2h3X2lzX3N1cHBvcnRlZCA9IHl0ODUyMV9sZWRfaHdfaXNfc3VwcG9ydGVkLFxuK1x0XHQubGVkX2h3X2NvbnRyb2xfc2V0ID0geXQ4NTIxX2xlZF9od19jb250cm9sX3NldCxcbitcdFx0LmxlZF9od19jb250cm9sX2dldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9nZXQsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODUyMiksXG4rXHRcdC5uYW1lXHRcdD0gXCJZVDg1MjIgMTAwIE1lZ2FiaXQgRXRoZXJuZXRcIixcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IGdlbnBoeV9jb25maWdfYW5lZyxcbitcdFx0LmNvbmZpZ19pbml0XHQ9IHl0ODUyMl9jb25maWdfaW5pdCxcbitcdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSBnZW5waHlfcmVzdW1lLFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpLFxuK1x0XHQubmFtZVx0XHQ9IFwiWVQ4NTMxIEdpZ2FiaXQgRXRoZXJuZXRcIixcbitcdFx0LnByb2JlXHRcdD0geXQ4NTMxX3Byb2JlLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTMxX2NvbmZpZ19pbml0LFxuK1x0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHQ9IGdlbnBoeV9yZXN1bWUsXG4rXHRcdC5nZXRfd29sXHQ9IHl0cGh5X2dldF93b2wsXG4rXHRcdC5zZXRfd29sXHQ9IHl0ODUzMV9zZXRfd29sLFxuK1x0XHQubGlua19jaGFuZ2Vfbm90aWZ5ID0geXQ4NTMxX2xpbmtfY2hhbmdlX25vdGlmeSxcbitcdFx0LmxlZF9od19pc19zdXBwb3J0ZWQgPSB5dDg1MjFfbGVkX2h3X2lzX3N1cHBvcnRlZCxcbitcdFx0LmxlZF9od19jb250cm9sX3NldCA9IHl0ODUyMV9sZWRfaHdfY29udHJvbF9zZXQsXG4rXHRcdC5sZWRfaHdfY29udHJvbF9nZXQgPSB5dDg1MjFfbGVkX2h3X2NvbnRyb2xfZ2V0LFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzFTKSxcbitcdFx0Lm5hbWVcdFx0PSBcIllUODUzMVMgR2lnYWJpdCBFdGhlcm5ldFwiLFxuK1x0XHQuZ2V0X2ZlYXR1cmVzXHQ9IHl0ODUyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5wcm9iZVx0XHQ9IHl0ODUyMV9wcm9iZSxcbitcdFx0LnJlYWRfcGFnZVx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0PSB5dDg1MjFfd3JpdGVfcGFnZSxcbitcdFx0LmdldF93b2xcdD0geXRwaHlfZ2V0X3dvbCxcbitcdFx0LnNldF93b2xcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHQ9IHl0ODUyMV9jb25maWdfYW5lZyxcbitcdFx0LmFuZWdfZG9uZVx0PSB5dDg1MjFfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdD0geXQ4NTIxX2NvbmZpZ19pbml0LFxuK1x0XHQucmVhZF9zdGF0dXNcdD0geXQ4NTIxX3JlYWRfc3RhdHVzLFxuK1x0XHQuc29mdF9yZXNldFx0PSB5dDg1MjFfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdD0geXQ4NTIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0PSB5dDg1MjFfcmVzdW1lLFxuK1x0fSxcbitcdHtcbitcdFx0UEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpLFxuK1x0XHQubmFtZVx0XHRcdD0gXCJZVDg4MjEgMi41R2JwcyBQSFlcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg1MjFfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODUyMV93cml0ZV9wYWdlLFxuK1x0XHQuZ2V0X3dvbFx0XHQ9IHl0cGh5X2dldF93b2wsXG4rXHRcdC5zZXRfd29sXHRcdD0geXRwaHlfc2V0X3dvbCxcbitcdFx0LmNvbmZpZ19hbmVnXHRcdD0gZ2VucGh5X2NvbmZpZ19hbmVnLFxuK1x0XHQuYW5lZ19kb25lXHRcdD0geXQ4ODIxX2FuZWdfZG9uZSxcbitcdFx0LmNvbmZpZ19pbml0XHRcdD0geXQ4ODIxX2NvbmZpZ19pbml0LFxuK1x0XHQuZ2V0X3JhdGVfbWF0Y2hpbmdcdD0geXQ4ODIxX2dldF9yYXRlX21hdGNoaW5nLFxuK1x0XHQucmVhZF9zdGF0dXNcdFx0PSB5dDg4MjFfcmVhZF9zdGF0dXMsXG4rXHRcdC5zb2Z0X3Jlc2V0XHRcdD0geXQ4ODIxX3NvZnRfcmVzZXQsXG4rXHRcdC5zdXNwZW5kXHRcdD0geXQ4ODIxX3N1c3BlbmQsXG4rXHRcdC5yZXN1bWVcdFx0XHQ9IHl0ODgyMV9yZXN1bWUsXG4rXHR9LFxuK1x0e1xuK1x0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1lUODgyNCksXG4rXHRcdC5uYW1lXHRcdFx0PSBcIllUODgyNCBRdWFkIFBvcnRzIDIuNUdicHMgRXRoZXJuZXRcIixcbitcdFx0LmdldF9mZWF0dXJlc1x0XHQ9IHl0ODgyMV9nZXRfZmVhdHVyZXMsXG4rXHRcdC5yZWFkX3BhZ2VcdFx0PSB5dDg4MjRfcmVhZF9wYWdlLFxuK1x0XHQud3JpdGVfcGFnZVx0XHQ9IHl0ODgyNF93cml0ZV9wYWdlLFxuK1x0XHQuY29uZmlnX2ludHIgICAgICAgICAgICA9IHl0ODgyNF9jb25maWdfaW50cixcbitcdFx0LmhhbmRsZV9pbnRlcnJ1cHRcdD0geXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHQsXG4rXHRcdC5wcm9iZVx0XHQgICAgICAgID0geXQ4ODI0X3Byb2JlLFxuK1x0XHQuY29uZmlnX2FuZWdcdFx0PSB5dDg4MjRfY29uZmlnX2FuZWcsXG4rXHRcdC5hbmVnX2RvbmVcdFx0PSB5dDg4MjRfYW5lZ19kb25lLFxuK1x0XHQuY29uZmlnX2luaXRcdFx0PSB5dDg4MjRfY29uZmlnX2luaXQsXG4rXHRcdC5yZWFkX3N0YXR1c1x0XHQ9IHl0ODgyNF9yZWFkX3N0YXR1cyxcbitcdFx0LnNvZnRfcmVzZXRcdFx0PSB5dDg4MjRfc29mdF9yZXNldCxcbitcdFx0LnN1c3BlbmRcdFx0PSB5dDg4MjRfc3VzcGVuZCxcbitcdFx0LnJlc3VtZVx0XHRcdD0geXQ4ODI0X3Jlc3VtZSxcbiBcdH0sXG4gfTtcbiBcbiBtb2R1bGVfcGh5X2RyaXZlcihtb3RvcmNvbW1fcGh5X2RydnMpO1xuIFxuLU1PRFVMRV9ERVNDUklQVElPTihcIk1vdG9yY29tbSA4NTExLzg1MjEvODUzMS84NTMxUy84ODIxIFBIWSBkcml2ZXJcIik7XG4rTU9EVUxFX0RFU0NSSVBUSU9OKFwiTW90b3Jjb21tIDg1MTEvODUyMS84NTMxLzg1MzFTLzg4MjEvODgyNCBQSFkgZHJpdmVyXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJQZXRlciBHZWlzXCIpO1xuIE1PRFVMRV9BVVRIT1IoXCJGcmFua1wiKTtcbitNT0RVTEVfQVVUSE9SKFwiS3lsZVwiKTtcbiBNT0RVTEVfTElDRU5TRShcIkdQTFwiKTtcbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbkBAIC0zMTYxLDYgKzQ4MTAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1kaW9fZGV2aWNlX2lkIF9fbWF5YmVfdW51c2VkIG1vdG9yY29tbV90YmxbXSA9IHtcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg1MzEpIH0sXG4gXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4NTMxUykgfSxcbiBcdHsgUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9ZVDg4MjEpIH0sXG4rXHR7IFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfWVQ4ODI0KSB9LFxuIFx0eyAvKiBzZW50aW5lbCAqLyB9XG4gfTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE0VDE2OjM3OjA0LjA2MjE3NTM4OFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwNTg4NzEyNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgYSBOZXcgUEhZIERyaXZlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IGludHJvZHVjZXMgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkgZHJpdmVyIHdpdGhpbiBgZHJpdmVycy9uZXQvcGh5L21vdG9yY29tbS5jYC4gQ2xlYXJseSwgdGhpcyBpcyBhIGZhaXJseSBzdWJzdGFudGlhbCBhZGRpdGlvbiwgd2l0aCBhIGxvdCBvZiBjb2RlIGZvciByZWdpc3RlciBtYW5pcHVsYXRpb24sIHJlc2V0LCBhbmQgaW5pdGlhbGl6YXRpb24g4oCTIHRoZSB1c3VhbCBzdXNwZWN0cyBmb3IgYSBQSFkgZHJpdmVyLiBUaGUgWVQ4ODI0IGlzIGEgTW90b3Jjb21tIHF1YWQtcG9ydCAyLjVHYnBzIEV0aGVybmV0IFBIWSwgaGFyZHdhcmUtc3BlY2lmaWMsIG9mIGNvdXJzZS5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uLCBhcyBhbHdheXMsIGlzOiBjYW4gdGhpcyBjb2RlICphY3R1YWxseSogYmUgZXhlY3V0ZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpbmsgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUsIHdoaWNoIGlzIHdoZXJlIGEgbG90IG9mIG15IGRlYnVnZ2luZyBoYXBwZW5zLiBOb3JtYWxseSwgd2l0aCBQSFkgZHJpdmVycywgeW914oCZcmUgc3R1Y2sgd2l0aCB0aGUgaGFyZHdhcmUsIG9yIHlvdSBuZWVkIHNvbWUga2luZCBvZiBNRElPIGJ1cyBlbXVsYXRpb24gdG8gZXZlbiBnZXQgdGhlIGRyaXZlciBsb2FkZWQuIFlvdSdkIG5lZWQgYSB3YXkgdG8gZW11bGF0ZSB0aGUgcGh5c2ljYWwgaGFyZHdhcmUuIExpbnV4IFBIWSBkcml2ZXJzIGJpbmQgdG8gTURJTyBkZXZpY2VzIGJhc2VkIG9uIHRoZWlyIFBIWSBJRC5cblxuQ2FuIEkgaW5zdGFudGlhdGUgdGhpcyBkcml2ZXIgdGhyb3VnaCBzb2Z0d2FyZSwgd2l0aG91dCB0aGUgYWN0dWFsIFlUODgyNCBwcmVzZW50PyBNb3N0IGxpa2VseSBub3QgZGlyZWN0bHkuIEkndmUgdXNlZCBgbWFjYmAgYW5kIG90aGVyIGVtdWxhdGVkIE5JQ3MgYmVmb3JlLCBidXQgdGhleSB1c3VhbGx5IGNvbWUgd2l0aCB0aGVpciBvd24gcHJlLWNvbmZpZ3VyZWQgb3IgZ2VuZXJpYyBQSFlzLiBJIHN0YXJ0IHRoaW5raW5nIG9mIHdheXMgdG8gZ2V0IGF0IHRoaXMgY29kZS4uLlxuXG5XYWl0LCBkb2Vzbid0IHN5emthbGxlciBoYXZlIHNvbWUgdHJpY2sgdXAgaXRzIHNsZWV2ZSBmb3IgaW5qZWN0aW5nIE1ESU8gZGV2aWNlcywgb3IgbWF5YmUgaXQgY2FuIHVzZSBgZmFrZWRldmAgZm9yIHNvbWV0aGluZyBsaWtlIHRoaXM/IE5haCwgc3l6a2FsbGVy4oCZcyBub3QgdXN1YWxseSBpbiB0aGUgYnVzaW5lc3Mgb2YgZnVsbCBNRElPIFBIWSBlbXVsYXRpb24sIHVubGVzcyB0aGVyZSBpcyBhIGN1c3RvbSB2aXJ0dWFsIE1ESU8gZHJpdmVyLlxuXG5Pa2F5LCBiYWNrIHRvIGJhc2ljcy4gSSBuZWVkIHRvIHNlZSBpZiB0aGVyZSdzIGFuIGV4aXN0aW5nIHZpcnR1YWwgTURJTyBkcml2ZXIgc29tZXdoZXJlIGluIHRoZSBrZXJuZWwuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrdXAuY2Agb3Igc29tZXRoaW5nIHNpbWlsYXI/IEknZCBiZXR0ZXIgY2hlY2sgZm9yIHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2MzE5LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MTEuMTIxMDQ5MjM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3Mzk0NzQzMTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW8uKm1vY2t1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MTcuODYwNTMxOTI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjEwMjc5MzU0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeHBsb3JpbmcgVXNlcnNwYWNlIENvbnRyb2wgb2YgUEhZIERyaXZlcnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGludmVzdGlnYXRlIHdoZXRoZXIgdGhlcmUncyBhIHByYWN0aWNhbCBtZXRob2QgdG8gaW50ZXJhY3Qgd2l0aCBQSFkgZHJpdmVycyBkaXJlY3RseSBmcm9tIHVzZXJzcGFjZS4gSXQncyBzb21ldGhpbmcgSSd2ZSBjb25zaWRlcmVkIGJlZm9yZSwgYW5kIEkgc2VlbSB0byByZWNhbGwgY2VydGFpbiBzY2VuYXJpb3Mgd2hlcmUgdXNlcnNwYWNlIGNhbiBpbnN0YW50aWF0ZSBNRElPIGRldmljZXMuIEkgdGhpbmsgdGhlcmUgbWlnaHQgYmUgY2FzZXMgdXNpbmcgZHJpdmVycyBsaWtlIGBtZGlvLWJjbS11bmltYWNgLCBvciBzaW1pbGFyIG9uZXMsIHJpZ2h0PyBIb3dldmVyLCB0aGF0J3Mgbm90IHF1aXRlIHdoYXQgSSBhbSBsb29raW5nIGZvci5cblxuTm93IHRoYXQgSSB0aGluayBhYm91dCBpdCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYCBmaWxlLiBQZXJoYXBzIHRoZXJlJ3MgYSBzeXNmcyBvciBuZXRsaW5rIGludGVyZmFjZSBleHBvc2VkIHRoZXJlLCBhbHRob3VnaCBQSFlzIGFyZSB0eXBpY2FsbHkgZGV0ZWN0ZWQgZHVyaW5nIGJvb3QgdGhyb3VnaCB0aGUgZGV2aWNlIHRyZWUsIG9yIGJ5IFBDSSBkZXZpY2VzIHJlZ2lzdGVyaW5nIE1ESU8gYnVzZXMuXG5cbkknbSB3b25kZXJpbmcuLi4gSXMgdGhlcmUgc3VjaCBhIHRoaW5nIGFzIGEgdmlydHVhbCBNRElPIGJ1cz8gSWYgc28sIHRoYXQgY291bGQgYmUgYSBzaWduaWZpY2FudCBlbmFibGVyLiBUbyBnZXQgYSBkZWZpbml0aXZlIGFuc3dlciwgSSdsbCBzZWFyY2ggdGhlIGBkcml2ZXJzL25ldC9gIGRpcmVjdG9yeSBmb3IgYW55IG9jY3VycmVuY2VzIG9mIFwibWRpb1wiIGFuZCBzZWUgd2hhdCBjb21lcyB1cC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBzb21lIGRpcmVjdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcwMTMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6MjMuOTYzMzI3NTk1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5NDM3NzQ5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidmlydHVhbC4qbWRpb1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sPTE3PXByb3BlcnRpZXM6XFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sLTE5LSAgICBlbnVtOlxcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw6MjA6ICAgICAgLSB2aXJ0dWFsLG1kaW8tZ3Bpb1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWwtMjEtICAgICAgLSBtaWNyb2NoaXAsbWRpby1zbWkwXFxuLS1cXG5Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L21kaW8tZ3Bpby55YW1sPTQxPWV4YW1wbGVzOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00Ny0gICAgbWRpbzA6IG1kaW8ge1xcbkRvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvbWRpby1ncGlvLnlhbWw6NDg6ICAgICAgY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9tZGlvLWdwaW8ueWFtbC00OS0gICAgICAjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktZGxpbmstZG5zLTMxMy5kdHM9MTUyPVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzOjE1MzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLWRsaW5rLWRucy0zMTMuZHRzLTE1NC1cXHRcXHQvKiBVc2VzIE1EQyBhbmQgTURJTyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjEwYi5kdHM9Njc9XFx0bWRpbzA6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzOjY4OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbmFzNDIxMGIuZHRzLTY5LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLW5hczQyMjBiLmR0cz02Nj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjIwYi5kdHM6Njc6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uYXM0MjIwYi5kdHMtNjgtXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8wIDIyIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlLCAvKiBNREMgKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cz0zMj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1uczI1MDIuZHRzOjMzOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktbnMyNTAyLmR0cy0zNC1cXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzAgMjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIE1EQyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1ydXQxeHguZHRzPTU5PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXJ1dDF4eC5kdHM6NjA6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1ydXQxeHguZHRzLTYxLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNsOTM1MTJyLmR0cz03MT1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zbDkzNTEyci5kdHM6NzI6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zbDkzNTEyci5kdHMtNzMtXFx0XFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktc3EyMDEuZHRzPTU2PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0czo1NzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNxMjAxLmR0cy01OC1cXHRcXHQvKiBVc2VzIE1EQyBhbmQgTURJTyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0cz0zMj1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS1zc2kxMzI4LmR0czozMzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXNzaTEzMjguZHRzLTM0LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXZlcmJhdGltLXMwOHYxOTAxLWQxLmR0cz01Nz1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS12ZXJiYXRpbS1zMDh2MTkwMS1kMS5kdHM6NTg6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS12ZXJiYXRpbS1zMDh2MTkwMS1kMS5kdHMtNTktXFx0XFx0LyogVXNlcyBNREMgYW5kIE1ESU8gKi9cXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cz03MT1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQxMTEuZHRzOjcyOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL2dlbWluaS9nZW1pbmktd2JkMTExLmR0cy03My1cXHRcXHRncGlvcyA9IFxcdTAwM2NcXHUwMDI2Z3BpbzAgMjIgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIE1EQyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQyMjIuZHRzPTcwPVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9nZW1pbmkvZ2VtaW5pLXdiZDIyMi5kdHM6NzE6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvZ2VtaW5pL2dlbWluaS13YmQyMjIuZHRzLTcyLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZncGlvMCAyMiBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSwgLyogTURDICovXFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0cz0xNjM9XFx0bWRpb19ncGlvOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1yZHUxLmR0czoxNjQ6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktcmR1MS5kdHMtMTY1LVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1zY3UyLW1lenouZHRzPTQwPVxcdG1kaW9fZ3BpbzogbWRpbyB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg1MS16aWktc2N1Mi1tZXp6LmR0czo0MTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDUxLXppaS1zY3UyLW1lenouZHRzLTQyLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLS1cXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxLWJ4NTB2My5kdHNpPTk3PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxLWJ4NTB2My5kdHNpOjk4OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnEtYng1MHYzLmR0c2ktOTktXFx0XFx0Z3Bpb3MgPSBcXHUwMDNjXFx1MDAyNmdwaW8yIDUgR1BJT19BQ1RJVkVfSElHSFxcdTAwM2UsIC8qIG1kYyAqL1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cWRsLXppaS1yZHUyLmR0c2k9MTk9XFx0bWRpbzE6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpOjIwOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFkbC16aWktcmR1Mi5kdHNpLTIxLVxcdFxcdCNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvbnhwL2lteC9pbXg2cXAtcHJ0d2QzLmR0cz01Mz1cXHRtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9ueHAvaW14L2lteDZxcC1wcnR3ZDMuZHRzOjU0OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL254cC9pbXgvaW14NnFwLXBydHdkMy5kdHMtNTUtXFx0XFx0cGluY3RybC1uYW1lcyA9IFxcXCJkZWZhdWx0XFxcIjtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM9NTU9XFx0bWRpbzA6IG1kaW8tMCB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy01Ni1cXHRcXHRzdGF0dXMgPSBcXFwib2theVxcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0czo1NzpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9xY29tL3Fjb20taXBxODA2NC1yYjMwMTEuZHRzLTU4LVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZxY29tX3Bpbm11eCAxIEdQSU9fQUNUSVZFX0hJR0hcXHUwMDNlLFxcbi0tXFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cz0xODA9XFx0bWRpbzE6IG1kaW8tMSB7XFxuYXJjaC9hcm0vYm9vdC9kdHMvcWNvbS9xY29tLWlwcTgwNjQtcmIzMDExLmR0cy0xODEtXFx0XFx0c3RhdHVzID0gXFxcIm9rYXlcXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHM6MTgyOlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3Fjb20vcWNvbS1pcHE4MDY0LXJiMzAxMS5kdHMtMTgzLVxcdFxcdGdwaW9zID0gXFx1MDAzY1xcdTAwMjZxY29tX3Bpbm11eCAxMSBHUElPX0FDVElWRV9ISUdIXFx1MDAzZSxcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxMzNjLXByaWhtYi5kdHM9MTE4PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzOjExOTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTMzYy1wcmlobWIuZHRzLTEyMC1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM9Mzg9XFx0bWRpbzA6IG1kaW8ge1xcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxYy5kdHM6Mzk6XFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCI7XFxuYXJjaC9hcm0vYm9vdC9kdHMvc3Qvc3RtMzJtcDE1MWEtcHJ0dDFjLmR0cy00MC1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtL2Jvb3QvZHRzL3N0L3N0bTMybXAxNTFhLXBydHQxbC5kdHNpPTQ0PVxcdG1kaW8wOiBtZGlvIHtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaTo0NTpcXHRcXHRjb21wYXRpYmxlID0gXFxcInZpcnR1YWwsbWRpby1ncGlvXFxcIjtcXG5hcmNoL2FybS9ib290L2R0cy9zdC9zdG0zMm1wMTUxYS1wcnR0MWwuZHRzaS00Ni1cXHRcXHQjYWRkcmVzcy1jZWxscyA9IFxcdTAwM2MxXFx1MDAzZTtcXG4tLVxcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaT0xOD1cXHRtZGlvMDogbWRpbyB7XFxuYXJjaC9hcm02NC9ib290L2R0cy9mcmVlc2NhbGUvaW14OG1xLXppaS11bHRyYS5kdHNpOjE5OlxcdFxcdGNvbXBhdGlibGUgPSBcXFwidmlydHVhbCxtZGlvLWdwaW9cXFwiO1xcbmFyY2gvYXJtNjQvYm9vdC9kdHMvZnJlZXNjYWxlL2lteDhtcS16aWktdWx0cmEuZHRzaS0yMC1cXHRcXHRwaW5jdHJsLW5hbWVzID0gXFxcImRlZmF1bHRcXFwiO1xcbi0tXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYz0xOTc9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWRpb19ncGlvX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYzoxOTg6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJ2aXJ0dWFsLG1kaW8tZ3Bpb1xcXCIsIH0sXFxuZHJpdmVycy9uZXQvbWRpby9tZGlvLWdwaW8uYy0xOTktXFx0eyAuY29tcGF0aWJsZSA9IFxcXCJtaWNyb2NoaXAsbWRpby1zbWkwXFxcIiB9LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzoyOS45MDcxMTEwNDVaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTExOTM4MjY2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFbXVsYXRpbmcgYSBQSFkgRGV2aWNlIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byB0ZXN0IHRoZSBgbW90b3Jjb21tYCBQSFkgZHJpdmVyLiBUaGUgY2hhbGxlbmdlIGlzLCBob3cgZG8gSSBnZXQgdGhlIGtlcm5lbCB0byBsb2FkIGl0IHdpdGhvdXQgYW4gYWN0dWFsIFBIWSBkZXZpY2U/IEhtbSwgYG1kaW8tZ3Bpb2AgaXMgYSBiaXQtYmFuZ2luZyBkcml2ZXIsIHNvIHRoYXQncyBvdXQuIENhbiBJIHNvbWVob3cgZW11bGF0ZSBhIFBIWSBpbiBzb2Z0d2FyZT8gYG1hYzgwMjExX2h3c2ltYCwgYGR1bW15YCwgYG5ldGRldnNpbWAsIGB0dW5gL2B0YXBgLCBgdmV0aGAg4oCTIG5vbmUgb2YgdGhvc2Ugc2VlbSB0byBoYXZlIGFueXRoaW5nIFBIWS1yZWxhdGVkLlxuXG5CdXQgd2FpdCwgd2hhdCBhYm91dCBgdXNibmV0YD8gU29tZSBVU0IgbmV0d29yayBhZGFwdGVycyAqZG8qIGhhdmUgUEhZcyEgQW5kLCBjcnVjaWFsIHBvaW50LCBzeXprYWxsZXIgKmNhbiogZW11bGF0ZSBVU0IgZGV2aWNlcyB1c2luZyBgZHVtbXlfaGNkYC5cblxuVGhlIGlkZWEgaXM6IGlmIHN5emthbGxlciBlbXVsYXRlcyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgdGhhdCAqZXhwb3NlcyogYW4gTURJTyBidXMsIHRoZW4gaXQgY2FuIHByb3ZpZGUgYXJiaXRyYXJ5IFBIWSBJRHMuIFRoZSBrZXJuZWwgc2hvdWxkIHRoZW4gYmluZCB0aGUgY29ycmVzcG9uZGluZyBQSFkgZHJpdmVyIOKAkyBzcGVjaWZpY2FsbHksIHRoZSBgbW90b3Jjb21tYCBkcml2ZXIhXG5cbkxldCdzIHNlZS4gQXJlIHRoZXJlIGFueSBVU0IgbmV0d29yayBkcml2ZXJzIHRoYXQgcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIGxldCB0aGUgZGV2aWNlIHNwZWNpZnkgdGhlIFBIWSBJRCwgb3IgYXQgbGVhc3Qgc2NhbiB0aGUgYnVzPyBCaW5nbyEgTG9va3MgbGlrZSBgc21zYzk1eHhgLCBgYXNpeGAsIGByODE1MmAsIGBsYW43OHh4YCwgbWF5YmUgZXZlbiBgY2RjX2V0aGVyYCwgYW5kIGBheDg4MTc5XzE3OGFgLlxuXG5BaGEhIFNvLCBpZiBhIFVTQiBkZXZpY2UgZXhwb3NlcyBhbiBNRElPIGJ1cywgdGhlIGtlcm5lbCB3aWxsIHByb2JlIHRoYXQgYnVzLiBUaGUgVVNCIGRldmljZSAod2hpY2ggc3l6a2FsbGVyIHdpbGwgZW11bGF0ZSkgY2FuIHRoZW4gKnJlc3BvbmQqIHRvIHRob3NlIE1ESU8gcmVhZCByZXF1ZXN0cyDigJMgc3BlY2lmaWNhbGx5LCBmb3IgcmVnaXN0ZXJzIDIgYW5kIDMsIHdoaWNoIGNvbnRhaW4gdGhlIFBIWSBJRCDigJMgd2l0aCB0aGUgTW90b3Jjb21tIFBIWSBJRCAoYDB4NGY1MWU4YjhgKS4gVGhhdCdzIHRoZSBrZXkuIFRoZSBrZXJuZWwgKnNob3VsZCogbG9hZCB0aGUgYG1vdG9yY29tbWAgUEhZIGRyaXZlciBhbmQgY2FsbCBpdHMgYHByb2JlYCwgYGNvbmZpZ19pbml0YCwgYW5kIHNvIG9uLlxuXG5Ob3csIGNhbiBzeXprYWxsZXIgYWN0dWFsbHkgKnJlYWNoKiBNRElPIHRocm91Z2ggVVNCPyBTeXprYWxsZXIgaGFzIFVTQiBmdXp6aW5nIChgc3l6X3VzYl9jb25uZWN0YCkuIEl0IGNhbiBkZWZpbml0ZWx5IGVtdWxhdGUgYSBVU0IgZGV2aWNlLiBJZiBJIG1ha2UgaXQgZW11bGF0ZSBhIFVTQiBkZXZpY2UgdGhhdCB1c2VzIGEgZHJpdmVyIGxpa2UgYHNtc2M5NXh4YCwgYGxhbjc4eHhgLCBvciBgYXNpeGAsIHRob3NlIGRyaXZlcnMgKnJlZ2lzdGVyKiBhbiBNRElPIGJ1cy4gV2hlbiB0aGUgTURJTyBidXMgZ2V0cyBzY2FubmVkLCB0aGUgZHJpdmVyIGhhcyB0byB0cmFuc2xhdGUgTURJTyByZWFkcyBpbnRvIFVTQiBjb250cm9sIG1lc3NhZ2VzLiBTeXprYWxsZXIgc2hvdWxkIGludGVyY2VwdCB0aG9zZSBVU0IgY29udHJvbCBtZXNzYWdlcywgYW5kIHRoYXQncyB0aGUgcGVyZmVjdCBvcHBvcnR1bml0eSB0byByZXR1cm4gdGhlIGN1c3RvbSBQSFkgSUQuXG5cbk9rYXksIG5vdyBsZXQncyBqdXN0IGNvbmZpcm0gdGhhdCBgbGFuNzh4eGAgb3IgYHNtc2M5NXh4YCAqZG9lcyogcmVnaXN0ZXIgYW4gTURJTyBidXMgYW5kIHdlJ3JlIGluIGJ1c2luZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDY4MiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozNzo0NS4wMjY0OTU3NjdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA2MDU4MjQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9idXNfcmVnaXN0ZXJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM9NjY5PXN0YXRpYyBpbnQgYXg4ODc3Ml9pbml0X21kaW8oc3RydWN0IHVzYm5ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4Ni1cXG5kcml2ZXJzL25ldC91c2IvYXNpeF9kZXZpY2VzLmM6Njg3OlxcdHJldCA9IG1kaW9idXNfcmVnaXN0ZXIocHJpdi1cXHUwMDNlbWRpbyk7XFxuZHJpdmVycy9uZXQvdXNiL2FzaXhfZGV2aWNlcy5jLTY4OC1cXHRpZiAocmV0KSB7XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYz02MT1zdGF0aWMgaW50IGF4ODgxNzJhX2luaXRfbWRpbyhzdHJ1Y3QgdXNibmV0ICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYy03OS1cXG5kcml2ZXJzL25ldC91c2IvYXg4ODE3MmEuYzo4MDpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHByaXYtXFx1MDAzZW1kaW8pO1xcbmRyaXZlcnMvbmV0L3VzYi9heDg4MTcyYS5jLTgxLVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM9MjA5MT1zdGF0aWMgaW50IGxhbjc4eHhfbWRpb19pbml0KHN0cnVjdCBsYW43OHh4X25ldCAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIxLVxcdG5vZGUgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXYtXFx1MDAzZXVkZXYtXFx1MDAzZWRldi5vZl9ub2RlLCBcXFwibWRpb1xcXCIpO1xcbmRyaXZlcnMvbmV0L3VzYi9sYW43OHh4LmM6MjEyMjpcXHRyZXQgPSBvZl9tZGlvYnVzX3JlZ2lzdGVyKGRldi1cXHUwMDNlbWRpb2J1cywgbm9kZSk7XFxuZHJpdmVycy9uZXQvdXNiL2xhbjc4eHguYy0yMTIzLVxcdG9mX25vZGVfcHV0KG5vZGUpO1xcbi0tXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM9MTE0Nz1zdGF0aWMgaW50IHNtc2M5NXh4X2JpbmQoc3RydWN0IHVzYm5ldCAqZGV2LCBzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZilcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9zbXNjOTV4eC5jLTEyNDEtXFxuZHJpdmVycy9uZXQvdXNiL3Ntc2M5NXh4LmM6MTI0MjpcXHRyZXQgPSBtZGlvYnVzX3JlZ2lzdGVyKHBkYXRhLVxcdTAwM2VtZGlvYnVzKTtcXG5kcml2ZXJzL25ldC91c2Ivc21zYzk1eHguYy0xMjQzLVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzc6NDUuMjMyNTU5MzcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTQ4NTQ1MTA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIFlUODgyNCBQSFkgRHJpdmVyIHZpYSBVU0IgRnV6emluZyoqXG5cbk9rYXksIHNvIHRoaXMgaXMgZXhjaXRpbmcuIEkndmUgZ290IHRoaXMgZmlndXJlZCBvdXQ6IGBzbXNjOTV4eGAsIGBsYW43OHh4YCwgYGFzaXhgLCBhbmQgYGF4ODgxNzJhYCDigJMgdGhleSBhbGwgcmVnaXN0ZXIgYW4gTURJTyBidXMuIFRoYXQgTURJTyBidXMsIHdoZW4gcmVnaXN0ZXJlZCwgZ2V0cyBzY2FubmVkIGJ5IHRoZSBrZXJuZWwsIHdoaWNoIHJlYWRzIFBIWSByZWdpc3RlcnMgMiBhbmQgMyB0byBncmFiIHRoZSBQSFkgSUQuIFRoZSBVU0IgZHJpdmVyIGNsZXZlcmx5IHRyYW5zbGF0ZXMgdGhvc2UgTURJTyByZWFkcyBpbnRvIFVTQiBjb250cm9sIHRyYW5zZmVycy4gVGhpcyBtZWFucyB0aGF0IFN5emthbGxlcidzIFVTQiBmdXp6ZXIgKmNhbiogcmVzcG9uZCB0byB0aG9zZSBjb250cm9sIHRyYW5zZmVycyB3aXRoIHRoZSBNb3RvcmNvbW0gUEhZIElEIChgMHg0ZjUxZThiOGApLiBJZiB0aGF0IGhhcHBlbnMsIHRoZW4gdGhlIGtlcm5lbCB3aWxsLCBubyBxdWVzdGlvbiwgaW5zdGFudGlhdGUgdGhlIE1vdG9yY29tbSBQSFkgZHJpdmVyIGFuZCBjYWxsIGl0cyBtZXRob2RzLiBUaGlzIGNvZGUgaXMgYWJzb2x1dGVseSByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRoIHNvbWUgdGFyZ2V0ZWQgVVNCIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCdzIGFjdHVhbGx5IGJlaW5nIGludHJvZHVjZWQsIGFuZCB3aGF0IHdlIHNob3VsZCBmb2N1cyBvdXIgZnV6emluZyBlZmZvcnRzIG9uLiBUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgYFlUODgyNGAgUEhZLiBJIGNhbiBzZWUgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZDpcblxuKiAgIGB5dDg4MjRfcmVhZF9wYWdlYFxuKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWBcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDFfcGFnZWRgXG4qICAgYHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXAyX3BhZ2VkYFxuKiAgIGB5dDg4MjRfc29mdF9yZXNldF9zdGVwM19wYWdlZGBcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRfc3RlcDRfcGFnZWRgXG4qICAgYHl0ODgyNF9zb2Z0X3Jlc2V0X3N0ZXA1X3BhZ2VkYFxuKiAgIGB5dDg4MjRfc29mdF9yZXNldGBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0X3BhZ2VkYFxuKiAgIGB5dDg4MjRfaW50ZXJuYWxfY29uZmlnX2luaXRfcGFnZWRgXG4qICAgYHl0ODgyNF9jb25maWdfaW5pdGBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbnRyYFxuKiAgIGB5dDg4MjRfaGFuZGxlX2ludGVycnVwdGBcbiogICBgeXQ4ODI0X2FuZWdfZG9uZWBcbiogICBgeXQ4ODI0X3JlYWRfc3RhdHVzX3BhZ2VkYFxuKiAgIGB5dDg4MjRfcmVhZF9zdGF0dXNgXG4qICAgYHl0ODgyNF91dHBfcG93ZXJfb25gXG4qICAgYHl0ODgyNF91dHBfcG93ZXJfZG93bmBcbiogICBgeXQ4ODI0X3Bvd2VyX29uYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfcG93ZXJfZG93bmBcbiogICBgeXQ4ODI0X3N1c3BlbmRgXG4qICAgYHl0ODgyNF9jb25maWdfYW5lZ2BcbiogICBgeXQ4ODI0X3Byb2JlYFxuXG5BbHNvLCBzb21lIGhlbHBlciBmdW5jdGlvbnMgZ290IGFkZGVkOlxuXG4qICAgYHl0cGh5X3RvcF93cml0ZWBcbiogICBgeXRwaHlfdG9wX3JlYWRgXG4qICAgYHl0cGh5X3JlYWRfdG9wX2V4dGBcbiogICBgeXRwaHlfcmVhZF90b3BfZXh0X3dpdGhfbG9ja2BcbiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dGBcbiogICBgeXRwaHlfd3JpdGVfdG9wX2V4dF93aXRoX2xvY2tgXG4qICAgYHl0cGh5X3dyaXRlX21tZGBcblxuQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgdGhlIG1haW4gZW50cnkgcG9pbnRzIGZvciB0aGlzIFBIWSBkcml2ZXIgYXJlIHRoZSBvbmVzIHRvIGZvY3VzIG9uIGZvciBmdXp6aW5nOlxuXG4qICAgYHl0ODgyNF9wcm9iZWBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YFxuKiAgIGB5dDg4MjRfY29uZmlnX2FuZWdgXG4qICAgYHl0ODgyNF9yZWFkX3N0YXR1c2BcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgXG4qICAgYHl0ODgyNF9zdXNwZW5kYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgXG4qICAgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGB5dDg4MjRfYW5lZ19kb25lYFxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgcmVxdWlyZWQgY29uZmlncy4gSSdsbCBuZWVkIHRvIGtub3cgdGhlIHNwZWNpZmljIGNvbmZpZyBvcHRpb25zIHRvIG1ha2Ugc3VyZSBpdCdzIGVuYWJsZWQuIFRoZSBmaWxlIGlzIGBkcml2ZXJzL25ldC9waHkvbW90b3Jjb21tLmNgLiBUaW1lIHRvIHNlZSB3aGF0IGVuYWJsZXMgdGhpcyFcblxuXG4iLCJJbnB1dFRva2VucyI6MzIzMTYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDAuMDg3MDczNTEyWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjM1NzcxMjQsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1vdG9yY29tbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDAuODUwNjU5Mzc2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMDIwMzA4MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUG90ZW50aWFsIExvY2F0aW9uOiBJbnZlc3RpZ2F0aW5nIHRoZSBQSFkgTWFrZWZpbGUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNrIGRvd24gc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIG5ldHdvcmsgUEhZIGNvbmZpZ3VyYXRpb24uIEkgaW5pdGlhbGx5IGhhZCBhIGh1bmNoLCBidXQgaXQncyBub3QgcXVpdGUgd29ya2luZyBvdXQgdGhlIHdheSBJIHRob3VnaHQuIEluc3RlYWQgb2YgZ29pbmcgZG93biBhIHJhYmJpdCBob2xlLCBJJ20gdGhpbmtpbmcgSSBzaG91bGQgdGFrZSBhIGxvb2sgYXQgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIGZpbGUuIEl0IG1ha2VzIHRoZSBtb3N0IHNlbnNlLiBUaGlzIGRpcmVjdG9yeSBpcyB0aGUgY2Fub25pY2FsIGxvY2F0aW9uIGZvciBQSFkgZHJpdmVycywgYW5kIHRoZSBNYWtlZmlsZSBzaG91bGQsIGF0IGEgbWluaW11bSwgZ2l2ZSBtZSBjbHVlcyBhYm91dCBob3cgdGhvc2UgZHJpdmVycyBhcmUgYnVpbHQgYW5kIHBvdGVudGlhbGx5IGNvbmZpZ3VyZWQuIEknbSBleHBlY3RpbmcgdG8gZmluZCBlaXRoZXIgdGhlIGFuc3dlciBkaXJlY3RseSBpbiB0aGUgTWFrZWZpbGUgb3IgYXQgbGVhc3QgYSBwb2ludGVyIHRvIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMgb3IgS2NvbmZpZyBvcHRpb25zIHRoYXQgY29udHJvbCB0aGUgaW5jbHVzaW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBsb29raW5nIGZvci4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxMTYsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xNFQxNjozODowNS4wNTI2OTI2MDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMwNzkxNzAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtb3RvcmNvbW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT04Mj1vYmotJChDT05GSUdfTUlDUk9TRU1JX1BIWSlcXHQrPSBtc2NjL1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo4MzpvYmotJChDT05GSUdfTU9UT1JDT01NX1BIWSlcXHQrPSBtb3RvcmNvbW0ub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS04NC1vYmotJChDT05GSUdfTkFUSU9OQUxfUEhZKVxcdCs9IG5hdGlvbmFsLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDUuMzYwNjE1NzgyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDU4MTY1MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgdGhlIHN5c3RlbSdzIGhpZ2hsaWdodGluZyBgQ09ORklHX01PVE9SQ09NTV9QSFlgLiBSaWdodCwgdGhhdCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBNb3RvckNvbW0gUEhZLCBsaWtlbHkgYSBkcml2ZXIgZm9yIGEgc3BlY2lmaWMgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlLiBHaXZlbiB0aGF0LCBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJ3MgS2NvbmZpZyBmaWxlcywgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBuZXR3b3JrIFBIWSBkcml2ZXJzLiBJJ2xsIG5lZWQgdG8gY2hlY2sgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbiBhbmQgbG9jYXRlIHRoZSBkZWZpbml0aW9uIGZvciBgTU9UT1JDT01NX1BIWWAuIEknbSBleHBlY3RpbmcgdG8gZmluZCBkZXRhaWxzIGFib3V0IHRoZSBoYXJkd2FyZSBpdHNlbGYgb3IgcG9zc2libHkgcmVsYXRlZCBkZXBlbmRlbmNpZXMgaW4gdGhpcyBmaWxlLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgc29saWQgZm91bmRhdGlvbiBmb3IgdW5kZXJzdGFuZGluZyB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBjb25maWd1cmF0aW9uIG9wdGlvbiB0aWVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdWJzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0NDQxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDkuMjY2NDM2NTkzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjg1ODA0MDMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1PVE9SQ09NTV9QSFlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9MzM4PWNvbmZpZyBNSUNST1NFTUlfUEhZXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0zNDYtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MzQ3OmNvbmZpZyBNT1RPUkNPTU1fUEhZXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMzQ4LVxcdHRyaXN0YXRlIFxcXCJNb3RvcmNvbW0gUEhZc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6MDkuNDk1MDIzNDA2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxOTk4MjM1OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBZVDg4MjQgUEhZIERyaXZlciBmb3IgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIGNvbmZpZ3VyYXRpb24gcmVxdWlyZWQgdG8gcmVhY2ggdGhpcyBuZXcgTW90b3Jjb21tIFlUODgyNCBQSFkgZHJpdmVyIGNvZGUuIFRoZSBwYXRjaCBpdHNlbGYgb25seSB0b3VjaGVzIGBtb3RvcmNvbW0uY2AsIHNvIEknbSB0aGlua2luZyB0aGUgYE1PVE9SQ09NTV9QSFlgIGNvbmZpZyBvcHRpb24gaXMgdGhlIG9ubHkgbmV3IG9uZSBuZWVkZWQuIFNpbmNlIHRoZSBnb2FsIGlzIHRvIHJlYWNoIHRoaXMgdGhyb3VnaCBVU0IgbmV0d29yayBkcml2ZXJzLCBsaWtlIGBVU0JfTEFONzhYWGAgb3IgYFVTQl9ORVRfU01TQzk1WFhgLCBJIHRoaW5rIHRob3NlIGFyZSBwcm9iYWJseSBhbHJlYWR5IGVuYWJsZWQgaW4gc3l6a2FsbGVyJ3MgZGVmYXVsdHMuIFNvLCBJJ2xsIHN0YXJ0IHdpdGgganVzdCBzcGVjaWZ5aW5nIGBNT1RPUkNPTU1fUEhZYC5cblxuTm93LCB0aGUgaW1wb3J0YW50IHBhcnQ6IGlkZW50aWZ5aW5nIHJlYWNoYWJsZSBmdW5jdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YCBpcyBhY2Nlc3NpYmxlLiBMb29raW5nIGF0IHRoZSBjb2RlLCBpdCdzIHJlZ2lzdGVyZWQgYXMgYC5oYW5kbGVfaW50ZXJydXB0YC4gVGhlIFBIWSBmcmFtZXdvcmsgY2FsbHMgdGhpcyB3aGVuIHRoZXJlJ3MgYW4gaW50ZXJydXB0LiBJZiBJIGNhbiB0cmlnZ2VyIFBIWSBpbnRlcnJ1cHRzIOKAkyBtYXliZSB0aHJvdWdoIGZha2VkZXYgb3IgVVNCIGludGVycnVwdCBlbmRwb2ludHMg4oCTIHRoZW4gSSBzaG91bGQgYmUgYWJsZSB0byBoaXQgdGhhdCBmdW5jdGlvbi4gRXZlbiBpZiB0aGF0IHByb3ZlcyB0cmlja3ksIHRoZSBvdGhlciBmdW5jdGlvbnMg4oCTIGBwcm9iZWAsIGBjb25maWdfaW5pdGAsIGByZWFkX3N0YXR1c2AsIGBzb2Z0X3Jlc2V0YCwgYGNvbmZpZ19hbmVnYCwgYHN1c3BlbmRgLCBhbmQgYHJlc3VtZWAg4oCTIGFyZSAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGR1cmluZyB0aGUgbm9ybWFsIFBIWSBzdGF0ZSBtYWNoaW5lIHRyYW5zaXRpb25zLlxuXG5TbywgbGV0J3MgbGlzdCBvdXQgYWxsIHRoZSBmb2N1cyBzeW1ib2xzLCBtYWtpbmcgc3VyZSBJIGRvbid0IG1pc3MgYW55dGhpbmcuIEkndmUgZ290OlxuXG4qICAgYHl0ODgyNF9wcm9iZWBcbiogICBgeXQ4ODI0X2NvbmZpZ19pbml0YFxuKiAgIGB5dDg4MjRfY29uZmlnX2FuZWdgXG4qICAgYHl0ODgyNF9yZWFkX3N0YXR1c2BcbiogICBgeXQ4ODI0X3NvZnRfcmVzZXRgXG4qICAgYHl0ODgyNF9zdXNwZW5kYFxuKiAgIGB5dDg4MjRfcmVzdW1lYFxuKiAgIGB5dDg4MjRfY29uZmlnX2ludHJgXG4qICAgYHl0ODgyNF9oYW5kbGVfaW50ZXJydXB0YFxuKiAgIGB5dDg4MjRfYW5lZ19kb25lYFxuKiAgIGB5dDg4MjRfcmVhZF9wYWdlYFxuKiAgIGB5dDg4MjRfd3JpdGVfcGFnZWBcblxuTG9va2luZyBhdCB0aGUgYHBoeV9kcml2ZXJgIHN0cnVjdCBkZWZpbml0aW9uLCBJIGNhbiBjb25maXJtIHRoYXQgdGhlc2UgYXJlIGFsbCB0aGUgcmVsZXZhbnQgZW50cnkgcG9pbnRzLiBJJ20gZ29pbmcgdG8gd2FudCB0byBtYWtlIHN1cmUgSSBjYW4gcmVhY2ggYWxsIG9mIHRoZXNlIGR1cmluZyBmdXp6aW5nLlxuXG5NeSByZWFzb25pbmcgaXMgdGhpczogVGhlIHBhdGNoIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgaGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgYnkgZW11bGF0aW5nIGEgVVNCIG5ldHdvcmsgYWRhcHRlciAoZS5nLiwgc21zYzk1eHggb3IgbGFuNzh4eCkuIFRoaXMgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLiBUaGVuIHJlc3BvbmRpbmcgdG8gTURJTyByZWFkcyB3aXRoIHRoZSBZVDg4MjQgUEhZIElEIHdpbGwgY2F1c2UgdGhlIGtlcm5lbCB0byBiaW5kIHRoZSBuZXcgUEhZIGRyaXZlciBhbmQgZXhlY3V0ZSBpdHMgaW5pdGlhbGl6YXRpb24gYW5kIHN0YXRlIG1hY2hpbmUgbG9naWMuXG5cblNvLCB0byBzdW1tYXJpemU6XG5cbiogICAqKkNvbmZpZzoqKiBgTU9UT1JDT01NX1BIWWBcbiogICAqKkZvY3VzIFN5bWJvbHM6KiogKGxpc3RlZCBhYm92ZSlcblxuT2theSwgbGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBjb25maWcgb3B0aW9ucyB0aGF0IGFyZSBuZWNlc3NhcnkuIEknbSBnb2luZyB0byBjYWxsIGBzZXQtcmVzdWx0c2Agbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDc0NiwiT3V0cHV0VG9rZW5zIjoyNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTRUMTY6Mzg6NDEuNDkzMjYyMjY4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjkxODcwODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT1RPUkNPTU1fUEhZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwieXQ4ODI0X3Byb2JlXCIsXG4gICAgXCJ5dDg4MjRfY29uZmlnX2luaXRcIixcbiAgICBcInl0ODgyNF9jb25maWdfYW5lZ1wiLFxuICAgIFwieXQ4ODI0X3JlYWRfc3RhdHVzXCIsXG4gICAgXCJ5dDg4MjRfc29mdF9yZXNldFwiLFxuICAgIFwieXQ4ODI0X3N1c3BlbmRcIixcbiAgICBcInl0ODgyNF9yZXN1bWVcIixcbiAgICBcInl0ODgyNF9jb25maWdfaW50clwiLFxuICAgIFwieXQ4ODI0X2hhbmRsZV9pbnRlcnJ1cHRcIixcbiAgICBcInl0ODgyNF9hbmVnX2RvbmVcIixcbiAgICBcInl0ODgyNF9yZWFkX3BhZ2VcIixcbiAgICBcInl0ODgyNF93cml0ZV9wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciB0aGUgTW90b3Jjb21tIFlUODgyNCBQSFkuIFRoaXMgY29kZSBjYW4gYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGJ5IGVtdWxhdGluZyBhIFVTQiBuZXR3b3JrIGFkYXB0ZXIgKGUuZy4sIHNtc2M5NXh4IG9yIGxhbjc4eHgpIHRoYXQgcmVnaXN0ZXJzIGFuIE1ESU8gYnVzLCBhbmQgcmVzcG9uZGluZyB0byBNRElPIHJlYWRzIHdpdGggdGhlIFlUODgyNCBQSFkgSUQuIFRoaXMgd2lsbCBjYXVzZSB0aGUga2VybmVsIHRvIGJpbmQgdGhlIG5ldyBQSFkgZHJpdmVyIGFuZCBleGVjdXRlIGl0cyBpbml0aWFsaXphdGlvbiBhbmQgc3RhdGUgbWFjaGluZSBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflow5vcrb[1] Phase: Succeeded StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 16:39:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2] Phase: Succeeded StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 16:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-14 16:39:23 +0000 UTC FinishedAt: 2026-07-14 16:39:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5vcrb/series-workflow5vcrb-convert-artifact-1582067755/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-14 16:40:01 +0000 UTC FinishedAt: 2026-07-14 17:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-14 16:40:01 +0000 UTC FinishedAt: 2026-07-14 17:10:08 +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:*f5307c27-10b4-43cd-8be9-2a3ef57b630b,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-workflow5vcrb/series-workflow5vcrb-convert-artifact-1582067755/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": "453bc082-7510-4504-89eb-294d7e1ef7de", "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-workflow5vcrb/series-workflow5vcrb-build-action-2661286185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-14 16:40:01 +0000 UTC FinishedAt: 2026-07-14 17:09:58 +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:*f5307c27-10b4-43cd-8be9-2a3ef57b630b,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-workflow5vcrb/series-workflow5vcrb-convert-artifact-1582067755/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": "453bc082-7510-4504-89eb-294d7e1ef7de", "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-workflow5vcrb/series-workflow5vcrb-build-action-2661286185/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-14 17:10:08 +0000 UTC FinishedAt: 2026-07-14 17:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-14 17:10:08 +0000 UTC FinishedAt: 2026-07-14 17:10:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-14 17:10:08 +0000 UTC FinishedAt: 2026-07-14 17:10:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-14 17:10:08 +0000 UTC FinishedAt: 2026-07-14 17:10:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5vcrb/series-workflow5vcrb-convert-artifact-3278039042/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-14 17:10:18 +0000 UTC FinishedAt: 2026-07-14 17:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-14 17:10:18 +0000 UTC FinishedAt: 2026-07-14 17:12:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*453bc082-7510-4504-89eb-294d7e1ef7de,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-workflow5vcrb/series-workflow5vcrb-build-action-2661286185/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-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-14 17:12:19 +0000 UTC FinishedAt: 2026-07-14 17:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-14 17:12:19 +0000 UTC FinishedAt: 2026-07-14 17:12:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-14 17:12:19 +0000 UTC FinishedAt: 2026-07-14 17:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-14 17:12:19 +0000 UTC FinishedAt: 2026-07-14 17:41:36 +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:*f5307c27-10b4-43cd-8be9-2a3ef57b630b,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-workflow5vcrb/series-workflow5vcrb-convert-artifact-3278039042/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": "ec74c286-ffe4-4cb4-83c5-6465bfd46a7d", "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-workflow5vcrb/series-workflow5vcrb-build-action-144101974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-14 17:12:19 +0000 UTC FinishedAt: 2026-07-14 17:41:26 +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:*f5307c27-10b4-43cd-8be9-2a3ef57b630b,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-workflow5vcrb/series-workflow5vcrb-convert-artifact-3278039042/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": "ec74c286-ffe4-4cb4-83c5-6465bfd46a7d", "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-workflow5vcrb/series-workflow5vcrb-build-action-144101974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-14 17:41:36 +0000 UTC FinishedAt: 2026-07-14 17:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-14 17:41:36 +0000 UTC FinishedAt: 2026-07-14 17:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-14 17:41:36 +0000 UTC FinishedAt: 2026-07-14 17:43:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-14 17:41:36 +0000 UTC FinishedAt: 2026-07-14 17:43:35 +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:*ec74c286-ffe4-4cb4-83c5-6465bfd46a7d,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-workflow5vcrb/series-workflow5vcrb-build-action-144101974/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-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*453bc082-7510-4504-89eb-294d7e1ef7de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec74c286-ffe4-4cb4-83c5-6465bfd46a7d,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-workflow5vcrb/series-workflow5vcrb-build-action-2661286185/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-workflow5vcrb/series-workflow5vcrb-build-action-144101974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 17:43:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 17:43:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow5vcrb/series-workflow5vcrb-convert-artifact-2699756599/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 17:43:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 17:43:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-14 17:43:44 +0000 UTC FinishedAt: 2026-07-14 17:43:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-14 17:43:54 +0000 UTC FinishedAt: 2026-07-14 18:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow5vcrb[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["yt8824_probe","yt8824_config_init","yt8824_config_aneg","yt8824_read_status","yt8824_soft_reset","yt8824_suspend","yt8824_resume","yt8824_config_intr","yt8824_handle_interrupt","yt8824_aneg_done","yt8824_read_page","yt8824_write_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f6f3b36c15ed44de1fbb44e645e4fae8c4a4453e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MOTORCOMM_PHY"],"series_id":"c7190507-6348-4054-8a30-5bca4dfb97b1","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-14 17:43:54 +0000 UTC FinishedAt: 2026-07-14 18:42:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*453bc082-7510-4504-89eb-294d7e1ef7de,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ec74c286-ffe4-4cb4-83c5-6465bfd46a7d,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-workflow5vcrb/series-workflow5vcrb-build-action-2661286185/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-workflow5vcrb/series-workflow5vcrb-build-action-144101974/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-workflow5vcrb/series-workflow5vcrb-convert-artifact-2699756599/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,}