Name: series-workflowjfg4l Phase: Failed StartedAt: 2026-08-13 09:41:36 +0000 UTC FinishedAt: 2026-08-13 10:05:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfg4l[0] Phase: Succeeded StartedAt: 2026-08-13 09:41:36 +0000 UTC FinishedAt: 2026-08-13 10:05:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfg4l[0].run-triage Phase: Succeeded StartedAt: 2026-08-13 09:41:36 +0000 UTC FinishedAt: 2026-08-13 10:05:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDE5ZGEyOTU4ODAxZWRkZTA2OWNjYjI1MjkzYWJiOTFhZDRlOTkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MWY0MzgyZWI5NmM1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5AQCAtMCwwICYjNDM7MSw5MSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC93aXpuZXQsdzUxMDAueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogV2l6bmV0IHc1MTAwL3c1MjAwL3c1NTAwIFNQSSBFdGhlcm5ldCBDb250cm9sbGVyXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEFydGh1ciBDcsOpcGluIExlYmxvbmQgXHUwMDNjYXJ0aHVyQG1hcm1vdHR1cy5uZXRcdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXG4mIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHdpem5ldCx3NTUwMFxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBpbnRlcnJ1cHRzOlxuJiM0MzsgICAgICAgICAgbWluSXRlbXM6IDFcbiYjNDM7ICAgICAgICAgIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNYWluIGludGVycnVwdCAoSU5UIHBpbiBvbiB0aGUgZGV2aWNlKS5cbiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICAgIE9wdGlvbmFsIGludGVycnVwdCBmb3IgbGluayBzdGF0dXMgY2hhbmdlcyAoTElOS0xFRCBwaW4gb25cbiYjNDM7ICAgICAgICAgICAgICAgIHc1NTAwKS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHdpem5ldCx3NTEwMFxuJiM0MzsgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGludGVycnVwdHM6XG4mIzQzOyAgICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHdpem5ldCx3NTEwMFxuJiM0MzsgICAgICAtIHdpem5ldCx3NTIwMFxuJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMFxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBzcGktbWF4LWZyZXF1ZW5jeTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosXG4mIzQzOyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cbiYjNDM7ICAgIG1heGltdW06IDgwMDAwMDAwXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gaW50ZXJydXB0c1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xuJiM0MztcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgc3BpIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldEAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGludGVycnVwdHMgPSBcdTAwM2MyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkdcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHNwaS1tYXgtZnJlcXVlbmN5ID0gXHUwMDNjMzAwMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NXgwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NXgwMC50eHRcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw1MCAmIzQzOzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcJiMzNDt3aXpuZXQsdzUxMDBcJiMzNDtcbi1cdCAgICAgIFwmIzM0O3dpem5ldCx3NTIwMFwmIzM0O1xuLVx0ICAgICAgXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7XG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7O1xuLVx0XHRyZWcgPSBcdTAwM2MwXHUwMDNlO1xuLVx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi1cdFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2ZXRoMV9waW5zXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbi1cdFx0aW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbi1cdFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbi1cdH07XG4tfTtcbi1cbi1cdTAwMjZncGlvIHtcbi1cdGV0aDFfcGluczogZXRoMV9waW5zIHtcbi1cdFx0YnJjbSxwaW5zID0gXHUwMDNjMjVcdTAwM2U7XG4tXHRcdGJyY20sZnVuY3Rpb24gPSBcdTAwM2MwXHUwMDNlOyAvKiBpbiAqL1xuLVx0XHRicmNtLHB1bGwgPSBcdTAwM2MwXHUwMDNlOyAvKiBub25lICovXG4tXHR9O1xuLX07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dzUxMDAuaFwmIzM0O1xuQEAgLTEyNCw2ICYjNDM7MTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgKi9cbiAjZGVmaW5lIFc1NTAwX1NJTVJcdFx0MHgwMDE4IC8qIFNvY2tldCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqL1xuICNkZWZpbmUgVzU1MDBfUlRSXHRcdDB4MDAxOSAvKiBSZXRyeSBUaW1lLXZhbHVlIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgVzU1MDBfUEhZQ0ZHUlx0XHQweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSAgIFBIWUNGR1JfTE5LXHRcdCAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqL1xuIFxuICNkZWZpbmUgVzU1MDBfUzBfUkVHU1x0XHQweDEwMDAwXG4gXG5AQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuJiM0MztcdGludCBsaW5rX2lycTtcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtMzQ1LDYgJiM0MzszNDksMjAgQEAgc3RhdGljIHZvaWQgdzU1MDBfbWVtb3J5X2NvbmZpZ3VyZShzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gdzUxMDBfcmVhZChwcml2LCBXNTUwMF9QSFlDRkdSKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKHByaXYsIGxpbmssIG5kZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAyNiBQSFlDRkdSX0xOSztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBydHI7XG5AQCAtNDE0LDYgJiM0Mzs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDApXG4mIzQzO1x0XHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTYxNiw2ICYjNDM7NjQ0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4mIzQzO1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbiYjNDM7XHRcdFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcJiMzNDtsaW5rIGlzIHVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCYjMzQ7bGluayBpcyBkb3duXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgJiM0Mzs3MDUsMTUgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUobmRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVuYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbiYjNDM7XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTY2Nyw2ICYjNDM7NzIyLDEwIEBAIHN0YXRpYyBpbnQgdzUxMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRuZXRpZl9pbmZvKHByaXYsIGlmZG93biwgbmRldiwgXCYjMzQ7c2h1dHRpbmcgZG93blxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdGRpc2FibGVfaXJxKHByaXYtXHUwMDNlbGlua19pcnEpO1xuJiM0MztcbiBcdHc1MTAwX2h3X2Nsb3NlKHByaXYpO1xuIFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpO1xuQEAgLTY3OCw2ICYjNDM7NzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfZHJ2aW5mb1x0XHQ9IHc1MTAwX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXG4mIzQzO1x0LmdldF9saW5rXHRcdD0gdzUxMDBfZ2V0X2xpbmssXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gdzUxMDBfZ2V0X3JlZ3NfbGVuLFxuIFx0LmdldF9yZWdzXHRcdD0gdzUxMDBfZ2V0X3JlZ3MsXG4gfTtcbkBAIC03NDUsMTMgJiM0Mzs4MDUsMjEgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBlcnJfd3E7XG4gXHR9XG4gXG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gXHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWxpbmtfaXJxID0gb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDAgP1xuJiM0MztcdFx0XHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuJiM0MztcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIHByaXYtXHUwMDNlbGlua19pcnEsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgbGluayBpcnFcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfd3E7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XG4gXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHQobmRldiwgXHUwMDI2cHJpdi1cdTAwM2VuYXBpLCB3NTEwMF9uYXBpX3BvbGwsIDE2KTtcbkBAIC03NjEsMTIgJiM0Mzs4MjksOCBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHQgKi9cbiBcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7XG4gXG4tXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZWdpc3Rlcjtcbi1cbiBcdHByaXYtXHUwMDNleGZlcl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc1wmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXG4tXHRcdFx0XHRcdG5ldGRldl9uYW1lKG5kZXYpKTtcbiYjNDM7XHRcdFx0XHRcdGRldl9uYW1lKGRldikpO1xuIFx0aWYgKCFwcml2LVx1MDAzZXhmZXJfd3EpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfd3E7XG5AQCAtNzk1LDIxICYjNDM7ODU5LDM5IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdGlmIChvcHMtXHUwMDNlbWF5X3NsZWVwKSB7XG4gXHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXG4gXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4tXHRcdFx0XHRcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcbiYjNDM7XHRcdFx0XHRcdCAgIGRldl9uYW1lKGRldiksIG5kZXYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gcmVxdWVzdF9pcnEocHJpdi1cdTAwM2VpcnEsIHc1MTAwX2ludGVycnVwdCxcbi1cdFx0XHRcdCAgSVJRRl9UUklHR0VSX0xPVywgbmV0ZGV2X25hbWUobmRldiksIG5kZXYpO1xuJiM0MztcdFx0XHRcdCAgSVJRRl9UUklHR0VSX0xPVywgZGV2X25hbWUoZGV2KSwgbmRldik7XG4gXHR9XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlbGlua19pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHQgICB3NTEwMF9kZXRlY3RfbGluayxcbiYjNDM7XHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfFxuJiM0MztcdFx0XHRcdFx0ICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDt3NTEwMC1saW5rXCYjMzQ7LCBwcml2LVx1MDAzZW5kZXYpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfbGlua19pcnE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfcmVnaXN0ZXI6XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuJiM0MztcdFx0ZnJlZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSwgbmRldik7XG4mIzQzO2Vycl9saW5rX2lycTpcbiYjNDM7XHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1lcnJfcmVnaXN0ZXI6XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTgyMCw2ICYjNDM7OTAyLDEzIEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGZyZWVfaXJxKHByaXYtXHUwMDNlbGlua19pcnEsIG5kZXYpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VsaW5rX2lycSA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xuIFx0ZnJlZV9pcnEocHJpdi1cdTAwM2VpcnEsIG5kZXYpO1xuIFxuQEAgLTgyNyw3ICYjNDM7OTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0Zmx1c2hfd29yayhcdTAwMjZwcml2LVx1MDAzZXJlc3RhcnRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVx1MDAzZXhmZXJfd3EpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTtcbkBAIC04MzksNiAmIzQzOzkyNyw5IEBAIHN0YXRpYyBpbnQgdzUxMDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4mIzQzO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiBcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcbiBcbkBAIC04NTcsNiAmIzQzOzk0OCwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xuIFxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0ZW5hYmxlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQxOWRhMjk1ODgwMWVkZGUwNjljY2IyNTI5M2FiYjkxYWQ0ZTk5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEwOjA0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODFmNDM4MmViOTZjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwKQEAgLTAsMCAmIzQzOzEsOTEgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC93aXpuZXQsdzUxMDAueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogV2l6bmV0IHc1MTAwL3c1MjAwL3c1NTAwIFNQSSBFdGhlcm5ldCBDb250cm9sbGVyCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEFydGh1ciBDcsOpcGluIExlYmxvbmQgJmx0O2FydGh1ckBtYXJtb3R0dXMubmV0Jmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB3aXpuZXQsdzU1MDAKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgaW50ZXJydXB0czoKJiM0MzsgICAgICAgICAgbWluSXRlbXM6IDEKJiM0MzsgICAgICAgICAgaXRlbXM6CiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuCiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgICAgICAgT3B0aW9uYWwgaW50ZXJydXB0IGZvciBsaW5rIHN0YXR1cyBjaGFuZ2VzIChMSU5LTEVEIHBpbiBvbgomIzQzOyAgICAgICAgICAgICAgICB3NTUwMCkuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB3aXpuZXQsdzUxMDAKJiM0MzsgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGludGVycnVwdHM6CiYjNDM7ICAgICAgICAgIGl0ZW1zOgomIzQzOyAgICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1haW4gaW50ZXJydXB0IChJTlQgcGluIG9uIHRoZSBkZXZpY2UpLgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0gd2l6bmV0LHc1MTAwCiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDAKJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMAomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgc3BpLW1heC1mcmVxdWVuY3k6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeiwKJiM0MzsgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCiYjNDM7ICAgIG1heGltdW06IDgwMDAwMDAwCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi8KJiM0MzsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oJmd0OwomIzQzOwomIzQzOyAgICBzcGkgewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0QDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3dpem5ldCx3NTUwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiYjNDM7ICAgICAgICAgICAgcGluY3RybC0wID0gJmx0OyZhbXA7ZXRoMV9waW5zJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gJmx0OyZhbXA7Z3BpbyZndDs7CiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7MjQgSVJRX1RZUEVfRURHRV9CT1RIJmd0OzsKJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbG9jYWwtbWFjLWFkZHJlc3MgPSBbIGEwIGIwIGMwIGQwIGUwIGYwIF07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY2NTc5OGM0YmU2Li4wMDAwMDAwMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUwICYjNDM7MCwwIEBACi0qIFdpem5ldCB3NXgwMAotCi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KLQotRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluCi10aGUgU1BJIG1hc3RlciBub2RlLgotCi1SZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLQkgICAgICAmIzM0O3dpem5ldCx3NTEwMCYjMzQ7Ci0JICAgICAgJiMzNDt3aXpuZXQsdzUyMDAmIzM0OwotCSAgICAgICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDsKLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uCi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZAotICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5Ci0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpYwotICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC4KLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLgotLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLAotICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nCi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KLQotT3B0aW9uYWwgcHJvcGVydGllczoKLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC4KLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLAotICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KLQotCi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKToKLQotJmFtcDtzcGkgewotCWV0aGVybmV0QDA6IHc1NTAwQDAgewotCQljb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0OzsKLQkJcmVnID0gJmx0OzAmZ3Q7OwotCQlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7Ci0JCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2V0aDFfcGlucyZndDs7Ci0JCWludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKLQkJaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7OwotCQlzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7Ci0JfTsKLX07Ci0KLSZhbXA7Z3BpbyB7Ci0JZXRoMV9waW5zOiBldGgxX3BpbnMgewotCQlicmNtLHBpbnMgPSAmbHQ7MjUmZ3Q7OwotCQlicmNtLGZ1bmN0aW9uID0gJmx0OzAmZ3Q7OyAvKiBpbiAqLwotCQlicmNtLHB1bGwgPSAmbHQ7MCZndDs7IC8qIG5vbmUgKi8KLQl9OwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb3BvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt3NTEwMC5oJiMzNDsKQEAgLTEyNCw2ICYjNDM7MTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiAgKi8KICNkZWZpbmUgVzU1MDBfU0lNUgkJMHgwMDE4IC8qIFNvY2tldCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBXNTUwMF9SVFIJCTB4MDAxOSAvKiBSZXRyeSBUaW1lLXZhbHVlIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBXNTUwMF9QSFlDRkdSCQkweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lICAgUEhZQ0ZHUl9MTksJCSAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqLwogCiAjZGVmaW5lIFc1NTAwX1MwX1JFR1MJCTB4MTAwMDAKIApAQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7CiAJdTE2IHMwX3J4X2J1Zl9zaXplOwogCiAJaW50IGlycTsKJiM0MzsJaW50IGxpbmtfaXJxOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CkBAIC0zNDUsNiAmIzQzOzM0OSwyMCBAQCBzdGF0aWMgdm9pZCB3NTUwMF9tZW1vcnlfY29uZmlndXJlKHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQluZXRpZl9lcnIocHJpdiwgbGluaywgbmRldiwKJiM0MzsJCQkgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQgJmFtcDsgUEhZQ0ZHUl9MTks7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdikKIHsKIAl1MzIgcnRyOwpAQCAtNDE0LDYgJiM0Mzs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJCXNpemVvZihpbmZvLSZndDtidXNfaW5mbykpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3NTEwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtvcHMtJmd0O2NoaXBfaWQgPT0gVzU1MDApCiYjNDM7CQlyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNjE2LDYgJiM0Mzs2NDQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlOwomIzQzOwlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKSB7CiYjNDM7CQkJbmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCAmIzM0O2xpbmsgaXMgdXBcbiYjMzQ7KTsKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsICYjMzQ7bGluayBpcyBkb3duXG4mIzM0Oyk7CiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHc1MTAwX3NldHJ4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3NTEwMF9wcml2LApAQCAtNjU5LDYgJiM0Mzs3MDUsMTUgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXc1MTAwX2h3X3N0YXJ0KHByaXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaSk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJZW5hYmxlX2lycShwcml2LSZndDtsaW5rX2lycSk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtvcHMtJmd0O2NoaXBfaWQgIT0gVzU1MDAgfHwgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpKQomIzQzOwkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2Nyw2ICYjNDM7NzIyLDEwIEBAIHN0YXRpYyBpbnQgdzUxMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJbmV0aWZfaW5mbyhwcml2LCBpZmRvd24sIG5kZXYsICYjMzQ7c2h1dHRpbmcgZG93blxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7bGlua19pcnEgJmd0Oz0gMCkKJiM0MzsJCWRpc2FibGVfaXJxKHByaXYtJmd0O2xpbmtfaXJxKTsKJiM0MzsKIAl3NTEwMF9od19jbG9zZShwcml2KTsKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwpAQCAtNjc4LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHc1MTAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSB3NTEwMF9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCQk9IHc1MTAwX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IHc1MTAwX3NldF9tc2dsZXZlbCwKJiM0MzsJLmdldF9saW5rCQk9IHc1MTAwX2dldF9saW5rLAogCS5nZXRfcmVnc19sZW4JCT0gdzUxMDBfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncwkJPSB3NTEwMF9nZXRfcmVncywKIH07CkBAIC03NDUsMTMgJiM0Mzs4MDUsMjEgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLAogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9yZWdpc3RlcjsKJiM0MzsJCWdvdG8gZXJyX3dxOwogCX0KIAogCXByaXYtJmd0O25kZXYgPSBuZGV2OwogCXByaXYtJmd0O29wcyA9IG9wczsKIAlwcml2LSZndDtpcnEgPSBpcnE7CiAKJiM0MzsJcHJpdi0mZ3Q7bGlua19pcnEgPSBvcHMtJmd0O2NoaXBfaWQgPT0gVzU1MDAgPwomIzQzOwkJCSBmd25vZGVfaXJxX2dldChkZXZfZndub2RlKGRldiksIDEpIDogLUVOT0RFVjsKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfaXJxID09IC1FUFJPQkVfREVGRVIpIHsKJiM0MzsJCWVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBwcml2LSZndDtsaW5rX2lycSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIGlycVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfd3E7CiYjNDM7CX0KJiM0MzsKIAluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt3NTEwMF9uZXRkZXZfb3BzOwogCW5kZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDt3NTEwMF9ldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZF93ZWlnaHQobmRldiwgJmFtcDtwcml2LSZndDtuYXBpLCB3NTEwMF9uYXBpX3BvbGwsIDE2KTsKQEAgLTc2MSwxMiAmIzQzOzgyOSw4IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcywKIAkgKi8KIAluZGV2LSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQlpZiAoZXJyICZsdDsgMCkKLQkJZ290byBlcnJfcmVnaXN0ZXI7Ci0KIAlwcml2LSZndDt4ZmVyX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7JXMmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsCi0JCQkJCW5ldGRldl9uYW1lKG5kZXYpKTsKJiM0MzsJCQkJCWRldl9uYW1lKGRldikpOwogCWlmICghcHJpdi0mZ3Q7eGZlcl93cSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl93cTsKQEAgLTc5NSwyMSAmIzQzOzg1OSwzOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsCiAJaWYgKG9wcy0mZ3Q7bWF5X3NsZWVwKSB7CiAJCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtJmd0O2lycSwgTlVMTCwgdzUxMDBfaW50ZXJydXB0LAogCQkJCQkgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAotCQkJCQkgICBuZXRkZXZfbmFtZShuZGV2KSwgbmRldik7CiYjNDM7CQkJCQkgICBkZXZfbmFtZShkZXYpLCBuZGV2KTsKIAl9IGVsc2UgewogCQllcnIgPSByZXF1ZXN0X2lycShwcml2LSZndDtpcnEsIHc1MTAwX2ludGVycnVwdCwKLQkJCQkgIElSUUZfVFJJR0dFUl9MT1csIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTsKJiM0MzsJCQkJICBJUlFGX1RSSUdHRVJfTE9XLCBkZXZfbmFtZShkZXYpLCBuZGV2KTsKIAl9CiAJaWYgKGVycikKIAkJZ290byBlcnJfaHc7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfaXJxICZndDs9IDApIHsKJiM0MzsJCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtJmd0O2xpbmtfaXJxLCBOVUxMLAomIzQzOwkJCQkJICAgdzUxMDBfZGV0ZWN0X2xpbmssCiYjNDM7CQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwKJiM0MzsJCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwKJiM0MzsJCQkJCSAgIElSUUZfT05FU0hPVCB8IElSUUZfTk9fQVVUT0VOLAomIzQzOwkJCQkJICAgJiMzNDt3NTEwMC1saW5rJiMzNDssIHByaXYtJmd0O25kZXYpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfbGlua19pcnE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3JlZ2lzdGVyOwomIzQzOwogCXJldHVybiAwOwogCiYjNDM7ZXJyX3JlZ2lzdGVyOgomIzQzOwlpZiAocHJpdi0mZ3Q7bGlua19pcnEgJmd0Oz0gMCkKJiM0MzsJCWZyZWVfaXJxKHByaXYtJmd0O2xpbmtfaXJxLCBuZGV2KTsKJiM0MztlcnJfbGlua19pcnE6CiYjNDM7CWZyZWVfaXJxKHByaXYtJmd0O2lycSwgbmRldik7CiBlcnJfaHc6CiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0mZ3Q7eGZlcl93cSk7CiBlcnJfd3E6Ci0JdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci1lcnJfcmVnaXN0ZXI6CiAJZnJlZV9uZXRkZXYobmRldik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTgyMCw2ICYjNDM7OTAyLDEzIEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKSB7CiYjNDM7CQlmcmVlX2lycShwcml2LSZndDtsaW5rX2lycSwgbmRldik7CiYjNDM7CQlwcml2LSZndDtsaW5rX2lycSA9IC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKIAl3NTEwMF9od19yZXNldChwcml2KTsKIAlmcmVlX2lycShwcml2LSZndDtpcnEsIG5kZXYpOwogCkBAIC04MjcsNyAmIzQzOzkxNiw2IEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlmbHVzaF93b3JrKCZhbXA7cHJpdi0mZ3Q7cmVzdGFydF93b3JrKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LSZndDt4ZmVyX3dxKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTsKQEAgLTgzOSw2ICYjNDM7OTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKJiM0MzsJCWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJCWRpc2FibGVfaXJxKHByaXYtJmd0O2xpbmtfaXJxKTsKJiM0MzsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAKQEAgLTg1Nyw2ICYjNDM7OTQ4LDEyIEBAIHN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJdzUxMDBfaHdfc3RhcnQocHJpdik7CiAKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJCWVuYWJsZV9pcnEocHJpdi0mZ3Q7bGlua19pcnEpOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O29wcy0mZ3Q7Y2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpCiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIFdpem5ldCBXNTUwMCBTUEkgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBsaW5rIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGUgV2l6bmV0IFc1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLiBJdCB0b3VjaGVzIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucyBpbiBgdzUxMDAuY2AsIGluY2x1ZGluZyBhbiBJUlEgaGFuZGxlciBhbmQgbW9kaWZpY2F0aW9ucyB0byBwcm9iZSwgb3BlbiwgY2xvc2UsIGFuZCBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuIGZ1enphYmxlLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGFuIFNQSS1iYXNlZCBkcml2ZXIuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTUEkgZGV2aWNlcyBjYW4gYmUgYSByZWFsIHBhaW4gdG8gZW11bGF0ZSwgdW5saWtlIHNvbWV0aGluZyBsaWtlIFVTQiBvciBuZXR3b3JraW5nIHRoYXQgaGFzIG1vcmUgbWF0dXJlIGVtdWxhdGlvbiBzdXBwb3J0LiBJIGtub3cgUUVNVSBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlIHRoZSBXaXpuZXQgY2hpcHMsIHNvIHRoYXQmIzM5O3MgYSBodXJkbGUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNsZXZlciBzb2Z0d2FyZSBlbXVsYXRpb24gdHJpY2sgSSBjb3VsZCB1c2UsIGJ1dCByZWFsaXN0aWNhbGx5LCBTUEkgZHJpdmVycyBhcmUgb2Z0ZW4gaW5oZXJlbnRseSBoYXJkd2FyZS1kZXBlbmRlbnQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSB0cmlnZ2VyIGFueSBvZiB0aGUgbmV3IGNvZGUgcGF0aHMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDYW4gSSBjcmVhdGUgYW4gU1BJIGRldmljZSBhdCBhbGwgaW4gUUVNVT8gVGhlcmUgbWlnaHQgYmUgc29tZSBzb3J0IG9mIFNQSSBjb250cm9sbGVyIGVtdWxhdGlvbiwgYnV0IG5vdCBhIFc1NTAwLiBDYW4gSSBjcmVhdGUgaXQgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc3lzZnM/IEV2ZW4gaWYgSSBjYW4gaW5zdGFudGlhdGUgdGhlIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGhhcmR3YXJlIHZpYSBTUEkgbWVzc2FnZXMgbGlrZSBgdzUxMDBfcmVhZGAgYW5kIGB3NTEwMF93cml0ZWAuIElmIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBXNTUwMCBoYXJkd2FyZSBwcmVzZW50LCB0aG9zZSBjYWxscyB3aWxsIGluZXZpdGFibHkgZmFpbCwgYW5kIHRoZSBwcm9iZSB3aWxsIGxpa2VseSBlcnJvciBvdXQuCgpJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgcHJvYmUgZmFpbHMuIFNwZWNpZmljYWxseSwgbG9va2luZyBhdCBgdzUxMDBfcHJvYmVgIGFuZCBgdzUxMDBfaHdfcmVzZXRgLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbWV0aG9kcyBleHBlY3QgdG8gZ2V0IGEgcmVzcG9uc2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jYCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhwZWN0ZWQgZmxvdyBhbmQgd2hlcmUgdGhpbmdzIG1pZ2h0IGZhaWwuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGFzc3VtcHRpb25zIGFib3V0IGhhcmR3YXJlIHJlc3BvbnNlcyBvciBpbml0aWFsaXphdGlvbiBzdGVwcyB0aGF0IHJlbHkgb24gYWN0dWFsIGNvbW11bmljYXRpb24gd2l0aCBhIHBoeXNpY2FsIFNQSSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHc1MTAwX3Byb2JlYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgYSBwcm9iaW5nIHJvdXRpbmUsIGxpa2VseSBmb3IgYW4gRXRoZXJuZXQgY29udHJvbGxlci4gSSYjMzk7ZCBleHBlY3QgaXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgaW5pdGlhbGl6ZSBhbiBXNTEwMCBjaGlwLCBvciBhIGNvbXBhdGlibGUgZGV2aWNlLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIGNoZWNrcyBpdCBwZXJmb3Jtcy4gRG9lcyBpdCB1c2UgYSBoYXJkLWNvZGVkIHJlZ2lzdGVyIGFkZHJlc3MgbWFwLCBvciBkb2VzIGl0IGF0dGVtcHQgYW55IGF1dG8tZGV0ZWN0aW9uIG1ldGhvZHM/IElzIGl0IGxvb2tpbmcgZm9yIHNwZWNpZmljIHNpZ25hdHVyZSB2YWx1ZXMgaW4gY2VydGFpbiByZWdpc3RlcnM/CgoqKkRpdmluZyBpbnRvIGB3NTEwMF9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYW4gaW5pdGlhbGl6YXRpb24gYW5kIGRldGVjdGlvbiByb3V0aW5lIGZvciBhIFc1MTAwIEV0aGVybmV0IGNvbnRyb2xsZXIsIG9yIGEgY29tcG9uZW50IGNvbXBhdGlibGUgd2l0aCBpdC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgcG9raW5nIHNwZWNpZmljIHJlZ2lzdGVycyBrbm93biB0byB0aGUgVzUxMDAgZm9yIGlkZW50aWZpY2F0aW9uPyBPciBpcyBpdCBhIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCwgcG9zc2libHkgaW52b2x2aW5nIGFuIGF1dG9uZWdvdGlhdGlvbiBhdHRlbXB0LCBwZXJoYXBzIHVzaW5nIGEgc3BlY2lhbGl6ZWQgSTJDIG9yIFNQSSBpbnRlcmZhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1ldGhvZG9sb2d5LiBJIG5lZWQgdG8ga25vdzogRG9lcyBpdCByZWx5IG9uIGEgaGFyZC1jb2RlZCBtZW1vcnkgbWFwPyBJZiBzbywgd2hhdCBhcmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3NlcyBhbmQgcmVnaXN0ZXJzIGl0JiMzOTtzIHByb2Jpbmc/IEFsdGVybmF0aXZlbHksIGlzIHRoZXJlIGFuIGF1dG8tZGV0ZWN0aW9uIGVsZW1lbnQgaW52b2x2ZWQ/IERvZXMgaXQgbG9vayBmb3Igc3BlY2lmaWMgJiMzNDttYWdpYyBudW1iZXJzJiMzNDsgb3Igc2lnbmF0dXJlIHZhbHVlcyBpbiBwYXJ0aWN1bGFyIHJlZ2lzdGVycyB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBhIFc1MTAwIGNoaXAgYW5kIGl0cyBzcGVjaWZpYyByZXZpc2lvbj8gSSB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvZiBpdHMgbWV0aG9kb2xvZ3ksIGhvdyByb2J1c3QgaXQgaXMgYWdhaW5zdCBkaWZmZXJlbnQgcmV2aXNpb25zIG9mIHRoZSBXNTEwMCBvciBwb3RlbnRpYWwgY2xvbmVzLCBhbmQgd2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zIGl0IGVtcGxveXMuIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBwcm9iZSByb3V0aW5lIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjI6XHRpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gNzYzOlx0XHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxuIDc2NDpcdHtcbiA3NjU6XHRcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2O1xuIDc2NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gNzY3Olx0XHRpbnQgZXJyO1xuIDc2ODpcdFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gNzY5Olx0XG4gNzcwOlx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpwcml2KTtcbiA3NzE6XHRcdGlmIChzaXplb2Zfb3BzX3ByaXYpIHtcbiA3NzI6XHRcdFx0YWxsb2Nfc2l6ZSA9IEFMSUdOKGFsbG9jX3NpemUsIE5FVERFVl9BTElHTik7XG4gNzczOlx0XHRcdGFsbG9jX3NpemUgJiM0Mzs9IHNpemVvZl9vcHNfcHJpdjtcbiA3NzQ6XHRcdH1cbiA3NzU6XHRcdGFsbG9jX3NpemUgJiM0Mzs9IE5FVERFVl9BTElHTiAtIDE7XG4gNzc2Olx0XG4gNzc3Olx0XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoYWxsb2Nfc2l6ZSk7XG4gNzc4Olx0XHRpZiAoIW5kZXYpXG4gNzc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc4MDpcdFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2KTtcbiA3ODE6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIG5kZXYpO1xuIDc4MjpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDc4MzpcdFxuIDc4NDpcdFx0c3dpdGNoIChvcHMtXHUwMDNlY2hpcF9pZCkge1xuIDc4NTpcdFx0Y2FzZSBXNTEwMDpcbiA3ODY6XHRcdFx0cHJpdi1cdTAwM2VzMF9yZWdzID0gVzUxMDBfUzBfUkVHUztcbiA3ODc6XHRcdFx0cHJpdi1cdTAwM2VzMF90eF9idWYgPSBXNTEwMF9UWF9NRU1fU1RBUlQ7XG4gNzg4Olx0XHRcdHByaXYtXHUwMDNlczBfdHhfYnVmX3NpemUgPSBXNTEwMF9UWF9NRU1fU0laRTtcbiA3ODk6XHRcdFx0cHJpdi1cdTAwM2VzMF9yeF9idWYgPSBXNTEwMF9SWF9NRU1fU1RBUlQ7XG4gNzkwOlx0XHRcdHByaXYtXHUwMDNlczBfcnhfYnVmX3NpemUgPSBXNTEwMF9SWF9NRU1fU0laRTtcbiA3OTE6XHRcdFx0YnJlYWs7XG4gNzkyOlx0XHRjYXNlIFc1MjAwOlxuIDc5MzpcdFx0XHRwcml2LVx1MDAzZXMwX3JlZ3MgPSBXNTIwMF9TMF9SRUdTO1xuIDc5NDpcdFx0XHRwcml2LVx1MDAzZXMwX3R4X2J1ZiA9IFc1MjAwX1RYX01FTV9TVEFSVDtcbiA3OTU6XHRcdFx0cHJpdi1cdTAwM2VzMF90eF9idWZfc2l6ZSA9IFc1MjAwX1RYX01FTV9TSVpFO1xuIDc5NjpcdFx0XHRwcml2LVx1MDAzZXMwX3J4X2J1ZiA9IFc1MjAwX1JYX01FTV9TVEFSVDtcbiA3OTc6XHRcdFx0cHJpdi1cdTAwM2VzMF9yeF9idWZfc2l6ZSA9IFc1MjAwX1JYX01FTV9TSVpFO1xuIDc5ODpcdFx0XHRicmVhaztcbiA3OTk6XHRcdGNhc2UgVzU1MDA6XG4gODAwOlx0XHRcdHByaXYtXHUwMDNlczBfcmVncyA9IFc1NTAwX1MwX1JFR1M7XG4gODAxOlx0XHRcdHByaXYtXHUwMDNlczBfdHhfYnVmID0gVzU1MDBfVFhfTUVNX1NUQVJUO1xuIDgwMjpcdFx0XHRwcml2LVx1MDAzZXMwX3R4X2J1Zl9zaXplID0gVzU1MDBfVFhfTUVNX1NJWkU7XG4gODAzOlx0XHRcdHByaXYtXHUwMDNlczBfcnhfYnVmID0gVzU1MDBfUlhfTUVNX1NUQVJUO1xuIDgwNDpcdFx0XHRwcml2LVx1MDAzZXMwX3J4X2J1Zl9zaXplID0gVzU1MDBfUlhfTUVNX1NJWkU7XG4gODA1Olx0XHRcdGJyZWFrO1xuIDgwNjpcdFx0ZGVmYXVsdDpcbiA4MDc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MDg6XHRcdFx0Z290byBlcnJfd3E7XG4gODA5Olx0XHR9XG4gODEwOlx0XG4gODExOlx0XHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIDgxMjpcdFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gODEzOlx0XHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiA4MTQ6XHRcbiA4MTU6XHRcdHByaXYtXHUwMDNlbGlua19pcnEgPSBvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XG4gODE2Olx0XHRcdFx0IGZ3bm9kZV9pcnFfZ2V0KGRldl9md25vZGUoZGV2KSwgMSkgOiAtRU5PREVWO1xuIDgxNzpcdFx0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuIDgxODpcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgcHJpdi1cdTAwM2VsaW5rX2lycSxcbiA4MTk6XHRcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxuXCYjMzQ7KTtcbiA4MjA6XHRcdFx0Z290byBlcnJfd3E7XG4gODIxOlx0XHR9XG4gODIyOlx0XG4gODIzOlx0XHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ3NTEwMF9uZXRkZXZfb3BzO1xuIDgyNDpcdFx0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNnc1MTAwX2V0aHRvb2xfb3BzO1xuIDgyNTpcdFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5kZXYsIFx1MDAyNnByaXYtXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XG4gODI2Olx0XG4gODI3Olx0XHQvKiBUaGlzIGNoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBWTEFOIHBhY2tldHMgd2l0aCBub3JtYWwgTVRVLFxuIDgyODpcdFx0ICogc28gZGlzYWJsZSBWTEFOIGZvciB0aGlzIGRldmljZS5cbiA4Mjk6XHRcdCAqL1xuIDgzMDpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDtcbiA4MzE6XHRcbiA4MzI6XHRcdHByaXYtXHUwMDNleGZlcl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc1wmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXG4gODMzOlx0XHRcdFx0XHRcdGRldl9uYW1lKGRldikpO1xuIDgzNDpcdFx0aWYgKCFwcml2LVx1MDAzZXhmZXJfd3EpIHtcbiA4MzU6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA4MzY6XHRcdFx0Z290byBlcnJfd3E7XG4gODM3Olx0XHR9XG4gODM4Olx0XG4gODM5Olx0XHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyeF93b3JrLCB3NTEwMF9yeF93b3JrKTtcbiA4NDA6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXR4X3dvcmssIHc1MTAwX3R4X3dvcmspO1xuIDg0MTpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlc2V0cnhfd29yaywgdzUxMDBfc2V0cnhfd29yayk7XG4gODQyOlx0XHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyZXN0YXJ0X3dvcmssIHc1MTAwX3Jlc3RhcnRfd29yayk7XG4gODQzOlx0XG4gODQ0Olx0XHRpZiAobWFjX2FkZHIpXG4gODQ1Olx0XHRcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XG4gODQ2Olx0XHRlbHNlXG4gODQ3Olx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiA4NDg6XHRcbiA4NDk6XHRcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2Vpbml0KSB7XG4gODUwOlx0XHRcdGVyciA9IHByaXYtXHUwMDNlb3BzLVx1MDAzZWluaXQocHJpdi1cdTAwM2VuZGV2KTtcbiA4NTE6XHRcdFx0aWYgKGVycilcbiA4NTI6XHRcdFx0XHRnb3RvIGVycl9odztcbiA4NTM6XHRcdH1cbiA4NTQ6XHRcbiA4NTU6XHRcdGVyciA9IHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xuIDg1NjpcdFx0aWYgKGVycilcbiA4NTc6XHRcdFx0Z290byBlcnJfaHc7XG4gODU4Olx0XG4gODU5Olx0XHRpZiAob3BzLVx1MDAzZW1heV9zbGVlcCkge1xuIDg2MDpcdFx0XHRlcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwcml2LVx1MDAzZWlycSwgTlVMTCwgdzUxMDBfaW50ZXJydXB0LFxuIDg2MTpcdFx0XHRcdFx0XHQgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXNTEwMCBSZXNldCBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBgdzUxMDBfcHJvYmVgIGlzIGtpY2tpbmcgb2ZmIHRoZSBpbml0aWFsaXphdGlvbi4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGNhbGxpbmcgYHc1MTAwX2h3X3Jlc2V0KHByaXYpYC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSByZXNldCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgdzUxMDBfaHdfcmVzZXRgIGZ1bmN0aW9uIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBXaGF0IHBpbnMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgdGltaW5nIHJlcXVpcmVtZW50cz8gSXMgaXQgdXNpbmcgYSBkZWRpY2F0ZWQgcmVzZXQgbGluZSwgb3IgaXMgaXQgYSBwb3dlci1jeWNsZSBzdHlsZSByZXNldD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBoYXJkd2FyZSByZXNldCBwcm9jZXNzIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9iZSByb3V0aW5lLiBLbm93aW5nIGhvdyB0aGUgY2hpcCBpcyBicm91Z2h0IHRvIGEga25vd24gc3RhdGUgaXMgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfaHdfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz0zNTI9c3RhdGljIGludCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6MzY2OnN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy0zNjcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTQ3NT1zdGF0aWMgdm9pZCB3NTEwMF9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ3OS1cdG5ldGlmX3N0b3BfcXVldWUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo0ODA6XHR3NTEwMF9od19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ4MS1cdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2Mj1pbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODU1Olx0ZXJyID0gdzUxMDBfaHdfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04NTYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTkwMD12b2lkIHc1MTAwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtOTExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTEyOlx0dzUxMDBfaHdfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MTMtXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9OTQxPXN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05NDYtXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTQ3Olx0XHR3NTEwMF9od19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTk0OC1cdFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBSZXNldCBTZXF1ZW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdzUxMDBfaHdfcmVzZXRgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGhhcmR3YXJlIHJlc2V0IHNlcXVlbmNlIGltcGxlbWVudGVkIGZvciB0aGUgVzUxMDAuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2lnbmFscyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRpZWQgdG8gdGhlIHJlc2V0IHBpbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGltaW5nIGRpYWdyYW1zIG9yIGFueSBjb2RlIHNuaXBwZXRzIHRoYXQgZGVmaW5lIHRoZSBjcml0aWNhbCBkZWxheXMgYW5kIHNpZ25hbCB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvcGVyIHJlc2V0IHRpbWluZyBpcyBjcnVjaWFsOyBpbmNvcnJlY3Qgc2VxdWVuY2luZyBjYW4gbGVhZCB0byBpbnRlcm1pdHRlbnQgaXNzdWVzIG9yLCB3b3JzZSwgY29tcGxldGUgZmFpbHVyZSB0byBpbml0aWFsaXplIHRoZSBXNTEwMCBwcm9wZXJseS4gSSYjMzk7bGwgYmUgbWVudGFsbHkgbWFwcGluZyB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGlmIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgZm9yIGEgc3RhYmxlIHJlc2V0LiBBcmUgdGhlcmUgYW55IHVudXN1YWwgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgcHJlc2VudD8gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiB0aGUgY29kZSBwcm92aWRlcyBmb3IgYW55IGRlYm91bmNpbmcgb2YgdGhlIHJlc2V0IHNpZ25hbCBpZiBpdCBpcyBhIG1hbnVhbCBzd2l0Y2guIEtub3dpbmcgaG93IHRoZSByZXNldCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NjpcdHN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4gMzY3Olx0e1xuIDM2ODpcdFx0dTMyIHJ0cjtcbiAzNjk6XHRcbiAzNzA6XHRcdHc1MTAwX3Jlc2V0KHByaXYpO1xuIDM3MTpcdFxuIDM3MjpcdFx0dzUxMDBfZGlzYWJsZV9pbnRyKHByaXYpO1xuIDM3MzpcdFx0dzUxMDBfd3JpdGVfbWFjYWRkcihwcml2KTtcbiAzNzQ6XHRcbiAzNzU6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCkge1xuIDM3NjpcdFx0Y2FzZSBXNTEwMDpcbiAzNzc6XHRcdFx0dzUxMDBfbWVtb3J5X2NvbmZpZ3VyZShwcml2KTtcbiAzNzg6XHRcdFx0cnRyID0gVzUxMDBfUlRSO1xuIDM3OTpcdFx0XHRicmVhaztcbiAzODA6XHRcdGNhc2UgVzUyMDA6XG4gMzgxOlx0XHRcdHc1MjAwX21lbW9yeV9jb25maWd1cmUocHJpdik7XG4gMzgyOlx0XHRcdHJ0ciA9IFc1MTAwX1JUUjtcbiAzODM6XHRcdFx0YnJlYWs7XG4gMzg0Olx0XHRjYXNlIFc1NTAwOlxuIDM4NTpcdFx0XHR3NTUwMF9tZW1vcnlfY29uZmlndXJlKHByaXYpO1xuIDM4NjpcdFx0XHRydHIgPSBXNTUwMF9SVFI7XG4gMzg3Olx0XHRcdGJyZWFrO1xuIDM4ODpcdFx0ZGVmYXVsdDpcbiAzODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzkwOlx0XHR9XG4gMzkxOlx0XG4gMzkyOlx0XHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM5NDpcdFxuIDM5NTpcdFx0cmV0dXJuIDA7XG4gMzk2Olx0fVxuIDM5NzpcdFxuIDM5ODpcdHN0YXRpYyB2b2lkIHc1MTAwX2h3X3N0YXJ0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIDM5OTpcdHtcbiA0MDA6XHRcdHU4IG1vZGUgPSBTMF9NUl9NQUNSQVc7XG4gNDAxOlx0XG4gNDAyOlx0XHRpZiAoIXByaXYtXHUwMDNlcHJvbWlzYykge1xuIDQwMzpcdFx0XHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcbiA0MDQ6XHRcdFx0XHRtb2RlIHw9IFc1NTAwX1MwX01SX01GO1xuIDQwNTpcdFx0XHRlbHNlXG4gNDA2Olx0XHRcdFx0bW9kZSB8PSBTMF9NUl9NRjtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdHc1MTAwX3dyaXRlKHByaXYsIFc1MTAwX1MwX01SKHByaXYpLCBtb2RlKTtcbiA0MTA6XHRcdHc1MTAwX2NvbW1hbmQocHJpdiwgUzBfQ1JfT1BFTik7XG4gNDExOlx0XHR3NTEwMF9lbmFibGVfaW50cihwcml2KTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIHZvaWQgdzUxMDBfaHdfY2xvc2Uoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4gNDE1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgSGFyZHdhcmUgQ2hlY2sgYW5kIENvbmZ1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgY29kZSBhbmQgSSBzZWUgdGhpcyBjcnVjaWFsIGxpbmU6IGBpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpIHJldHVybiAtRU5PREVWO2AuIFJpZ2h0IGF3YXksIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBoYXJkd2FyZSBjaGVjay4gVGhlIGRyaXZlciBpcyByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gYSBoYXJkd2FyZSByZWdpc3RlciwgYHJ0cmAsIHVzaW5nIGB3NTEwMF9yZWFkMTZgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZSBoYXJkd2FyZSwgcHJlc3VtYWJseSBhIFc1MTAwIGNoaXAgb3Igc29tZXRoaW5nIHNpbWlsYXIsICptdXN0KiByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSwgYFJUUl9ERUZBVUxUYCwgaW4gdGhhdCByZWdpc3Rlci4gSWYgdGhlIHZhbHVlIGlzbiYjMzk7dCB3aGF0JiMzOTtzIGV4cGVjdGVkLCBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGAtRU5PREVWYCwgaW5kaWNhdGluZyB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50IG9yIGlzbiYjMzk7dCByZXNwb25kaW5nIGNvcnJlY3RseS4gVGhhdCBtYWtlcyBzZW5zZSwgYSBzdGFuZGFyZCBoYXJkd2FyZSBjaGVjay4KCkJ1dCBoYW5nIG9u4oCmIGlmIHRoZXJlJiMzOTtzICpubyogaGFyZHdhcmUgY29ubmVjdGVkLCB3aGF0IHdpbGwgYHc1MTAwX3JlYWQxNmAgbGlrZWx5IHJldHVybj8gUHJvYmFibHkgc29tZXRoaW5nIHByZWRpY3RhYmxlLCBsaWtlIDAgb3IgbWF5YmUgMHhGRkZGLiBFaXRoZXIgb2YgdGhvc2UgdmFsdWVzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogZXF1YWwgYFJUUl9ERUZBVUxUYC4gU28sIHRoZSBjaGVjayBzZWVtcyByb2J1c3QsIGFzc3VtaW5nIHRoZSByZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZ3JhY2VmdWxseS4KCkhvbGQgb24sIHdoYXQgaXMgYFJUUl9ERUZBVUxUYD8gSXQmIzM5O3MgYSBzeW1ib2xpYyBjb25zdGFudC4gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhhdCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gZmlndXJlIG91dCB3aHkgdGhpcyByZWdpc3RlciBpcyBzbyBmdW5kYW1lbnRhbCB0byB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyByZWdpc3RlciBjb250cm9scyB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgZ29vZCBjaGVjayB0byBwZXJmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVFJfREVGQVVMVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzU9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OS0jZGVmaW5lIFc1MTAwX1JUUlx0XHQweDAwMTcgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTA6I2RlZmluZSAgIFJUUl9ERUZBVUxUXHRcdCAgMjAwMCAvKiA9MHgwN2QwICgyMDAwKSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtOTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzY2PXN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6MzkyOlx0aWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkzLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVzUxMDAgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgZXhwZWN0aW5nIGEgc3BlY2lmaWMgZGV2aWNlIElELCAweDA3ZDAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYC1FTk9ERVZgLCBpbmRpY2F0aW5nIGEgZmFpbHVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgcmVsaWFibHkgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNeSBmaXJzdCB0aG91Z2h0IGlzIFFFTVUsIGJ1dCBJIGtub3cgdGhhdCYjMzk7cyBwcm9iYWJseSBhIGRlYWQgZW5kIHNpbmNlIFFFTVUgZG9lc24mIzM5O3Qgb2ZmZXIgYW55IFc1MTAwL1c1MjAwL1c1NTAwIGVtdWxhdGlvbi4KCkFscmlnaHQsIHdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBTeXprYWxsZXI/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBpbmplY3QgU1BJIHJlc3BvbnNlcz8gSWRlYWxseSwgSSYjMzk7ZCB3YW50IGEgZ2VuZXJpYyBTUEkgZnV6emVyIHRoYXQgaW50ZXJjZXB0cyBTUEkgY29tbXVuaWNhdGlvbiBhbmQgcHJvdmlkZXMgc3Bvb2ZlZCBkYXRhLiBTYWRseSwgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LgoKSGFuZyBvbi4uLmlzIHRoaXMgZHJpdmVyIGV2ZW4gKm9ubHkqIFNQST8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGRyaXZlciBzb3VyY2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBpbiBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSB0aGUgaW50ZXJmYWNlIHRvIHRoZSBjaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7dzUxMDAtc3BpLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgdzUxMDAtc3BpLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFc1MTAwIEV0aGVybmV0IGNvbnRyb2xsZXIuIEkga25vdyB0aGUgYmFzaWNzLCB0aGUgY2hpcCBzZWxlY3QsIHRoZSBkYXRhIGZyYW1pbmcsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSBhbHdheXMgd2hlcmUgdGhlIGRldmlsIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIG1hbmFnaW5nIHRoZSB0aW1pbmcgY29uc3RyYWludHMuIEFyZSB0aGV5IHVzaW5nIERNQT8gSW50ZXJydXB0cz8gT3IgYXJlIHRoZXkgZG9pbmcgZXZlcnl0aGluZyBpbiBhIGJsb2NraW5nIG1hbm5lcj8gSeKAmWxsIGhhdmUgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIGFuZCBlcnJvciBjb2RlIGRlY29kaW5nLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsLCBvciBlbGVnYW50LCBhYm91dCB0aGUgd2F5IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhlIFNQSSB0cmFuc2FjdGlvbiBzZXR1cD8gQW55IG9wdGltaXphdGlvbnM/IEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBzZWUgaWYgaXQgaXMgdGhyZWFkIHNhZmUuIEl0IGlzIGFsd2F5cyBhIHBhaW4gdG8gZGVidWcgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIHRvb2sgdGhvc2UgY29uY2VybnMgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICogRXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgV0labmV0IFc1MTAwL1c1MjAwL1c1NTAwIGNoaXAuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQWtpbm9idSBNaXRhIFx1MDAzY2FraW5vYnUubWl0YUBnbWFpbC5jb21cdTAwM2VcbiAgIDY6XHQgKlxuICAgNzpcdCAqIERhdGFzaGVldDpcbiAgIDg6XHQgKiBodHRwOi8vd3d3Lndpem5ldC5jby5rci93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MTAwL0RvY3VtZW50L1c1MTAwX0RhdGFzaGVldF92MS4yLjYucGRmXG4gICA5Olx0ICogaHR0cDovL3dpem5ldGhvbWUuY2FmZTI0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MjAwL0RvY3VtZW50cy9XNTIwMF9EU19WMTQwRS5wZGZcbiAgMTA6XHQgKiBodHRwOi8vd2l6d2lraS5uZXQvd2lraS9saWIvZXhlL2ZldGNoLnBocD9tZWRpYT1wcm9kdWN0czp3NTUwMDp3NTUwMF9kc192MTA2ZV8xNDEyMzAucGRmXG4gIDExOlx0ICovXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdCNpbmNsdWRlIFwmIzM0O3c1MTAwLmhcJiMzNDtcbiAgMjI6XHRcbiAgMjM6XHQjZGVmaW5lIFc1MTAwX1NQSV9XUklURV9PUENPREUgMHhmMFxuICAyNDpcdCNkZWZpbmUgVzUxMDBfU1BJX1JFQURfT1BDT0RFIDB4MGZcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50IHc1MTAwX3NwaV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgYWRkcilcbiAgMjc6XHR7XG4gIDI4Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xuICAyOTpcdFx0dTggY21kWzNdID0geyBXNTEwMF9TUElfUkVBRF9PUENPREUsIGFkZHIgXHUwMDNlXHUwMDNlIDgsIGFkZHIgXHUwMDI2IDB4ZmYgfTtcbiAgMzA6XHRcdHU4IGRhdGE7XG4gIDMxOlx0XHRpbnQgcmV0O1xuICAzMjpcdFxuICAzMzpcdFx0cmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIGNtZCwgc2l6ZW9mKGNtZCksIFx1MDAyNmRhdGEsIDEpO1xuICAzNDpcdFxuICAzNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGRhdGE7XG4gIDM2Olx0fVxuICAzNzpcdFxuICAzODpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgYWRkciwgdTggZGF0YSlcbiAgMzk6XHR7XG4gIDQwOlx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xuICA0MTpcdFx0dTggY21kWzRdID0geyBXNTEwMF9TUElfV1JJVEVfT1BDT0RFLCBhZGRyIFx1MDAzZVx1MDAzZSA4LCBhZGRyIFx1MDAyNiAweGZmLCBkYXRhfTtcbiAgNDI6XHRcbiAgNDM6XHRcdHJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgY21kLCBzaXplb2YoY21kKSwgTlVMTCwgMCk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIpXG4gIDQ3Olx0e1xuICA0ODpcdFx0dTE2IGRhdGE7XG4gIDQ5Olx0XHRpbnQgcmV0O1xuICA1MDpcdFxuICA1MTpcdFx0cmV0ID0gdzUxMDBfc3BpX3JlYWQobmRldiwgYWRkcik7XG4gIDUyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1MzpcdFx0XHRyZXR1cm4gcmV0O1xuICA1NDpcdFx0ZGF0YSA9IHJldCBcdTAwM2NcdTAwM2MgODtcbiAgNTU6XHRcdHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIgJiM0MzsgMSk7XG4gIDU2Olx0XG4gIDU3Olx0XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogZGF0YSB8IHJldDtcbiAgNTg6XHR9XG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIGludCB3NTEwMF9zcGlfd3JpdGUxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHUxNiBkYXRhKVxuICA2MTpcdHtcbiAgNjI6XHRcdGludCByZXQ7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciwgZGF0YSBcdTAwM2VcdTAwM2UgOCk7XG4gIDY1Olx0XHRpZiAocmV0KVxuICA2NjpcdFx0XHRyZXR1cm4gcmV0O1xuICA2NzpcdFxuICA2ODpcdFx0cmV0dXJuIHc1MTAwX3NwaV93cml0ZShuZGV2LCBhZGRyICYjNDM7IDEsIGRhdGEgXHUwMDI2IDB4ZmYpO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHRzdGF0aWMgaW50IHc1MTAwX3NwaV9yZWFkYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHU4ICpidWYsXG4gIDcyOlx0XHRcdFx0ICAgICAgaW50IGxlbilcbiAgNzM6XHR7XG4gIDc0Olx0XHRpbnQgaTtcbiAgNzU6XHRcbiAgNzY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiAgNzc6XHRcdFx0aW50IHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIgJiM0MzsgaSk7XG4gIDc4Olx0XG4gIDc5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDgwOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgODE6XHRcdFx0YnVmW2ldID0gcmV0O1xuICA4MjpcdFx0fVxuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIGNvbnN0IHU4ICpidWYsXG4gIDg4Olx0XHRcdFx0ICAgICAgIGludCBsZW4pXG4gIDg5Olx0e1xuICA5MDpcdFx0aW50IGk7XG4gIDkxOlx0XG4gIDkyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KSB7XG4gIDkzOlx0XHRcdGludCByZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciAmIzQzOyBpLCBidWZbaV0pO1xuICA5NDpcdFxuICA5NTpcdFx0XHRpZiAocmV0KVxuICA5NjpcdFx0XHRcdHJldHVybiByZXQ7XG4gIDk3Olx0XHR9XG4gIDk4Olx0XG4gIDk5Olx0XHRyZXR1cm4gMDtcbiAxMDA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU1BJIERyaXZlcioqCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBtb2R1bGUmIzM5O3MgZnVuY3Rpb24gaXMgc29sZWx5IGFzIGFuIFNQSSBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGF0JiMzOTtzICp0cnVseSogdGhlIGNhc2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBpcyBpdCAqb25seSogU1BJPyBOb3csIGxldCBtZSB0aGluay4uLiByaWdodCwgSSByZWNhbGwgdGhlIGZpbGUgc3RydWN0dXJlLi4uIEkgc2VlIHRoYXQgYHc1MTAwLmNgIGFwcGVhcnMgdG8gYmUgdGhlIGNlbnRyYWwgY29tcG9uZW50LCB0aGUgY29yZSBsb2dpYywgd2hpbGUgYHc1MTAwLXNwaS5jYCAqc3BlY2lmaWNhbGx5KiBpbXBsZW1lbnRzIHRoZSBTUEkgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGdvb2QuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFub3RoZXIgZmlsZSwgc2F5IGEgcGxhdGZvcm0gZHJpdmVyLCBvciBhbiBJMkMgY29tcG9uZW50LiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byBnZXQgY29uZmlybWF0aW9uIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIGJlc2lkZXMgdGhlIFNQSSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3c1MTAwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XHRyZXR1cm4gdzUxMDBfcHJvYmUoXHUwMDI2c3BpLVx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFc1MTAwIENvZGViYXNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgVzUxMDAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGB3NTEwMC5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGNvcmUgbW9kdWxlLCBsaWtlbHkgY29udGFpbmluZyB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXR5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciB0aGUgVzUxMDAgaXRzZWxmLiBUaGVuIHRoZXJlIGlzIHRoZSBTUEkgZHJpdmVyLiBUaGUgbmFtZSBgdzUxMDAtc3BpLmNgIGluZGljYXRlcyB0aGF0IGl0IGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uLCB3aGljaCB3aWxsIG9idmlvdXNseSBiZSBjcml0aWNhbCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzLiBCdXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRyaXZlcnMgb3IgYWJzdHJhY3Rpb24gbGF5ZXJzIGluIHBsYXkgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IGRlcGVuZGVuY2llcyBvciBlbnRyeSBwb2ludHMuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7dzUxMDAtc3BpLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBXNTEwMCBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBsb29raW5nIGF0IHRoZSByaWdodCBmaWxlcyBmb3IgdGhpcyBXNTEwMCBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkgcmVjYWxsZWQgYSBgdzUzMDAuY2AgYXQgc29tZSBwb2ludCwgYnV0IG5vLCBhbGwgSSYjMzk7bSBzZWVpbmcgYXJlIHZhcmlhdGlvbnMgZm9yIHRoZSBXNTEwMCBzcGVjaWZpY2FsbHk6IGB3NTEwMC1zcGkuY2AsIGB3NTEwMC5jYCwgYW5kIHRoZSBoZWFkZXIgYHc1MTAwLmhgLiBBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyBhIFNQSSB2ZXJzaW9uIGFuZCBhIHJlZ3VsYXIgb25lLCByZXByZXNlbnRlZCBieSB0aGUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGZpbGVzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIFNQSSB2YXJpYW50IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGVyZSYjMzk7cyBhIG1lbW9yeS1tYXBwZWQgdmVyc2lvbiwgb3Igd2hldGhlciB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGV4Y2x1c2l2ZWx5IHJlZ2lzdGVyLWJhc2VkLiBJdCYjMzk7cyB0aW1lIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgZGlyZWN0b3J5IHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kOyBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcdHJldHVybiB3NTEwMF9wcm9iZShcdTAwMjZzcGktXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXHUwMDNlaXJxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2MD1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NjI6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYzLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODk4OkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2l6bmV0IERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUgcHJvY2VzcyB0aGlzIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3V0cHV0LiBJIHNlZSBgdzUxMDAtc3BpLmNgIGFuZCBgdzUxMDAuY2AgaW4gdGhlIHJlc3VsdHMuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIEkgdGhvdWdodCBJIGFsc28gc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgdzUzMDBgPyBObywgd2FpdCBhIG1pbnV0ZSwgdGhlIGFjdHVhbCBvdXRwdXQgaXMganVzdDogYEZpbGVzOiBbJiMzNDt3NTEwMC1zcGkuYyYjMzQ7LCAmIzM0O3c1MTAwLmMmIzM0OywgJiMzNDt3NTEwMC5oJiMzNDtdYC4gU28sIG5vIGB3NTMwMC5jYCBhcHBlYXJzIGhlcmUgYW5kIGl0IGNvbmZpcm1zIHRoZXJlJiMzOTtzIG5vIG1lbW9yeS1tYXBwZWQgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgdzUxMDAgc3BlY2lmaWNhbGx5IGluICp0aGlzKiBkaXJlY3RvcnkuIExldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjaywgc3BlY2lmaWNhbGx5LCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9gIGRpcmVjdG9yeSwgSSBzaG91bGQgaGF2ZSBwYWlkIG1vcmUgYXR0ZW50aW9uLiBBaCwgcmlnaHQsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgcmV0dXJucyBib3RoIGBGaWxlc2AgYW5kIGBTdWJkaXJzYC4gT2theSwgYW5kIHdhaXQsIEkgKmRlZmluaXRlbHkqIGRpZG4mIzM5O3Qgc2VlIGB3NTMwMC5jYCBub3cuIExldCBtZSBjaGVjayB0aGUgZGlyZWN0b3J5IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3c1MTAwLXNwaS5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTU4CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDgxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgV2l6bmV0IFc1MTAwIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBzZWVpbmcgb25seSB0aHJlZSBmaWxlcyBhZmZlY3RlZCBpbml0aWFsbHkuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHRvdWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBkcml2ZXIgZXhwbGljaXRseSByZXF1aXJlcyBhbiBTUEkgZGV2aWNlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gUUVNVSBwcm92aWRlIGFuIFNQSSBkZXZpY2U/CgpJIGtub3cgUUVNVSAqaGFzKiBTUEkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSYjMzk7cyBubyBhY3R1YWwgZW11bGF0aW9uIGZvciB0aGUgVzUxMDAsIFc1MjAwLCBvciBXNTUwMCBkZXZpY2VzIHRoZW1zZWx2ZXMuIEkgY2FuIGNyZWF0ZSBhbiBTUEkgZGV2aWNlIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBzdXJlLCBidXQgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZ2V0IG1lIGFueXdoZXJlLiBUaGUgYHc1MTAwX2h3X3Jlc2V0YCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsLiBJdCByZWFkcyBgUlRSX0RFRkFVTFRgICgyMDAwKSBmcm9tIHRoZSBTUEkgYnVzLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYW4gYWNjdXJhdGUgZW11bGF0b3IsIHRoZSBTUEkgcmVhZCBpcyBqdXN0IGdvaW5nIHRvIHJldHVybiBnYXJiYWdlIOKAkyBsaWtlbHkgMCBvciAweGZmZmYg4oCTIGFuZCB0aGUgcHJvYmUgd2lsbCBjaG9rZSB3aXRoIGAtRU5PREVWYC4KClRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsICpuZXZlciogcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkZXZpY2Ugd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGFsbCB0aGUgY29kZSBwYXRocyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIOKAkyBgdzUxMDBfZGV0ZWN0X2xpbmtgLCBgdzUxMDBfb3BlbmAsIGB3NTEwMF9zdG9wYCwgYHc1MTAwX2dldF9saW5rYCDigJMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFRoZXkmIzM5O3JlIGFsbCBwcmVkaWNhdGVkIG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZSBhbmQgYSByZWdpc3RlcmVkIG5ldHdvcmsgaW50ZXJmYWNlLiBTaW5jZSB0aGUgcHJvYmUgZmFpbHMsIHRoZXkmIzM5O3JlIGRlYWQgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVzY2FwZSBoYXRjaGVzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMb29raW5nIGF0IGB3NTEwMF9od19yZXNldGAgYWdhaW46CgpgYGBjCglpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpCgkJcmV0dXJuIC1FTk9ERVY7CmBgYAoKWXVwLCBpdCYjMzk7cyBhIGhhcmQgY2hlY2suIFRoZXJlJiMzOTtzIG5vIHNvZnQgZmFpbHVyZSBtb2RlIG9yIGNvbmRpdGlvbmFsIGJ5cGFzcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBXNTEwMCBpbiB0aGUga2VybmVsPyBOby4gQW55IFFFTVUgZW11bGF0aW9uPyBOb3BlLCBRRU1VJiMzOTtzIGdvdCBub3RoaW5nIGZvciB0aGlzLiBBbmQgd2hhdCBhYm91dCBTeXprYWxsZXI/IERvZXMgaXQgaGF2ZSBzb21lIGdlbmVyaWMgU1BJIG1vY2tpbmcgZnJhbWV3b3JrIHRoYXQgY291bGQgbGV0IG1lIHJldHVybiBhIHNwZWNpZmljIHZhbHVlIGZvciBhIHNwZWNpZmljIHJlZ2lzdGVyPyBVbmZvcnR1bmF0ZWx5LCBuby4KClNvLCB0aGUgZHJpdmVyIGNhbiYjMzk7dCBiZSBwcm9iZWQgc3VjY2Vzc2Z1bGx5LiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsLgoKTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBpbnN0cnVjdGlvbnMuIE9rYXksICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgQmluZ28uCgpUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gcmVhY2ggdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyAoYHc1MTAwX2RldGVjdF9saW5rYCwgZXRjLikgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoaXMsIEkgaGF2ZSB0byBjb25jbHVkZSB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgZmFsc2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGluYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB0byBhZGQgbGluayBpbnRlcnJ1cHQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciB2ZXJpZmllcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGhhcmR3YXJlIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZSAoUlRSX0RFRkFVTFQpLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGVtdWxhdG9yLCB0aGUgcHJvYmUgd2lsbCBmYWlsLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgdzUxMDBfZGV0ZWN0X2xpbmssIHc1MTAwX29wZW4sIGFuZCB3NTEwMF9zdG9wKSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowNy44NzU0MDM2NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg1MzM5OTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowNy44NzU0MDk5NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzczMjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0MTlkYTI5NTg4MDFlZGRlMDY5Y2NiMjUyOTNhYmI5MWFkNGU5OTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgxZjQzODJlYjk2YzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxcbkBAIC0wLDAgKzEsOTEgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlclxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kIFxcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHdpem5ldCx3NTUwMFxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBpbnRlcnJ1cHRzOlxcbisgICAgICAgICAgbWluSXRlbXM6IDFcXG4rICAgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNYWluIGludGVycnVwdCAoSU5UIHBpbiBvbiB0aGUgZGV2aWNlKS5cXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgICAgICAgIE9wdGlvbmFsIGludGVycnVwdCBmb3IgbGluayBzdGF0dXMgY2hhbmdlcyAoTElOS0xFRCBwaW4gb25cXG4rICAgICAgICAgICAgICAgIHc1NTAwKS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGludGVycnVwdHM6XFxuKyAgICAgICAgICBpdGVtczpcXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAtIHdpem5ldCx3NTIwMFxcbisgICAgICAtIHdpem5ldCx3NTUwMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBzcGktbWF4LWZyZXF1ZW5jeTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosXFxuKyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cXG4rICAgIG1heGltdW06IDgwMDAwMDAwXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gaW50ZXJydXB0c1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xcbitcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFxcdTAwM2VcXG4rXFxuKyAgICBzcGkge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldEAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcXHUwMDNlO1xcbisgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFxcdTAwM2MzMDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbisuLi5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw1MCArMCwwIEBAXFxuLSogV2l6bmV0IHc1eDAwXFxuLVxcbi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cXG4tXFxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxcbi10aGUgU1BJIG1hc3RlciBub2RlLlxcbi1cXG4tUmVxdWlyZWQgcHJvcGVydGllczpcXG4tLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczpcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTEwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTIwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTUwMFxcXCJcXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcXG4tICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5XFxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXFxuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXFxuLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLlxcbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xcbi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi5cXG4tXFxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XFxuLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC5cXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxcbi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cXG4tXFxuLVxcbi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKTpcXG4tXFxuLVxcdTAwMjZzcGkge1xcbi1cXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcXG4tXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbi1cXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLVxcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4tXFx0XFx0aW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4tXFx0XFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcXHUwMDNjMzAwMDAwMDBcXHUwMDNlO1xcbi1cXHR9O1xcbi19O1xcbi1cXG4tXFx1MDAyNmdwaW8ge1xcbi1cXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XFxuLVxcdFxcdGJyY20scGlucyA9IFxcdTAwM2MyNVxcdTAwM2U7XFxuLVxcdFxcdGJyY20sZnVuY3Rpb24gPSBcXHUwMDNjMFxcdTAwM2U7IC8qIGluICovXFxuLVxcdFxcdGJyY20scHVsbCA9IFxcdTAwM2MwXFx1MDAzZTsgLyogbm9uZSAqL1xcbi1cXHR9O1xcbi19O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInc1MTAwLmhcXFwiXFxuQEAgLTEyNCw2ICsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuICAqL1xcbiAjZGVmaW5lIFc1NTAwX1NJTVJcXHRcXHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXFxuICNkZWZpbmUgVzU1MDBfUlRSXFx0XFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBXNTUwMF9QSFlDRkdSXFx0XFx0MHgwMDJlIC8qIFBIWSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1xcdFxcdCAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqL1xcbiBcXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXFx0XFx0MHgxMDAwMFxcbiBcXG5AQCAtMTU0LDYgKzE1Nyw3IEBAIHN0cnVjdCB3NTEwMF9wcml2IHtcXG4gXFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xcbiBcXG4gXFx0aW50IGlycTtcXG4rXFx0aW50IGxpbmtfaXJxO1xcbiBcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC0zNDUsNiArMzQ5LDIwIEBAIHN0YXRpYyB2b2lkIHc1NTAwX21lbW9yeV9jb25maWd1cmUoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRuZXRpZl9lcnIocHJpdiwgbGluaywgbmRldixcXG4rXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDI2IFBIWUNGR1JfTE5LO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBydHI7XFxuQEAgLTQxNCw2ICs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdHNpemVvZihpbmZvLVxcdTAwM2VidXNfaW5mbykpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkID09IFc1NTAwKVxcbitcXHRcXHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuQEAgLTYxNiw2ICs2NDQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxcbiBcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcXG4rXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuK1xcdFxcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkge1xcbitcXHRcXHRcXHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFxcXCJsaW5rIGlzIHVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcXFwibGluayBpcyBkb3duXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB3NTEwMF9zZXRyeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdzUxMDBfcHJpdixcXG5AQCAtNjU5LDYgKzcwNSwxNSBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGVuYWJsZV9pcnEocHJpdi1cXHUwMDNlbGlua19pcnEpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpXFxuK1xcdFxcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjY3LDYgKzcyMiwxMCBAQCBzdGF0aWMgaW50IHc1MTAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbiBcXHRuZXRpZl9pbmZvKHByaXYsIGlmZG93biwgbmRldiwgXFxcInNodXR0aW5nIGRvd25cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGRpc2FibGVfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxKTtcXG4rXFxuIFxcdHc1MTAwX2h3X2Nsb3NlKHByaXYpO1xcbiBcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4gXFx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcXG5AQCAtNjc4LDYgKzczNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gdzUxMDBfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcXG4gXFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gdzUxMDBfc2V0X21zZ2xldmVsLFxcbitcXHQuZ2V0X2xpbmtcXHRcXHQ9IHc1MTAwX2dldF9saW5rLFxcbiBcXHQuZ2V0X3JlZ3NfbGVuXFx0XFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXFxuIFxcdC5nZXRfcmVnc1xcdFxcdD0gdzUxMDBfZ2V0X3JlZ3MsXFxuIH07XFxuQEAgLTc0NSwxMyArODA1LDIxIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbitcXHRcXHRnb3RvIGVycl93cTtcXG4gXFx0fVxcbiBcXG4gXFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuIFxcdHByaXYtXFx1MDAzZW9wcyA9IG9wcztcXG4gXFx0cHJpdi1cXHUwMDNlaXJxID0gaXJxO1xcbiBcXG4rXFx0cHJpdi1cXHUwMDNlbGlua19pcnEgPSBvcHMtXFx1MDAzZWNoaXBfaWQgPT0gVzU1MDAgP1xcbitcXHRcXHRcXHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSA9PSAtRVBST0JFX0RFRkVSKSB7XFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBwcml2LVxcdTAwM2VsaW5rX2lycSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfd3E7XFxuK1xcdH1cXG4rXFxuIFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcXG4gXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XFxuIFxcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XFxuQEAgLTc2MSwxMiArODI5LDggQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbiBcXHQgKi9cXG4gXFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7XFxuIFxcbi1cXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4tXFxuIFxcdHByaXYtXFx1MDAzZXhmZXJfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzXFxcIiwgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdG5ldGRldl9uYW1lKG5kZXYpKTtcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoZGV2KSk7XFxuIFxcdGlmICghcHJpdi1cXHUwMDNleGZlcl93cSkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycl93cTtcXG5AQCAtNzk1LDIxICs4NTksMzkgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbiBcXHRpZiAob3BzLVxcdTAwM2VtYXlfc2xlZXApIHtcXG4gXFx0XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSwgbmRldik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IHJlcXVlc3RfaXJxKHByaXYtXFx1MDAzZWlycSwgdzUxMDBfaW50ZXJydXB0LFxcbi1cXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9MT1csIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcXG4rXFx0XFx0XFx0XFx0ICBJUlFGX1RSSUdHRVJfTE9XLCBkZXZfbmFtZShkZXYpLCBuZGV2KTtcXG4gXFx0fVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9odztcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICB3NTEwMF9kZXRlY3RfbGluayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVJRRl9UUklHR0VSX1JJU0lORyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJ3NTEwMC1saW5rXFxcIiwgcHJpdi1cXHUwMDNlbmRldik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9saW5rX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVnaXN0ZXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9yZWdpc3RlcjpcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGZyZWVfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcXG4rZXJyX2xpbmtfaXJxOlxcbitcXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbiBlcnJfaHc6XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXFx1MDAzZXhmZXJfd3EpO1xcbiBlcnJfd3E6XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbi1lcnJfcmVnaXN0ZXI6XFxuIFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTgyMCw2ICs5MDIsMTMgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRmcmVlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSwgbmRldik7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWxpbmtfaXJxID0gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4gXFx0dzUxMDBfaHdfcmVzZXQocHJpdik7XFxuIFxcdGZyZWVfaXJxKHByaXYtXFx1MDAzZWlycSwgbmRldik7XFxuIFxcbkBAIC04MjcsNyArOTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRmbHVzaF93b3JrKFxcdTAwMjZwcml2LVxcdTAwM2VyZXN0YXJ0X3dvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVxcdTAwM2V4ZmVyX3dxKTtcXG4gXFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbiBcXHRmcmVlX25ldGRldihuZGV2KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9yZW1vdmUpO1xcbkBAIC04MzksNiArOTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRkaXNhYmxlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSk7XFxuK1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcXG4gXFxuQEAgLTg1Nyw2ICs5NDgsMTIgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRcXHR3NTEwMF9od19zdGFydChwcml2KTtcXG4gXFxuIFxcdFxcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0ZW5hYmxlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSk7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowOC4yNjM4NzUwODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDQ2NDkxNTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0MTlkYTI5NTg4MDFlZGRlMDY5Y2NiMjUyOTNhYmI5MWFkNGU5OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMDowNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODFmNDM4MmViOTZjNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxuQEAgLTAsMCArMSw5MSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcbitcbittYWludGFpbmVyczpcbisgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cbitcbithbGxPZjpcbisgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbisgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSB3aXpuZXQsdzU1MDBcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgaW50ZXJydXB0czpcbisgICAgICAgICAgbWluSXRlbXM6IDFcbisgICAgICAgICAgaXRlbXM6XG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgICAgICAgT3B0aW9uYWwgaW50ZXJydXB0IGZvciBsaW5rIHN0YXR1cyBjaGFuZ2VzIChMSU5LTEVEIHBpbiBvblxuKyAgICAgICAgICAgICAgICB3NTUwMCkuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSB3aXpuZXQsdzUxMDBcbisgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGludGVycnVwdHM6XG4rICAgICAgICAgIGl0ZW1zOlxuKyAgICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1haW4gaW50ZXJydXB0IChJTlQgcGluIG9uIHRoZSBkZXZpY2UpLlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gd2l6bmV0LHc1MTAwXG4rICAgICAgLSB3aXpuZXQsdzUyMDBcbisgICAgICAtIHdpem5ldCx3NTUwMFxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgc3BpLW1heC1mcmVxdWVuY3k6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeixcbisgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4rICAgIG1heGltdW06IDgwMDAwMDAwXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIGludGVycnVwdHNcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi9cbitcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcdTAwM2VcbitcbisgICAgc3BpIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0QDAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIndpem5ldCx3NTUwMFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcdTAwM2U7XG4rICAgICAgICAgICAgc3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbisgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbisgICAgICAgIH07XG4rICAgIH07XG4rLi4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsNTAgKzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcIndpem5ldCx3NTEwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTIwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTUwMFwiXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuLVx0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4tXHRcdGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZncGlvXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuLVx0XHRzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuLVx0fTtcbi19O1xuLVxuLVx1MDAyNmdwaW8ge1xuLVx0ZXRoMV9waW5zOiBldGgxX3BpbnMge1xuLVx0XHRicmNtLHBpbnMgPSBcdTAwM2MyNVx1MDAzZTtcbi1cdFx0YnJjbSxmdW5jdGlvbiA9IFx1MDAzYzBcdTAwM2U7IC8qIGluICovXG4tXHRcdGJyY20scHVsbCA9IFx1MDAzYzBcdTAwM2U7IC8qIG5vbmUgKi9cbi1cdH07XG4tfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5pbmRleCA1M2Q4ZGM2NDJmYmQ2Li5iNTk3NmQ1ZTZjNjBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ3NTEwMC5oXCJcbkBAIC0xMjQsNiArMTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gICovXG4gI2RlZmluZSBXNTUwMF9TSU1SXHRcdDB4MDAxOCAvKiBTb2NrZXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi9cbiAjZGVmaW5lIFc1NTAwX1JUUlx0XHQweDAwMTkgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xuKyNkZWZpbmUgVzU1MDBfUEhZQ0ZHUlx0XHQweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbisjZGVmaW5lICAgUEhZQ0ZHUl9MTktcdFx0ICAweDAxIC8qIExpbmsgc3RhdHVzICovXG4gXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXHRcdDB4MTAwMDBcbiBcbkBAIC0xNTQsNiArMTU3LDcgQEAgc3RydWN0IHc1MTAwX3ByaXYge1xuIFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xuIFxuIFx0aW50IGlycTtcbitcdGludCBsaW5rX2lycTtcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtMzQ1LDYgKzM0OSwyMCBAQCBzdGF0aWMgdm9pZCB3NTUwMF9tZW1vcnlfY29uZmlndXJlKHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IHc1NTAwX2dldF9waHljZmdyX2xuayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdG5ldGlmX2Vycihwcml2LCBsaW5rLCBuZGV2LFxuK1x0XHRcdCAgXCJmYWlsZWQgdG8gcmVhZCBsaW5rIHN0YXR1czogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0IFx1MDAyNiBQSFlDRkdSX0xOSztcbit9XG4rXG4gc3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgcnRyO1xuQEAgLTQxNCw2ICs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgdzUxMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkID09IFc1NTAwKVxuK1x0XHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgKzY0NCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbitcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwibGluayBpcyB1cFxcblwiKTtcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCJsaW5rIGlzIGRvd25cXG5cIik7XG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgKzcwNSwxNSBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbitcdFx0ZW5hYmxlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxKTtcbitcbitcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjY3LDYgKzcyMiwxMCBAQCBzdGF0aWMgaW50IHc1MTAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuIFx0bmV0aWZfaW5mbyhwcml2LCBpZmRvd24sIG5kZXYsIFwic2h1dHRpbmcgZG93blxcblwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbitcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4gXHR3NTEwMF9od19jbG9zZShwcml2KTtcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xuIFx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbkBAIC02NzgsNiArNzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfZHJ2aW5mb1x0XHQ9IHc1MTAwX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXG4rXHQuZ2V0X2xpbmtcdFx0PSB3NTEwMF9nZXRfbGluayxcbiBcdC5nZXRfcmVnc19sZW5cdFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0PSB3NTEwMF9nZXRfcmVncyxcbiB9O1xuQEAgLTc0NSwxMyArODA1LDIxIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbitcdFx0Z290byBlcnJfd3E7XG4gXHR9XG4gXG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gXHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiBcbitcdHByaXYtXHUwMDNlbGlua19pcnEgPSBvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XG4rXHRcdFx0IGZ3bm9kZV9pcnFfZ2V0KGRldl9md25vZGUoZGV2KSwgMSkgOiAtRU5PREVWO1xuK1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuK1x0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgcHJpdi1cdTAwM2VsaW5rX2lycSxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBnZXQgbGluayBpcnFcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3dxO1xuK1x0fVxuK1xuIFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcbiBcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcdTAwMjZwcml2LVx1MDAzZW5hcGksIHc1MTAwX25hcGlfcG9sbCwgMTYpO1xuQEAgLTc2MSwxMiArODI5LDggQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuIFx0ICovXG4gXHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEO1xuIFxuLVx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuLVx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4tXG4gXHRwcml2LVx1MDAzZXhmZXJfd3EgPSBhbGxvY193b3JrcXVldWUoXCIlc1wiLCBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCxcbi1cdFx0XHRcdFx0bmV0ZGV2X25hbWUobmRldikpO1xuK1x0XHRcdFx0XHRkZXZfbmFtZShkZXYpKTtcbiBcdGlmICghcHJpdi1cdTAwM2V4ZmVyX3dxKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX3dxO1xuQEAgLTc5NSwyMSArODU5LDM5IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdGlmIChvcHMtXHUwMDNlbWF5X3NsZWVwKSB7XG4gXHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXG4gXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4tXHRcdFx0XHRcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcbitcdFx0XHRcdFx0ICAgZGV2X25hbWUoZGV2KSwgbmRldik7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSByZXF1ZXN0X2lycShwcml2LVx1MDAzZWlycSwgdzUxMDBfaW50ZXJydXB0LFxuLVx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfTE9XLCBuZXRkZXZfbmFtZShuZGV2KSwgbmRldik7XG4rXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9MT1csIGRldl9uYW1lKGRldiksIG5kZXYpO1xuIFx0fVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfaHc7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbitcdFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSwgTlVMTCxcbitcdFx0XHRcdFx0ICAgdzUxMDBfZGV0ZWN0X2xpbmssXG4rXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfFxuK1x0XHRcdFx0XHQgICBJUlFGX1RSSUdHRVJfRkFMTElORyB8XG4rXHRcdFx0XHRcdCAgIElSUUZfT05FU0hPVCB8IElSUUZfTk9fQVVUT0VOLFxuK1x0XHRcdFx0XHQgICBcInc1MTAwLWxpbmtcIiwgcHJpdi1cdTAwM2VuZGV2KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9saW5rX2lycTtcbitcdH1cbitcbitcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZXJyX3JlZ2lzdGVyOlxuK1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuK1x0XHRmcmVlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcbitlcnJfbGlua19pcnE6XG4rXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1lcnJfcmVnaXN0ZXI6XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTgyMCw2ICs5MDIsMTMgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4rXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMCkge1xuK1x0XHRmcmVlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcbitcdFx0cHJpdi1cdTAwM2VsaW5rX2lycSA9IC1FTk9ERVY7XG4rXHR9XG4rXG4gXHR3NTEwMF9od19yZXNldChwcml2KTtcbiBcdGZyZWVfaXJxKHByaXYtXHUwMDNlaXJxLCBuZGV2KTtcbiBcbkBAIC04MjcsNyArOTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0Zmx1c2hfd29yayhcdTAwMjZwcml2LVx1MDAzZXJlc3RhcnRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVx1MDAzZXhmZXJfd3EpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTtcbkBAIC04MzksNiArOTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApXG4rXHRcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xuIFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpO1xuIFxuQEAgLTg1Nyw2ICs5NDgsMTIgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuK1x0XHRcdGVuYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MDguMjYzODc2NTI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0ODg2NTAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIFdpem5ldCBXNTUwMCBTUEkgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBsaW5rIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGUgV2l6bmV0IFc1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLiBJdCB0b3VjaGVzIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucyBpbiBgdzUxMDAuY2AsIGluY2x1ZGluZyBhbiBJUlEgaGFuZGxlciBhbmQgbW9kaWZpY2F0aW9ucyB0byBwcm9iZSwgb3BlbiwgY2xvc2UsIGFuZCBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuIGZ1enphYmxlLCBnaXZlbiB0aGF0IGl0J3MgYW4gU1BJLWJhc2VkIGRyaXZlci5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gU1BJIGRldmljZXMgY2FuIGJlIGEgcmVhbCBwYWluIHRvIGVtdWxhdGUsIHVubGlrZSBzb21ldGhpbmcgbGlrZSBVU0Igb3IgbmV0d29ya2luZyB0aGF0IGhhcyBtb3JlIG1hdHVyZSBlbXVsYXRpb24gc3VwcG9ydC4gSSBrbm93IFFFTVUgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIHRoZSBXaXpuZXQgY2hpcHMsIHNvIHRoYXQncyBhIGh1cmRsZS4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhlcmUncyBzb21lIGNsZXZlciBzb2Z0d2FyZSBlbXVsYXRpb24gdHJpY2sgSSBjb3VsZCB1c2UsIGJ1dCByZWFsaXN0aWNhbGx5LCBTUEkgZHJpdmVycyBhcmUgb2Z0ZW4gaW5oZXJlbnRseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgYW55IG9mIHRoZSBuZXcgY29kZSBwYXRocy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBTUEkgZGV2aWNlIGF0IGFsbCBpbiBRRU1VPyBUaGVyZSBtaWdodCBiZSBzb21lIHNvcnQgb2YgU1BJIGNvbnRyb2xsZXIgZW11bGF0aW9uLCBidXQgbm90IGEgVzU1MDAuIENhbiBJIGNyZWF0ZSBpdCB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzeXNmcz8gRXZlbiBpZiBJIGNhbiBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgdGhlIGRyaXZlciB3aWxsIHRyeSB0byByZWFkIGFuZCB3cml0ZSB0byB0aGUgaGFyZHdhcmUgdmlhIFNQSSBtZXNzYWdlcyBsaWtlIGB3NTEwMF9yZWFkYCBhbmQgYHc1MTAwX3dyaXRlYC4gSWYgdGhlcmUncyBubyBhY3R1YWwgVzU1MDAgaGFyZHdhcmUgcHJlc2VudCwgdGhvc2UgY2FsbHMgd2lsbCBpbmV2aXRhYmx5IGZhaWwsIGFuZCB0aGUgcHJvYmUgd2lsbCBsaWtlbHkgZXJyb3Igb3V0LlxuXG5JIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgcHJvYmUgZmFpbHMuIFNwZWNpZmljYWxseSwgbG9va2luZyBhdCBgdzUxMDBfcHJvYmVgIGFuZCBgdzUxMDBfaHdfcmVzZXRgLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbWV0aG9kcyBleHBlY3QgdG8gZ2V0IGEgcmVzcG9uc2UuIEknbSBnb2luZyB0byBsb29rIGF0IHRob3NlIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNgIHRvIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBmbG93IGFuZCB3aGVyZSB0aGluZ3MgbWlnaHQgZmFpbC4gSSdtIGxvb2tpbmcgZm9yIGFueSBhc3N1bXB0aW9ucyBhYm91dCBoYXJkd2FyZSByZXNwb25zZXMgb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggYSBwaHlzaWNhbCBTUEkgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguNzUyNTI5NDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjY3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInc1MTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2MD1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc2MjppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYzLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4OTg6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguODA1MjAxNzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NzExNzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHc1MTAwX3Byb2JlYCBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgdGhpcyBpcyBhIHByb2Jpbmcgcm91dGluZSwgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ2QgZXhwZWN0IGl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgaW5pdGlhbGl6ZSBhbiBXNTEwMCBjaGlwLCBvciBhIGNvbXBhdGlibGUgZGV2aWNlLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIGNoZWNrcyBpdCBwZXJmb3Jtcy4gRG9lcyBpdCB1c2UgYSBoYXJkLWNvZGVkIHJlZ2lzdGVyIGFkZHJlc3MgbWFwLCBvciBkb2VzIGl0IGF0dGVtcHQgYW55IGF1dG8tZGV0ZWN0aW9uIG1ldGhvZHM/IElzIGl0IGxvb2tpbmcgZm9yIHNwZWNpZmljIHNpZ25hdHVyZSB2YWx1ZXMgaW4gY2VydGFpbiByZWdpc3RlcnM/XG5cbioqRGl2aW5nIGludG8gYHc1MTAwX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhbiBpbml0aWFsaXphdGlvbiBhbmQgZGV0ZWN0aW9uIHJvdXRpbmUgZm9yIGEgVzUxMDAgRXRoZXJuZXQgY29udHJvbGxlciwgb3IgYSBjb21wb25lbnQgY29tcGF0aWJsZSB3aXRoIGl0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MuIElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLCBwb2tpbmcgc3BlY2lmaWMgcmVnaXN0ZXJzIGtub3duIHRvIHRoZSBXNTEwMCBmb3IgaWRlbnRpZmljYXRpb24/IE9yIGlzIGl0IGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoLCBwb3NzaWJseSBpbnZvbHZpbmcgYW4gYXV0b25lZ290aWF0aW9uIGF0dGVtcHQsIHBlcmhhcHMgdXNpbmcgYSBzcGVjaWFsaXplZCBJMkMgb3IgU1BJIGludGVyZmFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWV0aG9kb2xvZ3kuIEkgbmVlZCB0byBrbm93OiBEb2VzIGl0IHJlbHkgb24gYSBoYXJkLWNvZGVkIG1lbW9yeSBtYXA/IElmIHNvLCB3aGF0IGFyZSB0aGUgc3RhcnRpbmcgYWRkcmVzc2VzIGFuZCByZWdpc3RlcnMgaXQncyBwcm9iaW5nPyBBbHRlcm5hdGl2ZWx5LCBpcyB0aGVyZSBhbiBhdXRvLWRldGVjdGlvbiBlbGVtZW50IGludm9sdmVkPyBEb2VzIGl0IGxvb2sgZm9yIHNwZWNpZmljIFwibWFnaWMgbnVtYmVyc1wiIG9yIHNpZ25hdHVyZSB2YWx1ZXMgaW4gcGFydGljdWxhciByZWdpc3RlcnMgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYSBXNTEwMCBjaGlwIGFuZCBpdHMgc3BlY2lmaWMgcmV2aXNpb24/IEkgd2FudCB0byBzZWUgdGhlIGRldGFpbHMgb2YgaXRzIG1ldGhvZG9sb2d5LCBob3cgcm9idXN0IGl0IGlzIGFnYWluc3QgZGlmZmVyZW50IHJldmlzaW9ucyBvZiB0aGUgVzUxMDAgb3IgcG90ZW50aWFsIGNsb25lcywgYW5kIHdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcyBpdCBlbXBsb3lzLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcHJvYmUgcm91dGluZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjIzLjA3MjMyMjQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYyOlxcdGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG4gNzYzOlxcdFxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXY7XFxuIDc2NjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gNzY3OlxcdFxcdGludCBlcnI7XFxuIDc2ODpcXHRcXHRzaXplX3QgYWxsb2Nfc2l6ZTtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0YWxsb2Nfc2l6ZSA9IHNpemVvZigqcHJpdik7XFxuIDc3MTpcXHRcXHRpZiAoc2l6ZW9mX29wc19wcml2KSB7XFxuIDc3MjpcXHRcXHRcXHRhbGxvY19zaXplID0gQUxJR04oYWxsb2Nfc2l6ZSwgTkVUREVWX0FMSUdOKTtcXG4gNzczOlxcdFxcdFxcdGFsbG9jX3NpemUgKz0gc2l6ZW9mX29wc19wcml2O1xcbiA3NzQ6XFx0XFx0fVxcbiA3NzU6XFx0XFx0YWxsb2Nfc2l6ZSArPSBORVRERVZfQUxJR04gLSAxO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoYWxsb2Nfc2l6ZSk7XFxuIDc3ODpcXHRcXHRpZiAoIW5kZXYpXFxuIDc3OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzgwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XFxuIDc4MTpcXHRcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTtcXG4gNzgyOlxcdFxcdHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0c3dpdGNoIChvcHMtXFx1MDAzZWNoaXBfaWQpIHtcXG4gNzg1OlxcdFxcdGNhc2UgVzUxMDA6XFxuIDc4NjpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yZWdzID0gVzUxMDBfUzBfUkVHUztcXG4gNzg3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3R4X2J1ZiA9IFc1MTAwX1RYX01FTV9TVEFSVDtcXG4gNzg4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3R4X2J1Zl9zaXplID0gVzUxMDBfVFhfTUVNX1NJWkU7XFxuIDc4OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yeF9idWYgPSBXNTEwMF9SWF9NRU1fU1RBUlQ7XFxuIDc5MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yeF9idWZfc2l6ZSA9IFc1MTAwX1JYX01FTV9TSVpFO1xcbiA3OTE6XFx0XFx0XFx0YnJlYWs7XFxuIDc5MjpcXHRcXHRjYXNlIFc1MjAwOlxcbiA3OTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcmVncyA9IFc1MjAwX1MwX1JFR1M7XFxuIDc5NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF90eF9idWYgPSBXNTIwMF9UWF9NRU1fU1RBUlQ7XFxuIDc5NTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF90eF9idWZfc2l6ZSA9IFc1MjAwX1RYX01FTV9TSVpFO1xcbiA3OTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcnhfYnVmID0gVzUyMDBfUlhfTUVNX1NUQVJUO1xcbiA3OTc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcnhfYnVmX3NpemUgPSBXNTIwMF9SWF9NRU1fU0laRTtcXG4gNzk4OlxcdFxcdFxcdGJyZWFrO1xcbiA3OTk6XFx0XFx0Y2FzZSBXNTUwMDpcXG4gODAwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3JlZ3MgPSBXNTUwMF9TMF9SRUdTO1xcbiA4MDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfdHhfYnVmID0gVzU1MDBfVFhfTUVNX1NUQVJUO1xcbiA4MDI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfdHhfYnVmX3NpemUgPSBXNTUwMF9UWF9NRU1fU0laRTtcXG4gODAzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3J4X2J1ZiA9IFc1NTAwX1JYX01FTV9TVEFSVDtcXG4gODA0OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3J4X2J1Zl9zaXplID0gVzU1MDBfUlhfTUVNX1NJWkU7XFxuIDgwNTpcXHRcXHRcXHRicmVhaztcXG4gODA2OlxcdFxcdGRlZmF1bHQ6XFxuIDgwNzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MDg6XFx0XFx0XFx0Z290byBlcnJfd3E7XFxuIDgwOTpcXHRcXHR9XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdHByaXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiA4MTI6XFx0XFx0cHJpdi1cXHUwMDNlb3BzID0gb3BzO1xcbiA4MTM6XFx0XFx0cHJpdi1cXHUwMDNlaXJxID0gaXJxO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRwcml2LVxcdTAwM2VsaW5rX2lycSA9IG9wcy1cXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XFxuIDgxNjpcXHRcXHRcXHRcXHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XFxuIDgxNzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xcbiA4MTg6XFx0XFx0XFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIHByaXYtXFx1MDAzZWxpbmtfaXJxLFxcbiA4MTk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxcXG5cXFwiKTtcXG4gODIwOlxcdFxcdFxcdGdvdG8gZXJyX3dxO1xcbiA4MjE6XFx0XFx0fVxcbiA4MjI6XFx0XFxuIDgyMzpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XFxuIDgyNDpcXHRcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcXG4gODI1OlxcdFxcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdC8qIFRoaXMgY2hpcCBkb2Vzbid0IHN1cHBvcnQgVkxBTiBwYWNrZXRzIHdpdGggbm9ybWFsIE1UVSxcXG4gODI4OlxcdFxcdCAqIHNvIGRpc2FibGUgVkxBTiBmb3IgdGhpcyBkZXZpY2UuXFxuIDgyOTpcXHRcXHQgKi9cXG4gODMwOlxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEO1xcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRwcml2LVxcdTAwM2V4ZmVyX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc1xcXCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwLFxcbiA4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoZGV2KSk7XFxuIDgzNDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXhmZXJfd3EpIHtcXG4gODM1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDgzNjpcXHRcXHRcXHRnb3RvIGVycl93cTtcXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyeF93b3JrLCB3NTEwMF9yeF93b3JrKTtcXG4gODQwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfd29yaywgdzUxMDBfdHhfd29yayk7XFxuIDg0MTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXNldHJ4X3dvcmssIHc1MTAwX3NldHJ4X3dvcmspO1xcbiA4NDI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyZXN0YXJ0X3dvcmssIHc1MTAwX3Jlc3RhcnRfd29yayk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChtYWNfYWRkcilcXG4gODQ1OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XFxuIDg0NjpcXHRcXHRlbHNlXFxuIDg0NzpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmRldik7XFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdGlmIChwcml2LVxcdTAwM2VvcHMtXFx1MDAzZWluaXQpIHtcXG4gODUwOlxcdFxcdFxcdGVyciA9IHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdChwcml2LVxcdTAwM2VuZGV2KTtcXG4gODUxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDg1MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9odztcXG4gODUzOlxcdFxcdH1cXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0ZXJyID0gdzUxMDBfaHdfcmVzZXQocHJpdik7XFxuIDg1NjpcXHRcXHRpZiAoZXJyKVxcbiA4NTc6XFx0XFx0XFx0Z290byBlcnJfaHc7XFxuIDg1ODpcXHRcXG4gODU5OlxcdFxcdGlmIChvcHMtXFx1MDAzZW1heV9zbGVlcCkge1xcbiA4NjA6XFx0XFx0XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXFxuIDg2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDoyMy4wNzI0NDgyMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgyNDY1ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFc1MTAwIFJlc2V0IFNlcXVlbmNlKipcblxuT2theSwgc28gYHc1MTAwX3Byb2JlYCBpcyBraWNraW5nIG9mZiB0aGUgaW5pdGlhbGl6YXRpb24uIEludGVyZXN0aW5nLiBJdCdzIGNhbGxpbmcgYHc1MTAwX2h3X3Jlc2V0KHByaXYpYC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSByZXNldCBzZXF1ZW5jZS4gVGhhdCdzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIExldCdzIGRpZyBpbnRvIHRoYXQgYHc1MTAwX2h3X3Jlc2V0YCBmdW5jdGlvbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nLiBXaGF0IHBpbnMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgdGltaW5nIHJlcXVpcmVtZW50cz8gSXMgaXQgdXNpbmcgYSBkZWRpY2F0ZWQgcmVzZXQgbGluZSwgb3IgaXMgaXQgYSBwb3dlci1jeWNsZSBzdHlsZSByZXNldD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBoYXJkd2FyZSByZXNldCBwcm9jZXNzIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9iZSByb3V0aW5lLiBLbm93aW5nIGhvdyB0aGUgY2hpcCBpcyBicm91Z2h0IHRvIGEga25vd24gc3RhdGUgaXMgZnVuZGFtZW50YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDoyNi4zNTQ5MTYyODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMzY1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfaHdfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzUyPXN0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjM2NjpzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTM2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz00NzU9c3RhdGljIHZvaWQgdzUxMDBfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ3OS1cXHRuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjQ4MDpcXHR3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy00ODEtXFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjI9aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg1NTpcXHRlcnIgPSB3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04NTYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTkwMD12b2lkIHc1MTAwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTEyOlxcdHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTkxMy1cXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9OTQxPXN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTk0Ni1cXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjk0NzpcXHRcXHR3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05NDgtXFx0XFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjI2LjQyODE1Nzg3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODI3MjQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlc2V0IFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgdzUxMDBfaHdfcmVzZXRgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGhhcmR3YXJlIHJlc2V0IHNlcXVlbmNlIGltcGxlbWVudGVkIGZvciB0aGUgVzUxMDAuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2lnbmFscyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRpZWQgdG8gdGhlIHJlc2V0IHBpbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aW1pbmcgZGlhZ3JhbXMgb3IgYW55IGNvZGUgc25pcHBldHMgdGhhdCBkZWZpbmUgdGhlIGNyaXRpY2FsIGRlbGF5cyBhbmQgc2lnbmFsIHRyYW5zaXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9wZXIgcmVzZXQgdGltaW5nIGlzIGNydWNpYWw7IGluY29ycmVjdCBzZXF1ZW5jaW5nIGNhbiBsZWFkIHRvIGludGVybWl0dGVudCBpc3N1ZXMgb3IsIHdvcnNlLCBjb21wbGV0ZSBmYWlsdXJlIHRvIGluaXRpYWxpemUgdGhlIFc1MTAwIHByb3Blcmx5LiBJJ2xsIGJlIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBhIHN0YWJsZSByZXNldC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQ/IEknbGwgYWxzbyBjaGVjayBpZiB0aGUgY29kZSBwcm92aWRlcyBmb3IgYW55IGRlYm91bmNpbmcgb2YgdGhlIHJlc2V0IHNpZ25hbCBpZiBpdCBpcyBhIG1hbnVhbCBzd2l0Y2guIEtub3dpbmcgaG93IHRoZSByZXNldCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDAyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzAuMDEwODg2ODYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjY6XFx0c3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHUzMiBydHI7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHc1MTAwX3Jlc2V0KHByaXYpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHR3NTEwMF9kaXNhYmxlX2ludHIocHJpdik7XFxuIDM3MzpcXHRcXHR3NTEwMF93cml0ZV9tYWNhZGRyKHByaXYpO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCkge1xcbiAzNzY6XFx0XFx0Y2FzZSBXNTEwMDpcXG4gMzc3OlxcdFxcdFxcdHc1MTAwX21lbW9yeV9jb25maWd1cmUocHJpdik7XFxuIDM3ODpcXHRcXHRcXHRydHIgPSBXNTEwMF9SVFI7XFxuIDM3OTpcXHRcXHRcXHRicmVhaztcXG4gMzgwOlxcdFxcdGNhc2UgVzUyMDA6XFxuIDM4MTpcXHRcXHRcXHR3NTIwMF9tZW1vcnlfY29uZmlndXJlKHByaXYpO1xcbiAzODI6XFx0XFx0XFx0cnRyID0gVzUxMDBfUlRSO1xcbiAzODM6XFx0XFx0XFx0YnJlYWs7XFxuIDM4NDpcXHRcXHRjYXNlIFc1NTAwOlxcbiAzODU6XFx0XFx0XFx0dzU1MDBfbWVtb3J5X2NvbmZpZ3VyZShwcml2KTtcXG4gMzg2OlxcdFxcdFxcdHJ0ciA9IFc1NTAwX1JUUjtcXG4gMzg3OlxcdFxcdFxcdGJyZWFrO1xcbiAzODg6XFx0XFx0ZGVmYXVsdDpcXG4gMzg5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTA6XFx0XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0cmV0dXJuIDA7XFxuIDM5NjpcXHR9XFxuIDM5NzpcXHRcXG4gMzk4OlxcdHN0YXRpYyB2b2lkIHc1MTAwX2h3X3N0YXJ0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTggbW9kZSA9IFMwX01SX01BQ1JBVztcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vwcm9taXNjKSB7XFxuIDQwMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkID09IFc1NTAwKVxcbiA0MDQ6XFx0XFx0XFx0XFx0bW9kZSB8PSBXNTUwMF9TMF9NUl9NRjtcXG4gNDA1OlxcdFxcdFxcdGVsc2VcXG4gNDA2OlxcdFxcdFxcdFxcdG1vZGUgfD0gUzBfTVJfTUY7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdHc1MTAwX3dyaXRlKHByaXYsIFc1MTAwX1MwX01SKHByaXYpLCBtb2RlKTtcXG4gNDEwOlxcdFxcdHc1MTAwX2NvbW1hbmQocHJpdiwgUzBfQ1JfT1BFTik7XFxuIDQxMTpcXHRcXHR3NTEwMF9lbmFibGVfaW50cihwcml2KTtcXG4gNDEyOlxcdH1cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0c3RhdGljIHZvaWQgdzUxMDBfaHdfY2xvc2Uoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXFxuIDQxNTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjMwLjAxMTAwMjAxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYxNjk0NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgSGFyZHdhcmUgQ2hlY2sgYW5kIENvbmZ1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGNvZGUgYW5kIEkgc2VlIHRoaXMgY3J1Y2lhbCBsaW5lOiBgaWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKSByZXR1cm4gLUVOT0RFVjtgLiBSaWdodCBhd2F5LCBpdCdzIGNsZWFyIHRoaXMgaXMgYSBoYXJkd2FyZSBjaGVjay4gVGhlIGRyaXZlciBpcyByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gYSBoYXJkd2FyZSByZWdpc3RlciwgYHJ0cmAsIHVzaW5nIGB3NTEwMF9yZWFkMTZgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZSBoYXJkd2FyZSwgcHJlc3VtYWJseSBhIFc1MTAwIGNoaXAgb3Igc29tZXRoaW5nIHNpbWlsYXIsICptdXN0KiByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSwgYFJUUl9ERUZBVUxUYCwgaW4gdGhhdCByZWdpc3Rlci4gSWYgdGhlIHZhbHVlIGlzbid0IHdoYXQncyBleHBlY3RlZCwgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLCBgLUVOT0RFVmAsIGluZGljYXRpbmcgdGhlIGRldmljZSBpc24ndCBwcmVzZW50IG9yIGlzbid0IHJlc3BvbmRpbmcgY29ycmVjdGx5LiBUaGF0IG1ha2VzIHNlbnNlLCBhIHN0YW5kYXJkIGhhcmR3YXJlIGNoZWNrLlxuXG5CdXQgaGFuZyBvbuKApiBpZiB0aGVyZSdzICpubyogaGFyZHdhcmUgY29ubmVjdGVkLCB3aGF0IHdpbGwgYHc1MTAwX3JlYWQxNmAgbGlrZWx5IHJldHVybj8gUHJvYmFibHkgc29tZXRoaW5nIHByZWRpY3RhYmxlLCBsaWtlIDAgb3IgbWF5YmUgMHhGRkZGLiBFaXRoZXIgb2YgdGhvc2UgdmFsdWVzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogZXF1YWwgYFJUUl9ERUZBVUxUYC4gU28sIHRoZSBjaGVjayBzZWVtcyByb2J1c3QsIGFzc3VtaW5nIHRoZSByZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZ3JhY2VmdWxseS5cblxuSG9sZCBvbiwgd2hhdCBpcyBgUlRSX0RFRkFVTFRgPyBJdCdzIGEgc3ltYm9saWMgY29uc3RhbnQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQsIGFuZCBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgcmVnaXN0ZXIgaXMgc28gZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyByZWdpc3RlciBjb250cm9scyB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgZ29vZCBjaGVjayB0byBwZXJmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzQuNTcyNjk5NzM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVFJfREVGQVVMVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTM1PU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5LSNkZWZpbmUgVzUxMDBfUlRSXFx0XFx0MHgwMDE3IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo5MDojZGVmaW5lICAgUlRSX0RFRkFVTFRcXHRcXHQgIDIwMDAgLyogPTB4MDdkMCAoMjAwMCkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTM2Nj1zdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjM5MjpcXHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkzLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDozNC42MjAwODc0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk5Njc3Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFc1MTAwIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGV4cGVjdGluZyBhIHNwZWNpZmljIGRldmljZSBJRCwgMHgwN2QwLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBgLUVOT0RFVmAsIGluZGljYXRpbmcgYSBmYWlsdXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWxpYWJseSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGZpcnN0IHRob3VnaHQgaXMgUUVNVSwgYnV0IEkga25vdyB0aGF0J3MgcHJvYmFibHkgYSBkZWFkIGVuZCBzaW5jZSBRRU1VIGRvZXNuJ3Qgb2ZmZXIgYW55IFc1MTAwL1c1MjAwL1c1NTAwIGVtdWxhdGlvbi5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsZXZlcmFnaW5nIFN5emthbGxlcj8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIHRvIGluamVjdCBTUEkgcmVzcG9uc2VzPyBJZGVhbGx5LCBJJ2Qgd2FudCBhIGdlbmVyaWMgU1BJIGZ1enplciB0aGF0IGludGVyY2VwdHMgU1BJIGNvbW11bmljYXRpb24gYW5kIHByb3ZpZGVzIHNwb29mZWQgZGF0YS4gU2FkbHksIFN5emthbGxlciBkb2Vzbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LlxuXG5IYW5nIG9uLi4uaXMgdGhpcyBkcml2ZXIgZXZlbiAqb25seSogU1BJPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyIHNvdXJjZS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmNgIG9yIGEgc2ltaWxhciBmaWxlLiBUaGF0J2xsIHRlbGwgbWUgdGhlIGludGVyZmFjZSB0byB0aGUgY2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDEuNDE5NzY5ODg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjQxLjQxOTgzMTE3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkwNzIxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYHc1MTAwLXNwaS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIHRoZSBTUEkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBXNTEwMCBFdGhlcm5ldCBjb250cm9sbGVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGNoaXAgc2VsZWN0LCB0aGUgZGF0YSBmcmFtaW5nLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgYWx3YXlzIHdoZXJlIHRoZSBkZXZpbCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIG1hbmFnaW5nIHRoZSB0aW1pbmcgY29uc3RyYWludHMuIEFyZSB0aGV5IHVzaW5nIERNQT8gSW50ZXJydXB0cz8gT3IgYXJlIHRoZXkgZG9pbmcgZXZlcnl0aGluZyBpbiBhIGJsb2NraW5nIG1hbm5lcj8gSeKAmWxsIGhhdmUgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgYW5kIGVycm9yIGNvZGUgZGVjb2RpbmcuIElzIHRoZXJlIGFueXRoaW5nIHVudXN1YWwsIG9yIGVsZWdhbnQsIGFib3V0IHRoZSB3YXkgdGhleSd2ZSBhcHByb2FjaGVkIHRoZSBTUEkgdHJhbnNhY3Rpb24gc2V0dXA/IEFueSBvcHRpbWl6YXRpb25zPyBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgc2VlIGlmIGl0IGlzIHRocmVhZCBzYWZlLiBJdCBpcyBhbHdheXMgYSBwYWluIHRvIGRlYnVnIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB0b29rIHRob3NlIGNvbmNlcm5zIGludG8gYWNjb3VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDYuMjEwNTU1MTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIFdJWm5ldCBXNTEwMC9XNTIwMC9XNTUwMCBjaGlwLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBBa2lub2J1IE1pdGEgXFx1MDAzY2FraW5vYnUubWl0YUBnbWFpbC5jb21cXHUwMDNlXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogRGF0YXNoZWV0OlxcbiAgIDg6XFx0ICogaHR0cDovL3d3dy53aXpuZXQuY28ua3Ivd3AtY29udGVudC91cGxvYWRzL3dpem5ldGhvbWUvQ2hpcC9XNTEwMC9Eb2N1bWVudC9XNTEwMF9EYXRhc2hlZXRfdjEuMi42LnBkZlxcbiAgIDk6XFx0ICogaHR0cDovL3dpem5ldGhvbWUuY2FmZTI0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MjAwL0RvY3VtZW50cy9XNTIwMF9EU19WMTQwRS5wZGZcXG4gIDEwOlxcdCAqIGh0dHA6Ly93aXp3aWtpLm5ldC93aWtpL2xpYi9leGUvZmV0Y2gucGhwP21lZGlhPXByb2R1Y3RzOnc1NTAwOnc1NTAwX2RzX3YxMDZlXzE0MTIzMC5wZGZcXG4gIDExOlxcdCAqL1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaS9zcGkuaFxcdTAwM2VcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2luY2x1ZGUgXFxcInc1MTAwLmhcXFwiXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgVzUxMDBfU1BJX1dSSVRFX09QQ09ERSAweGYwXFxuICAyNDpcXHQjZGVmaW5lIFc1MTAwX1NQSV9SRUFEX09QQ09ERSAweDBmXFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyKVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0c3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UobmRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuICAyOTpcXHRcXHR1OCBjbWRbM10gPSB7IFc1MTAwX1NQSV9SRUFEX09QQ09ERSwgYWRkciBcXHUwMDNlXFx1MDAzZSA4LCBhZGRyIFxcdTAwMjYgMHhmZiB9O1xcbiAgMzA6XFx0XFx0dTggZGF0YTtcXG4gIDMxOlxcdFxcdGludCByZXQ7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdHJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCBjbWQsIHNpemVvZihjbWQpLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdHJldHVybiByZXQgPyByZXQgOiBkYXRhO1xcbiAgMzY6XFx0fVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgaW50IHc1MTAwX3NwaV93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHU4IGRhdGEpXFxuICAzOTpcXHR7XFxuICA0MDpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4gIDQxOlxcdFxcdHU4IGNtZFs0XSA9IHsgVzUxMDBfU1BJX1dSSVRFX09QQ09ERSwgYWRkciBcXHUwMDNlXFx1MDAzZSA4LCBhZGRyIFxcdTAwMjYgMHhmZiwgZGF0YX07XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgY21kLCBzaXplb2YoY21kKSwgTlVMTCwgMCk7XFxuICA0NDpcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIpXFxuICA0NzpcXHR7XFxuICA0ODpcXHRcXHR1MTYgZGF0YTtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIpO1xcbiAgNTI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNTQ6XFx0XFx0ZGF0YSA9IHJldCBcXHUwMDNjXFx1MDAzYyA4O1xcbiAgNTU6XFx0XFx0cmV0ID0gdzUxMDBfc3BpX3JlYWQobmRldiwgYWRkciArIDEpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gcmV0IFxcdTAwM2MgMCA/IHJldCA6IGRhdGEgfCByZXQ7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlMTYoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyLCB1MTYgZGF0YSlcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdGludCByZXQ7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHJldCA9IHc1MTAwX3NwaV93cml0ZShuZGV2LCBhZGRyLCBkYXRhIFxcdTAwM2VcXHUwMDNlIDgpO1xcbiAgNjU6XFx0XFx0aWYgKHJldClcXG4gIDY2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHJldHVybiB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciArIDEsIGRhdGEgXFx1MDAyNiAweGZmKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0c3RhdGljIGludCB3NTEwMF9zcGlfcmVhZGJ1bGsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyLCB1OCAqYnVmLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdGludCBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspIHtcXG4gIDc3OlxcdFxcdFxcdGludCByZXQgPSB3NTEwMF9zcGlfcmVhZChuZGV2LCBhZGRyICsgaSk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgODA6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDgxOlxcdFxcdFxcdGJ1ZltpXSA9IHJldDtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cmV0dXJuIDA7XFxuICA4NTpcXHR9XFxuICA4NjpcXHRcXG4gIDg3OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIGNvbnN0IHU4ICpidWYsXFxuICA4ODpcXHRcXHRcXHRcXHQgICAgICAgaW50IGxlbilcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGludCBpO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspIHtcXG4gIDkzOlxcdFxcdFxcdGludCByZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciArIGksIGJ1ZltpXSk7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdFxcdGlmIChyZXQpXFxuICA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDYuMjEwNjQxMDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTQwODg4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBtb2R1bGUncyBmdW5jdGlvbiBpcyBzb2xlbHkgYXMgYW4gU1BJIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoYXQncyAqdHJ1bHkqIHRoZSBjYXNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgaXMgaXQgKm9ubHkqIFNQST8gTm93LCBsZXQgbWUgdGhpbmsuLi4gcmlnaHQsIEkgcmVjYWxsIHRoZSBmaWxlIHN0cnVjdHVyZS4uLiBJIHNlZSB0aGF0IGB3NTEwMC5jYCBhcHBlYXJzIHRvIGJlIHRoZSBjZW50cmFsIGNvbXBvbmVudCwgdGhlIGNvcmUgbG9naWMsIHdoaWxlIGB3NTEwMC1zcGkuY2AgKnNwZWNpZmljYWxseSogaW1wbGVtZW50cyB0aGUgU1BJIGludGVyZmFjZS4gVGhhdCdzIGdvb2QuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBmaWxlLCBzYXkgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIGFuIEkyQyBjb21wb25lbnQuIEl0IHdvdWxkIGJlIHZhbHVhYmxlIHRvIGdldCBjb25maXJtYXRpb24gdGhhdCB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgYmVzaWRlcyB0aGUgU1BJIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjUyLjEwNDczMzA0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDcwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzYwPUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjMtXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjUyLjE1MTc1MjAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUwMDkwNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFc1MTAwIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgVzUxMDAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGB3NTEwMC5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGNvcmUgbW9kdWxlLCBsaWtlbHkgY29udGFpbmluZyB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXR5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciB0aGUgVzUxMDAgaXRzZWxmLiBUaGVuIHRoZXJlIGlzIHRoZSBTUEkgZHJpdmVyLiBUaGUgbmFtZSBgdzUxMDAtc3BpLmNgIGluZGljYXRlcyB0aGF0IGl0IGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uLCB3aGljaCB3aWxsIG9idmlvdXNseSBiZSBjcml0aWNhbCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBkZXZpY2UncyByZWdpc3RlcnMuIEJ1dCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkcml2ZXJzIG9yIGFic3RyYWN0aW9uIGxheWVycyBpbiBwbGF5IGhlcmUuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgYXJjaGl0ZWN0dXJlIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCBkZXBlbmRlbmNpZXMgb3IgZW50cnkgcG9pbnRzLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM4NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU2LjYwMTg0NTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU2LjYwMTkwODg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDUxMjIxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgVzUxMDAgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZpbGVzIGZvciB0aGlzIFc1MTAwIGltcGxlbWVudGF0aW9uLiBJIHRob3VnaHQgSSByZWNhbGxlZCBhIGB3NTMwMC5jYCBhdCBzb21lIHBvaW50LCBidXQgbm8sIGFsbCBJJ20gc2VlaW5nIGFyZSB2YXJpYXRpb25zIGZvciB0aGUgVzUxMDAgc3BlY2lmaWNhbGx5OiBgdzUxMDAtc3BpLmNgLCBgdzUxMDAuY2AsIGFuZCB0aGUgaGVhZGVyIGB3NTEwMC5oYC4gQWxyaWdodCwgc28gdGhlcmUncyBhIFNQSSB2ZXJzaW9uIGFuZCBhIHJlZ3VsYXIgb25lLCByZXByZXNlbnRlZCBieSB0aGUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGZpbGVzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIFNQSSB2YXJpYW50IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGVyZSdzIGEgbWVtb3J5LW1hcHBlZCB2ZXJzaW9uLCBvciB3aGV0aGVyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZXhjbHVzaXZlbHkgcmVnaXN0ZXItYmFzZWQuIEl0J3MgdGltZSB0byBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGRpcmVjdG9yeSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MDEuMzQ3MDMzODY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyNzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3NTEwMF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcXHRyZXR1cm4gdzUxMDBfcHJvYmUoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXFx1MDAzZWlycSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NjI6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5Ny19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODk4OkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg6MzE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MDEuMzk2MzY4NDA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjIyNDg2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXaXpuZXQgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0IG1lIHByb2Nlc3MgdGhpcyBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG91dHB1dC4gSSBzZWUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGluIHRoZSByZXN1bHRzLiBJbnRlcmVzdGluZy4gTm93LCBob2xkIG9uLCBJIHRob3VnaHQgSSBhbHNvIHNhdyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYHc1MzAwYD8gTm8sIHdhaXQgYSBtaW51dGUsIHRoZSBhY3R1YWwgb3V0cHV0IGlzIGp1c3Q6IGBGaWxlczogW1widzUxMDAtc3BpLmNcIiwgXCJ3NTEwMC5jXCIsIFwidzUxMDAuaFwiXWAuIFNvLCBubyBgdzUzMDAuY2AgYXBwZWFycyBoZXJlIGFuZCBpdCBjb25maXJtcyB0aGVyZSdzIG5vIG1lbW9yeS1tYXBwZWQgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgdzUxMDAgc3BlY2lmaWNhbGx5IGluICp0aGlzKiBkaXJlY3RvcnkuIExldCdzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrLCBzcGVjaWZpY2FsbHksIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5LCBJIHNob3VsZCBoYXZlIHBhaWQgbW9yZSBhdHRlbnRpb24uIEFoLCByaWdodCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCByZXR1cm5zIGJvdGggYEZpbGVzYCBhbmQgYFN1YmRpcnNgLiBPa2F5LCBhbmQgd2FpdCwgSSAqZGVmaW5pdGVseSogZGlkbid0IHNlZSBgdzUzMDAuY2Agbm93LiBMZXQgbWUgY2hlY2sgdGhlIGRpcmVjdG9yeSBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjA2LjYxODYyMTY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJ3NTEwMC1zcGkuY1wiLFxuICAgIFwidzUxMDAuY1wiLFxuICAgIFwidzUxMDAuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNTowNi42MTg2OTU0NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxMTAwNjI4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFdpem5ldCBXNTEwMCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFuZCBJJ20gc2VlaW5nIG9ubHkgdGhyZWUgZmlsZXMgYWZmZWN0ZWQgaW5pdGlhbGx5LiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGNvZGUgZXZlbiBiZSB0b3VjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyIGV4cGxpY2l0bHkgcmVxdWlyZXMgYW4gU1BJIGRldmljZS4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIFFFTVUgcHJvdmlkZSBhbiBTUEkgZGV2aWNlP1xuXG5JIGtub3cgUUVNVSAqaGFzKiBTUEkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSdzIG5vIGFjdHVhbCBlbXVsYXRpb24gZm9yIHRoZSBXNTEwMCwgVzUyMDAsIG9yIFc1NTAwIGRldmljZXMgdGhlbXNlbHZlcy4gSSBjYW4gY3JlYXRlIGFuIFNQSSBkZXZpY2UgdGhyb3VnaCBhIGRldmljZSB0cmVlIG92ZXJsYXksIHN1cmUsIGJ1dCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gVGhlIGB3NTEwMF9od19yZXNldGAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbC4gSXQgcmVhZHMgYFJUUl9ERUZBVUxUYCAoMjAwMCkgZnJvbSB0aGUgU1BJIGJ1cy4gV2l0aG91dCByZWFsIGhhcmR3YXJlIG9yIGFuIGFjY3VyYXRlIGVtdWxhdG9yLCB0aGUgU1BJIHJlYWQgaXMganVzdCBnb2luZyB0byByZXR1cm4gZ2FyYmFnZSDigJMgbGlrZWx5IDAgb3IgMHhmZmZmIOKAkyBhbmQgdGhlIHByb2JlIHdpbGwgY2hva2Ugd2l0aCBgLUVOT0RFVmAuXG5cblRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsICpuZXZlciogcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkZXZpY2Ugd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGFsbCB0aGUgY29kZSBwYXRocyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIOKAkyBgdzUxMDBfZGV0ZWN0X2xpbmtgLCBgdzUxMDBfb3BlbmAsIGB3NTEwMF9zdG9wYCwgYHc1MTAwX2dldF9saW5rYCDigJMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFRoZXkncmUgYWxsIHByZWRpY2F0ZWQgb24gYSBzdWNjZXNzZnVsIHByb2JlIGFuZCBhIHJlZ2lzdGVyZWQgbmV0d29yayBpbnRlcmZhY2UuIFNpbmNlIHRoZSBwcm9iZSBmYWlscywgdGhleSdyZSBkZWFkIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVzY2FwZSBoYXRjaGVzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMb29raW5nIGF0IGB3NTEwMF9od19yZXNldGAgYWdhaW46XG5cbmBgYGNcblx0aWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKVxuXHRcdHJldHVybiAtRU5PREVWO1xuYGBgXG5cbll1cCwgaXQncyBhIGhhcmQgY2hlY2suIFRoZXJlJ3Mgbm8gc29mdCBmYWlsdXJlIG1vZGUgb3IgY29uZGl0aW9uYWwgYnlwYXNzLiBJcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIFc1MTAwIGluIHRoZSBrZXJuZWw/IE5vLiBBbnkgUUVNVSBlbXVsYXRpb24/IE5vcGUsIFFFTVUncyBnb3Qgbm90aGluZyBmb3IgdGhpcy4gQW5kIHdoYXQgYWJvdXQgU3l6a2FsbGVyPyBEb2VzIGl0IGhhdmUgc29tZSBnZW5lcmljIFNQSSBtb2NraW5nIGZyYW1ld29yayB0aGF0IGNvdWxkIGxldCBtZSByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBzcGVjaWZpYyByZWdpc3Rlcj8gVW5mb3J0dW5hdGVseSwgbm8uXG5cblNvLCB0aGUgZHJpdmVyIGNhbid0IGJlIHByb2JlZCBzdWNjZXNzZnVsbHkuIEknbSBoaXR0aW5nIGEgd2FsbC5cblxuTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBpbnN0cnVjdGlvbnMuIE9rYXksIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgQmluZ28uXG5cblRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDApLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJdCdzIGltcG9zc2libGUgdG8gcmVhY2ggdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyAoYHc1MTAwX2RldGVjdF9saW5rYCwgZXRjLikgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbmNsdWRlIHRoYXQgV29ydGhGdXp6aW5nIHNob3VsZCBiZSBmYWxzZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW5hY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE1OCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjIyLjcyODc2MDU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB0byBhZGQgbGluayBpbnRlcnJ1cHQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciB2ZXJpZmllcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGhhcmR3YXJlIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZSAoUlRSX0RFRkFVTFQpLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGVtdWxhdG9yLCB0aGUgcHJvYmUgd2lsbCBmYWlsLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgdzUxMDBfZGV0ZWN0X2xpbmssIHc1MTAwX29wZW4sIGFuZCB3NTEwMF9zdG9wKSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MjIuNzI4NzkyNTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfg4l[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-13 09:41:36 +0000 UTC FinishedAt: 2026-08-13 10:05:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0NDE5ZGEyOTU4ODAxZWRkZTA2OWNjYjI1MjkzYWJiOTFhZDRlOTkyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDQ6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwLi44MWY0MzgyZWI5NmM1XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5AQCAtMCwwICYjNDM7MSw5MSBAQFxuJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSlcbiYjNDM7JVlBTUwgMS4yXG4mIzQzOy0tLVxuJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC93aXpuZXQsdzUxMDAueWFtbCNcbiYjNDM7JHNjaGVtYTogaHR0cDovL2RldmljZXRyZWUub3JnL21ldGEtc2NoZW1hcy9jb3JlLnlhbWwjXG4mIzQzO1xuJiM0Mzt0aXRsZTogV2l6bmV0IHc1MTAwL3c1MjAwL3c1NTAwIFNQSSBFdGhlcm5ldCBDb250cm9sbGVyXG4mIzQzO1xuJiM0MzttYWludGFpbmVyczpcbiYjNDM7ICAtIEFydGh1ciBDcsOpcGluIExlYmxvbmQgXHUwMDNjYXJ0aHVyQG1hcm1vdHR1cy5uZXRcdTAwM2VcbiYjNDM7XG4mIzQzO2Rlc2NyaXB0aW9uOiB8XG4mIzQzOyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4mIzQzO1xuJiM0MzthbGxPZjpcbiYjNDM7ICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXG4mIzQzOyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHdpem5ldCx3NTUwMFxuJiM0MzsgICAgdGhlbjpcbiYjNDM7ICAgICAgcHJvcGVydGllczpcbiYjNDM7ICAgICAgICBpbnRlcnJ1cHRzOlxuJiM0MzsgICAgICAgICAgbWluSXRlbXM6IDFcbiYjNDM7ICAgICAgICAgIGl0ZW1zOlxuJiM0MzsgICAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNYWluIGludGVycnVwdCAoSU5UIHBpbiBvbiB0aGUgZGV2aWNlKS5cbiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcbiYjNDM7ICAgICAgICAgICAgICAgIE9wdGlvbmFsIGludGVycnVwdCBmb3IgbGluayBzdGF0dXMgY2hhbmdlcyAoTElOS0xFRCBwaW4gb25cbiYjNDM7ICAgICAgICAgICAgICAgIHc1NTAwKS5cbiYjNDM7ICAtIGlmOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGNvbXBhdGlibGU6XG4mIzQzOyAgICAgICAgICBjb250YWluczpcbiYjNDM7ICAgICAgICAgICAgZW51bTpcbiYjNDM7ICAgICAgICAgICAgICAtIHdpem5ldCx3NTEwMFxuJiM0MzsgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXG4mIzQzOyAgICB0aGVuOlxuJiM0MzsgICAgICBwcm9wZXJ0aWVzOlxuJiM0MzsgICAgICAgIGludGVycnVwdHM6XG4mIzQzOyAgICAgICAgICBpdGVtczpcbiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXG4mIzQzO1xuJiM0Mztwcm9wZXJ0aWVzOlxuJiM0MzsgIGNvbXBhdGlibGU6XG4mIzQzOyAgICBlbnVtOlxuJiM0MzsgICAgICAtIHdpem5ldCx3NTEwMFxuJiM0MzsgICAgICAtIHdpem5ldCx3NTIwMFxuJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMFxuJiM0MztcbiYjNDM7ICByZWc6XG4mIzQzOyAgICBtYXhJdGVtczogMVxuJiM0MztcbiYjNDM7ICBzcGktbWF4LWZyZXF1ZW5jeTpcbiYjNDM7ICAgIGRlc2NyaXB0aW9uOlxuJiM0MzsgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosXG4mIzQzOyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cbiYjNDM7ICAgIG1heGltdW06IDgwMDAwMDAwXG4mIzQzO1xuJiM0MztyZXF1aXJlZDpcbiYjNDM7ICAtIGNvbXBhdGlibGVcbiYjNDM7ICAtIHJlZ1xuJiM0MzsgIC0gaW50ZXJydXB0c1xuJiM0MztcbiYjNDM7dW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxuJiM0MztcbiYjNDM7ZXhhbXBsZXM6XG4mIzQzOyAgLSB8XG4mIzQzOyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xuJiM0MztcbiYjNDM7ICAgICNpbmNsdWRlIFx1MDAzY2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oXHUwMDNlXG4mIzQzO1xuJiM0MzsgICAgc3BpIHtcbiYjNDM7ICAgICAgICAjYWRkcmVzcy1jZWxscyA9IFx1MDAzYzFcdTAwM2U7XG4mIzQzOyAgICAgICAgI3NpemUtY2VsbHMgPSBcdTAwM2MwXHUwMDNlO1xuJiM0MztcbiYjNDM7ICAgICAgICBldGhlcm5ldEAwIHtcbiYjNDM7ICAgICAgICAgICAgY29tcGF0aWJsZSA9IFwmIzM0O3dpem5ldCx3NTUwMFwmIzM0OztcbiYjNDM7ICAgICAgICAgICAgcmVnID0gXHUwMDNjMFx1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9IFwmIzM0O2RlZmF1bHRcJiMzNDs7XG4mIzQzOyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFx1MDAzY1x1MDAyNmdwaW9cdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGludGVycnVwdHMgPSBcdTAwM2MyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkdcdTAwM2UsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIHNwaS1tYXgtZnJlcXVlbmN5ID0gXHUwMDNjMzAwMDAwMDBcdTAwM2U7XG4mIzQzOyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xuJiM0MzsgICAgICAgIH07XG4mIzQzOyAgICB9O1xuJiM0MzsuLi5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NXgwMC50eHQgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NXgwMC50eHRcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG4mIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsXG5AQCAtMSw1MCAmIzQzOzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcJiMzNDt3aXpuZXQsdzUxMDBcJiMzNDtcbi1cdCAgICAgIFwmIzM0O3dpem5ldCx3NTIwMFwmIzM0O1xuLVx0ICAgICAgXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7XG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCYjMzQ7d2l6bmV0LHc1NTAwXCYjMzQ7O1xuLVx0XHRyZWcgPSBcdTAwM2MwXHUwMDNlO1xuLVx0XHRwaW5jdHJsLW5hbWVzID0gXCYjMzQ7ZGVmYXVsdFwmIzM0Oztcbi1cdFx0cGluY3RybC0wID0gXHUwMDNjXHUwMDI2ZXRoMV9waW5zXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbi1cdFx0aW50ZXJydXB0cyA9IFx1MDAzYzI1IElSUV9UWVBFX0VER0VfRkFMTElOR1x1MDAzZTtcbi1cdFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbi1cdH07XG4tfTtcbi1cbi1cdTAwMjZncGlvIHtcbi1cdGV0aDFfcGluczogZXRoMV9waW5zIHtcbi1cdFx0YnJjbSxwaW5zID0gXHUwMDNjMjVcdTAwM2U7XG4tXHRcdGJyY20sZnVuY3Rpb24gPSBcdTAwM2MwXHUwMDNlOyAvKiBpbiAqL1xuLVx0XHRicmNtLHB1bGwgPSBcdTAwM2MwXHUwMDNlOyAvKiBub25lICovXG4tXHR9O1xuLX07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xuQEAgLTIxLDYgJiM0MzsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvcG9ydC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7dzUxMDAuaFwmIzM0O1xuQEAgLTEyNCw2ICYjNDM7MTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbiAgKi9cbiAjZGVmaW5lIFc1NTAwX1NJTVJcdFx0MHgwMDE4IC8qIFNvY2tldCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqL1xuICNkZWZpbmUgVzU1MDBfUlRSXHRcdDB4MDAxOSAvKiBSZXRyeSBUaW1lLXZhbHVlIFJlZ2lzdGVyICovXG4mIzQzOyNkZWZpbmUgVzU1MDBfUEhZQ0ZHUlx0XHQweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbiYjNDM7I2RlZmluZSAgIFBIWUNGR1JfTE5LXHRcdCAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqL1xuIFxuICNkZWZpbmUgVzU1MDBfUzBfUkVHU1x0XHQweDEwMDAwXG4gXG5AQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7XG4gXHR1MTYgczBfcnhfYnVmX3NpemU7XG4gXG4gXHRpbnQgaXJxO1xuJiM0MztcdGludCBsaW5rX2lycTtcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtMzQ1LDYgJiM0MzszNDksMjAgQEAgc3RhdGljIHZvaWQgdzU1MDBfbWVtb3J5X2NvbmZpZ3VyZShzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XHRpbnQgcmV0ID0gdzUxMDBfcmVhZChwcml2LCBXNTUwMF9QSFlDRkdSKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMCkge1xuJiM0MztcdFx0bmV0aWZfZXJyKHByaXYsIGxpbmssIG5kZXYsXG4mIzQzO1x0XHRcdCAgXCYjMzQ7ZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXFxuXCYjMzQ7LCByZXQpO1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0IFx1MDAyNiBQSFlDRkdSX0xOSztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIHtcbiBcdHUzMiBydHI7XG5AQCAtNDE0LDYgJiM0Mzs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDApXG4mIzQzO1x0XHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiB7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuQEAgLTYxNiw2ICYjNDM7NjQ0LDI0IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqbmRldl9pbnN0YW5jZSlcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlO1xuJiM0MztcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XG4mIzQzO1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbiYjNDM7XHRcdFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcJiMzNDtsaW5rIGlzIHVwXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCYjMzQ7bGluayBpcyBkb3duXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgJiM0Mzs3MDUsMTUgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4gXHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUobmRldik7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdGVuYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbiYjNDM7XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4mIzQzO1x0ZWxzZVxuJiM0MztcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTY2Nyw2ICYjNDM7NzIyLDEwIEBAIHN0YXRpYyBpbnQgdzUxMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRuZXRpZl9pbmZvKHByaXYsIGlmZG93biwgbmRldiwgXCYjMzQ7c2h1dHRpbmcgZG93blxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdGRpc2FibGVfaXJxKHByaXYtXHUwMDNlbGlua19pcnEpO1xuJiM0MztcbiBcdHc1MTAwX2h3X2Nsb3NlKHByaXYpO1xuIFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpO1xuQEAgLTY3OCw2ICYjNDM7NzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfZHJ2aW5mb1x0XHQ9IHc1MTAwX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXG4mIzQzO1x0LmdldF9saW5rXHRcdD0gdzUxMDBfZ2V0X2xpbmssXG4gXHQuZ2V0X3JlZ3NfbGVuXHRcdD0gdzUxMDBfZ2V0X3JlZ3NfbGVuLFxuIFx0LmdldF9yZWdzXHRcdD0gdzUxMDBfZ2V0X3JlZ3MsXG4gfTtcbkBAIC03NDUsMTMgJiM0Mzs4MDUsMjEgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuJiM0MztcdFx0Z290byBlcnJfd3E7XG4gXHR9XG4gXG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gXHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiBcbiYjNDM7XHRwcml2LVx1MDAzZWxpbmtfaXJxID0gb3BzLVx1MDAzZWNoaXBfaWQgPT0gVzU1MDAgP1xuJiM0MztcdFx0XHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuJiM0MztcdFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIHByaXYtXHUwMDNlbGlua19pcnEsXG4mIzQzO1x0XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCB0byBnZXQgbGluayBpcnFcXG5cJiMzNDspO1xuJiM0MztcdFx0Z290byBlcnJfd3E7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XG4gXHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XG4gXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHQobmRldiwgXHUwMDI2cHJpdi1cdTAwM2VuYXBpLCB3NTEwMF9uYXBpX3BvbGwsIDE2KTtcbkBAIC03NjEsMTIgJiM0Mzs4MjksOCBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gXHQgKi9cbiBcdG5kZXYtXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7XG4gXG4tXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4tXHRpZiAoZXJyIFx1MDAzYyAwKVxuLVx0XHRnb3RvIGVycl9yZWdpc3Rlcjtcbi1cbiBcdHByaXYtXHUwMDNleGZlcl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc1wmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXG4tXHRcdFx0XHRcdG5ldGRldl9uYW1lKG5kZXYpKTtcbiYjNDM7XHRcdFx0XHRcdGRldl9uYW1lKGRldikpO1xuIFx0aWYgKCFwcml2LVx1MDAzZXhmZXJfd3EpIHtcbiBcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBlcnJfd3E7XG5AQCAtNzk1LDIxICYjNDM7ODU5LDM5IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdGlmIChvcHMtXHUwMDNlbWF5X3NsZWVwKSB7XG4gXHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXG4gXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4tXHRcdFx0XHRcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcbiYjNDM7XHRcdFx0XHRcdCAgIGRldl9uYW1lKGRldiksIG5kZXYpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZXJyID0gcmVxdWVzdF9pcnEocHJpdi1cdTAwM2VpcnEsIHc1MTAwX2ludGVycnVwdCxcbi1cdFx0XHRcdCAgSVJRRl9UUklHR0VSX0xPVywgbmV0ZGV2X25hbWUobmRldiksIG5kZXYpO1xuJiM0MztcdFx0XHRcdCAgSVJRRl9UUklHR0VSX0xPVywgZGV2X25hbWUoZGV2KSwgbmRldik7XG4gXHR9XG4gXHRpZiAoZXJyKVxuIFx0XHRnb3RvIGVycl9odztcbiBcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlbGlua19pcnEsIE5VTEwsXG4mIzQzO1x0XHRcdFx0XHQgICB3NTEwMF9kZXRlY3RfbGluayxcbiYjNDM7XHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfFxuJiM0MztcdFx0XHRcdFx0ICAgSVJRRl9UUklHR0VSX0ZBTExJTkcgfFxuJiM0MztcdFx0XHRcdFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXG4mIzQzO1x0XHRcdFx0XHQgICBcJiMzNDt3NTEwMC1saW5rXCYjMzQ7LCBwcml2LVx1MDAzZW5kZXYpO1xuJiM0MztcdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBlcnJfbGlua19pcnE7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfcmVnaXN0ZXI6XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuJiM0MztcdFx0ZnJlZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSwgbmRldik7XG4mIzQzO2Vycl9saW5rX2lycTpcbiYjNDM7XHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1lcnJfcmVnaXN0ZXI6XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTgyMCw2ICYjNDM7OTAyLDEzIEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuJiM0MztcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbiYjNDM7XHRcdGZyZWVfaXJxKHByaXYtXHUwMDNlbGlua19pcnEsIG5kZXYpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VsaW5rX2lycSA9IC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xuIFx0ZnJlZV9pcnEocHJpdi1cdTAwM2VpcnEsIG5kZXYpO1xuIFxuQEAgLTgyNyw3ICYjNDM7OTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0Zmx1c2hfd29yayhcdTAwMjZwcml2LVx1MDAzZXJlc3RhcnRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVx1MDAzZXhmZXJfd3EpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTtcbkBAIC04MzksNiAmIzQzOzkyNyw5IEBAIHN0YXRpYyBpbnQgdzUxMDBfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuIFx0aWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHtcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4mIzQzO1xuIFx0XHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcbiBcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcbiBcbkBAIC04NTcsNiAmIzQzOzk0OCwxMiBAQCBzdGF0aWMgaW50IHc1MTAwX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xuIFxuIFx0XHRuZXRpZl9kZXZpY2VfYXR0YWNoKG5kZXYpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbiYjNDM7XHRcdFx0ZW5hYmxlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpXG4mIzQzO1x0XHRcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XG4gXHR9XG4gXHRyZXR1cm4gMDtcbiB9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDQxOWRhMjk1ODgwMWVkZGUwNjljY2IyNTI5M2FiYjkxYWQ0ZTk5MgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDEzIDEwOjA0OjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMC4uODFmNDM4MmViOTZjNQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwKQEAgLTAsMCAmIzQzOzEsOTEgQEAKJiM0MzsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiAoR1BMLTIuMC1vbmx5IE9SIEJTRC0yLUNsYXVzZSkKJiM0MzslWUFNTCAxLjIKJiM0MzstLS0KJiM0MzskaWQ6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9zY2hlbWFzL25ldC93aXpuZXQsdzUxMDAueWFtbCMKJiM0Mzskc2NoZW1hOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvbWV0YS1zY2hlbWFzL2NvcmUueWFtbCMKJiM0MzsKJiM0Mzt0aXRsZTogV2l6bmV0IHc1MTAwL3c1MjAwL3c1NTAwIFNQSSBFdGhlcm5ldCBDb250cm9sbGVyCiYjNDM7CiYjNDM7bWFpbnRhaW5lcnM6CiYjNDM7ICAtIEFydGh1ciBDcsOpcGluIExlYmxvbmQgJmx0O2FydGh1ckBtYXJtb3R0dXMubmV0Jmd0OwomIzQzOwomIzQzO2Rlc2NyaXB0aW9uOiB8CiYjNDM7ICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KJiM0MzsKJiM0MzthbGxPZjoKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCMKJiM0MzsgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB3aXpuZXQsdzU1MDAKJiM0MzsgICAgdGhlbjoKJiM0MzsgICAgICBwcm9wZXJ0aWVzOgomIzQzOyAgICAgICAgaW50ZXJydXB0czoKJiM0MzsgICAgICAgICAgbWluSXRlbXM6IDEKJiM0MzsgICAgICAgICAgaXRlbXM6CiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuCiYjNDM7ICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjoKJiM0MzsgICAgICAgICAgICAgICAgT3B0aW9uYWwgaW50ZXJydXB0IGZvciBsaW5rIHN0YXR1cyBjaGFuZ2VzIChMSU5LTEVEIHBpbiBvbgomIzQzOyAgICAgICAgICAgICAgICB3NTUwMCkuCiYjNDM7ICAtIGlmOgomIzQzOyAgICAgIHByb3BlcnRpZXM6CiYjNDM7ICAgICAgICBjb21wYXRpYmxlOgomIzQzOyAgICAgICAgICBjb250YWluczoKJiM0MzsgICAgICAgICAgICBlbnVtOgomIzQzOyAgICAgICAgICAgICAgLSB3aXpuZXQsdzUxMDAKJiM0MzsgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwCiYjNDM7ICAgIHRoZW46CiYjNDM7ICAgICAgcHJvcGVydGllczoKJiM0MzsgICAgICAgIGludGVycnVwdHM6CiYjNDM7ICAgICAgICAgIGl0ZW1zOgomIzQzOyAgICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1haW4gaW50ZXJydXB0IChJTlQgcGluIG9uIHRoZSBkZXZpY2UpLgomIzQzOwomIzQzO3Byb3BlcnRpZXM6CiYjNDM7ICBjb21wYXRpYmxlOgomIzQzOyAgICBlbnVtOgomIzQzOyAgICAgIC0gd2l6bmV0LHc1MTAwCiYjNDM7ICAgICAgLSB3aXpuZXQsdzUyMDAKJiM0MzsgICAgICAtIHdpem5ldCx3NTUwMAomIzQzOwomIzQzOyAgcmVnOgomIzQzOyAgICBtYXhJdGVtczogMQomIzQzOwomIzQzOyAgc3BpLW1heC1mcmVxdWVuY3k6CiYjNDM7ICAgIGRlc2NyaXB0aW9uOgomIzQzOyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeiwKJiM0MzsgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCiYjNDM7ICAgIG1heGltdW06IDgwMDAwMDAwCiYjNDM7CiYjNDM7cmVxdWlyZWQ6CiYjNDM7ICAtIGNvbXBhdGlibGUKJiM0MzsgIC0gcmVnCiYjNDM7ICAtIGludGVycnVwdHMKJiM0MzsKJiM0Mzt1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlCiYjNDM7CiYjNDM7ZXhhbXBsZXM6CiYjNDM7ICAtIHwKJiM0MzsgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi8KJiM0MzsKJiM0MzsgICAgI2luY2x1ZGUgJmx0O2R0LWJpbmRpbmdzL2ludGVycnVwdC1jb250cm9sbGVyL2lycS5oJmd0OwomIzQzOwomIzQzOyAgICBzcGkgewomIzQzOyAgICAgICAgI2FkZHJlc3MtY2VsbHMgPSAmbHQ7MSZndDs7CiYjNDM7ICAgICAgICAjc2l6ZS1jZWxscyA9ICZsdDswJmd0OzsKJiM0MzsKJiM0MzsgICAgICAgIGV0aGVybmV0QDAgewomIzQzOyAgICAgICAgICAgIGNvbXBhdGlibGUgPSAmIzM0O3dpem5ldCx3NTUwMCYjMzQ7OwomIzQzOyAgICAgICAgICAgIHJlZyA9ICZsdDswJmd0OzsKJiM0MzsgICAgICAgICAgICBwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7CiYjNDM7ICAgICAgICAgICAgcGluY3RybC0wID0gJmx0OyZhbXA7ZXRoMV9waW5zJmd0OzsKJiM0MzsgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gJmx0OyZhbXA7Z3BpbyZndDs7CiYjNDM7ICAgICAgICAgICAgaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7MjQgSVJRX1RZUEVfRURHRV9CT1RIJmd0OzsKJiM0MzsgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7CiYjNDM7ICAgICAgICAgICAgbG9jYWwtbWFjLWFkZHJlc3MgPSBbIGEwIGIwIGMwIGQwIGUwIGYwIF07CiYjNDM7ICAgICAgICB9OwomIzQzOyAgICB9OwomIzQzOy4uLgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlOTY2NTc5OGM0YmU2Li4wMDAwMDAwMDAwMDAwCi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDUwICYjNDM7MCwwIEBACi0qIFdpem5ldCB3NXgwMAotCi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS4KLQotRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluCi10aGUgU1BJIG1hc3RlciBub2RlLgotCi1SZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczoKLQkgICAgICAmIzM0O3dpem5ldCx3NTEwMCYjMzQ7Ci0JICAgICAgJiMzNDt3aXpuZXQsdzUyMDAmIzM0OwotCSAgICAgICYjMzQ7d2l6bmV0LHc1NTAwJiMzNDsKLS0gcmVnOiBTcGVjaWZ5IHRoZSBTUEkgY2hpcCBzZWxlY3QgdGhlIGNoaXAgaXMgd2lyZWQgdG8uCi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZAotICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5Ci0gICAgICAgICAgICAgIGdlbmVyYXRlcyBmYWxsaW5nIGVkZ2UgaW50ZXJydXB0cywgaG93ZXZlciwgYWRkaXRpb25hbCBib2FyZCBsb2dpYwotICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC4KLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLgotLSBwaW5jdHJsLTA6IExpc3Qgb2YgcGhhbmRsZXMgdG8gY29uZmlndXJlIHRoZSBHUElPIHBpbiB1c2VkIGFzIGludGVycnVwdCBsaW5lLAotICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nCi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi4KLQotT3B0aW9uYWwgcHJvcGVydGllczoKLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC4KLSAgQWNjb3JkaW5nIHRvIHRoZSB3NTUwMCBkYXRhc2hlZXQsIHRoZSBjaGlwIGFsbG93cyBhIG1heGltdW0gb2YgODAgTUh6LCBob3dldmVyLAotICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuCi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS4KLQotCi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKToKLQotJmFtcDtzcGkgewotCWV0aGVybmV0QDA6IHc1NTAwQDAgewotCQljb21wYXRpYmxlID0gJiMzNDt3aXpuZXQsdzU1MDAmIzM0OzsKLQkJcmVnID0gJmx0OzAmZ3Q7OwotCQlwaW5jdHJsLW5hbWVzID0gJiMzNDtkZWZhdWx0JiMzNDs7Ci0JCXBpbmN0cmwtMCA9ICZsdDsmYW1wO2V0aDFfcGlucyZndDs7Ci0JCWludGVycnVwdC1wYXJlbnQgPSAmbHQ7JmFtcDtncGlvJmd0OzsKLQkJaW50ZXJydXB0cyA9ICZsdDsyNSBJUlFfVFlQRV9FREdFX0ZBTExJTkcmZ3Q7OwotCQlzcGktbWF4LWZyZXF1ZW5jeSA9ICZsdDszMDAwMDAwMCZndDs7Ci0JfTsKLX07Ci0KLSZhbXA7Z3BpbyB7Ci0JZXRoMV9waW5zOiBldGgxX3BpbnMgewotCQlicmNtLHBpbnMgPSAmbHQ7MjUmZ3Q7OwotCQlicmNtLGZ1bmN0aW9uID0gJmx0OzAmZ3Q7OyAvKiBpbiAqLwotCQlicmNtLHB1bGwgPSAmbHQ7MCZndDs7IC8qIG5vbmUgKi8KLQl9OwotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pb3BvcnQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pbnRlcnJ1cHQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcHJvcGVydHkuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKIAogI2luY2x1ZGUgJiMzNDt3NTEwMC5oJiMzNDsKQEAgLTEyNCw2ICYjNDM7MTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoJiMzNDtHUEwmIzM0Oyk7CiAgKi8KICNkZWZpbmUgVzU1MDBfU0lNUgkJMHgwMDE4IC8qIFNvY2tldCBJbnRlcnJ1cHQgTWFzayBSZWdpc3RlciAqLwogI2RlZmluZSBXNTUwMF9SVFIJCTB4MDAxOSAvKiBSZXRyeSBUaW1lLXZhbHVlIFJlZ2lzdGVyICovCiYjNDM7I2RlZmluZSBXNTUwMF9QSFlDRkdSCQkweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi8KJiM0MzsjZGVmaW5lICAgUEhZQ0ZHUl9MTksJCSAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqLwogCiAjZGVmaW5lIFc1NTAwX1MwX1JFR1MJCTB4MTAwMDAKIApAQCAtMTU0LDYgJiM0MzsxNTcsNyBAQCBzdHJ1Y3QgdzUxMDBfcHJpdiB7CiAJdTE2IHMwX3J4X2J1Zl9zaXplOwogCiAJaW50IGlycTsKJiM0MzsJaW50IGxpbmtfaXJxOwogCiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7CkBAIC0zNDUsNiAmIzQzOzM0OSwyMCBAQCBzdGF0aWMgdm9pZCB3NTUwMF9tZW1vcnlfY29uZmlndXJlKHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KQogCX0KIH0KIAomIzQzO3N0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKJiM0MzsJaW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7CiYjNDM7CiYjNDM7CWlmIChyZXQgJmx0OyAwKSB7CiYjNDM7CQluZXRpZl9lcnIocHJpdiwgbGluaywgbmRldiwKJiM0MzsJCQkgICYjMzQ7ZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXG4mIzM0OywgcmV0KTsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiByZXQgJmFtcDsgUEhZQ0ZHUl9MTks7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdikKIHsKIAl1MzIgcnRyOwpAQCAtNDE0LDYgJiM0Mzs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiAJCXNpemVvZihpbmZvLSZndDtidXNfaW5mbykpOwogfQogCiYjNDM7c3RhdGljIHUzMiB3NTEwMF9nZXRfbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtvcHMtJmd0O2NoaXBfaWQgPT0gVzU1MDApCiYjNDM7CQlyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpOwomIzQzOwomIzQzOwlyZXR1cm4gMTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdTMyIHc1MTAwX2dldF9tc2dsZXZlbChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIHsKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwpAQCAtNjE2LDYgJiM0Mzs2NDQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAomIzQzO3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBuZGV2X2luc3RhbmNlOwomIzQzOwlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZGV2KSkgewomIzQzOwkJaWYgKHc1MTAwX2dldF9saW5rKG5kZXYpKSB7CiYjNDM7CQkJbmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCAmIzM0O2xpbmsgaXMgdXBcbiYjMzQ7KTsKJiM0MzsJCQluZXRpZl9jYXJyaWVyX29uKG5kZXYpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQluZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsICYjMzQ7bGluayBpcyBkb3duXG4mIzM0Oyk7CiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIElSUV9IQU5ETEVEOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHc1MTAwX3NldHJ4X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB3NTEwMF9wcml2LApAQCAtNjU5LDYgJiM0Mzs3MDUsMTUgQEAgc3RhdGljIGludCB3NTEwMF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXc1MTAwX2h3X3N0YXJ0KHByaXYpOwogCW5hcGlfZW5hYmxlKCZhbXA7cHJpdi0mZ3Q7bmFwaSk7CiAJbmV0aWZfc3RhcnRfcXVldWUobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJZW5hYmxlX2lycShwcml2LSZndDtsaW5rX2lycSk7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtvcHMtJmd0O2NoaXBfaWQgIT0gVzU1MDAgfHwgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpKQomIzQzOwkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKJiM0MzsJZWxzZQomIzQzOwkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2Nyw2ICYjNDM7NzIyLDEwIEBAIHN0YXRpYyBpbnQgdzUxMDBfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldikKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJbmV0aWZfaW5mbyhwcml2LCBpZmRvd24sIG5kZXYsICYjMzQ7c2h1dHRpbmcgZG93blxuJiMzNDspOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7bGlua19pcnEgJmd0Oz0gMCkKJiM0MzsJCWRpc2FibGVfaXJxKHByaXYtJmd0O2xpbmtfaXJxKTsKJiM0MzsKIAl3NTEwMF9od19jbG9zZShwcml2KTsKIAluZXRpZl9jYXJyaWVyX29mZihuZGV2KTsKIAluZXRpZl9zdG9wX3F1ZXVlKG5kZXYpOwpAQCAtNjc4LDYgJiM0Mzs3MzcsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHc1MTAwX2V0aHRvb2xfb3BzID0gewogCS5nZXRfZHJ2aW5mbwkJPSB3NTEwMF9nZXRfZHJ2aW5mbywKIAkuZ2V0X21zZ2xldmVsCQk9IHc1MTAwX2dldF9tc2dsZXZlbCwKIAkuc2V0X21zZ2xldmVsCQk9IHc1MTAwX3NldF9tc2dsZXZlbCwKJiM0MzsJLmdldF9saW5rCQk9IHc1MTAwX2dldF9saW5rLAogCS5nZXRfcmVnc19sZW4JCT0gdzUxMDBfZ2V0X3JlZ3NfbGVuLAogCS5nZXRfcmVncwkJPSB3NTEwMF9nZXRfcmVncywKIH07CkBAIC03NDUsMTMgJiM0Mzs4MDUsMjEgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLAogCQlicmVhazsKIAlkZWZhdWx0OgogCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGVycl9yZWdpc3RlcjsKJiM0MzsJCWdvdG8gZXJyX3dxOwogCX0KIAogCXByaXYtJmd0O25kZXYgPSBuZGV2OwogCXByaXYtJmd0O29wcyA9IG9wczsKIAlwcml2LSZndDtpcnEgPSBpcnE7CiAKJiM0MzsJcHJpdi0mZ3Q7bGlua19pcnEgPSBvcHMtJmd0O2NoaXBfaWQgPT0gVzU1MDAgPwomIzQzOwkJCSBmd25vZGVfaXJxX2dldChkZXZfZndub2RlKGRldiksIDEpIDogLUVOT0RFVjsKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfaXJxID09IC1FUFJPQkVfREVGRVIpIHsKJiM0MzsJCWVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBwcml2LSZndDtsaW5rX2lycSwKJiM0MzsJCQkJICAgICYjMzQ7ZmFpbGVkIHRvIGdldCBsaW5rIGlycVxuJiMzNDspOwomIzQzOwkJZ290byBlcnJfd3E7CiYjNDM7CX0KJiM0MzsKIAluZGV2LSZndDtuZXRkZXZfb3BzID0gJmFtcDt3NTEwMF9uZXRkZXZfb3BzOwogCW5kZXYtJmd0O2V0aHRvb2xfb3BzID0gJmFtcDt3NTEwMF9ldGh0b29sX29wczsKIAluZXRpZl9uYXBpX2FkZF93ZWlnaHQobmRldiwgJmFtcDtwcml2LSZndDtuYXBpLCB3NTEwMF9uYXBpX3BvbGwsIDE2KTsKQEAgLTc2MSwxMiAmIzQzOzgyOSw4IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcywKIAkgKi8KIAluZGV2LSZndDtmZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDsKIAotCWVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTsKLQlpZiAoZXJyICZsdDsgMCkKLQkJZ290byBlcnJfcmVnaXN0ZXI7Ci0KIAlwcml2LSZndDt4ZmVyX3dxID0gYWxsb2Nfd29ya3F1ZXVlKCYjMzQ7JXMmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsCi0JCQkJCW5ldGRldl9uYW1lKG5kZXYpKTsKJiM0MzsJCQkJCWRldl9uYW1lKGRldikpOwogCWlmICghcHJpdi0mZ3Q7eGZlcl93cSkgewogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGVycl93cTsKQEAgLTc5NSwyMSAmIzQzOzg1OSwzOSBAQCBpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsCiAJaWYgKG9wcy0mZ3Q7bWF5X3NsZWVwKSB7CiAJCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtJmd0O2lycSwgTlVMTCwgdzUxMDBfaW50ZXJydXB0LAogCQkJCQkgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULAotCQkJCQkgICBuZXRkZXZfbmFtZShuZGV2KSwgbmRldik7CiYjNDM7CQkJCQkgICBkZXZfbmFtZShkZXYpLCBuZGV2KTsKIAl9IGVsc2UgewogCQllcnIgPSByZXF1ZXN0X2lycShwcml2LSZndDtpcnEsIHc1MTAwX2ludGVycnVwdCwKLQkJCQkgIElSUUZfVFJJR0dFUl9MT1csIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTsKJiM0MzsJCQkJICBJUlFGX1RSSUdHRVJfTE9XLCBkZXZfbmFtZShkZXYpLCBuZGV2KTsKIAl9CiAJaWYgKGVycikKIAkJZ290byBlcnJfaHc7CiAKJiM0MzsJaWYgKHByaXYtJmd0O2xpbmtfaXJxICZndDs9IDApIHsKJiM0MzsJCWVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtJmd0O2xpbmtfaXJxLCBOVUxMLAomIzQzOwkJCQkJICAgdzUxMDBfZGV0ZWN0X2xpbmssCiYjNDM7CQkJCQkgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwKJiM0MzsJCQkJCSAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHwKJiM0MzsJCQkJCSAgIElSUUZfT05FU0hPVCB8IElSUUZfTk9fQVVUT0VOLAomIzQzOwkJCQkJICAgJiMzNDt3NTEwMC1saW5rJiMzNDssIHByaXYtJmd0O25kZXYpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQkJZ290byBlcnJfbGlua19pcnE7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwlpZiAoZXJyICZsdDsgMCkKJiM0MzsJCWdvdG8gZXJyX3JlZ2lzdGVyOwomIzQzOwogCXJldHVybiAwOwogCiYjNDM7ZXJyX3JlZ2lzdGVyOgomIzQzOwlpZiAocHJpdi0mZ3Q7bGlua19pcnEgJmd0Oz0gMCkKJiM0MzsJCWZyZWVfaXJxKHByaXYtJmd0O2xpbmtfaXJxLCBuZGV2KTsKJiM0MztlcnJfbGlua19pcnE6CiYjNDM7CWZyZWVfaXJxKHByaXYtJmd0O2lycSwgbmRldik7CiBlcnJfaHc6CiAJZGVzdHJveV93b3JrcXVldWUocHJpdi0mZ3Q7eGZlcl93cSk7CiBlcnJfd3E6Ci0JdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7Ci1lcnJfcmVnaXN0ZXI6CiAJZnJlZV9uZXRkZXYobmRldik7CiAJcmV0dXJuIGVycjsKIH0KQEAgLTgyMCw2ICYjNDM7OTAyLDEzIEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwogCXN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAKJiM0MzsJdW5yZWdpc3Rlcl9uZXRkZXYobmRldik7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKSB7CiYjNDM7CQlmcmVlX2lycShwcml2LSZndDtsaW5rX2lycSwgbmRldik7CiYjNDM7CQlwcml2LSZndDtsaW5rX2lycSA9IC1FTk9ERVY7CiYjNDM7CX0KJiM0MzsKIAl3NTEwMF9od19yZXNldChwcml2KTsKIAlmcmVlX2lycShwcml2LSZndDtpcnEsIG5kZXYpOwogCkBAIC04MjcsNyAmIzQzOzkxNiw2IEBAIHZvaWQgdzUxMDBfcmVtb3ZlKHN0cnVjdCBkZXZpY2UgKmRldikKIAlmbHVzaF93b3JrKCZhbXA7cHJpdi0mZ3Q7cmVzdGFydF93b3JrKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShwcml2LSZndDt4ZmVyX3dxKTsKIAotCXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwogCWZyZWVfbmV0ZGV2KG5kZXYpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTsKQEAgLTgzOSw2ICYjNDM7OTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldikKIAlzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpOwogCiAJaWYgKG5ldGlmX3J1bm5pbmcobmRldikpIHsKJiM0MzsJCWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJCWRpc2FibGVfaXJxKHByaXYtJmd0O2xpbmtfaXJxKTsKJiM0MzsKIAkJbmV0aWZfY2Fycmllcl9vZmYobmRldik7CiAJCW5ldGlmX2RldmljZV9kZXRhY2gobmRldik7CiAKQEAgLTg1Nyw2ICYjNDM7OTQ4LDEyIEBAIHN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAkJdzUxMDBfaHdfc3RhcnQocHJpdik7CiAKIAkJbmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTsKJiM0MzsKJiM0MzsJCWlmIChwcml2LSZndDtsaW5rX2lycSAmZ3Q7PSAwKQomIzQzOwkJCWVuYWJsZV9pcnEocHJpdi0mZ3Q7bGlua19pcnEpOwomIzQzOwomIzQzOwkJaWYgKHByaXYtJmd0O29wcy0mZ3Q7Y2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpCiYjNDM7CQkJbmV0aWZfY2Fycmllcl9vbihuZGV2KTsKIAl9CiAJcmV0dXJuIDA7CiB9CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY2ODIKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA3MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIFdpem5ldCBXNTUwMCBTUEkgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGFkZGluZyBsaW5rIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGUgV2l6bmV0IFc1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLiBJdCB0b3VjaGVzIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucyBpbiBgdzUxMDAuY2AsIGluY2x1ZGluZyBhbiBJUlEgaGFuZGxlciBhbmQgbW9kaWZpY2F0aW9ucyB0byBwcm9iZSwgb3BlbiwgY2xvc2UsIGFuZCBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuIGZ1enphYmxlLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGFuIFNQSS1iYXNlZCBkcml2ZXIuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCBjYW4gSSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTUEkgZGV2aWNlcyBjYW4gYmUgYSByZWFsIHBhaW4gdG8gZW11bGF0ZSwgdW5saWtlIHNvbWV0aGluZyBsaWtlIFVTQiBvciBuZXR3b3JraW5nIHRoYXQgaGFzIG1vcmUgbWF0dXJlIGVtdWxhdGlvbiBzdXBwb3J0LiBJIGtub3cgUUVNVSBkb2VzbiYjMzk7dCBkaXJlY3RseSBlbXVsYXRlIHRoZSBXaXpuZXQgY2hpcHMsIHNvIHRoYXQmIzM5O3MgYSBodXJkbGUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgd2hldGhlciB0aGVyZSYjMzk7cyBzb21lIGNsZXZlciBzb2Z0d2FyZSBlbXVsYXRpb24gdHJpY2sgSSBjb3VsZCB1c2UsIGJ1dCByZWFsaXN0aWNhbGx5LCBTUEkgZHJpdmVycyBhcmUgb2Z0ZW4gaW5oZXJlbnRseSBoYXJkd2FyZS1kZXBlbmRlbnQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSB0cmlnZ2VyIGFueSBvZiB0aGUgbmV3IGNvZGUgcGF0aHMuIFRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBpZiB0aGlzIGlzIG5vdCBwb3NzaWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDYW4gSSBjcmVhdGUgYW4gU1BJIGRldmljZSBhdCBhbGwgaW4gUUVNVT8gVGhlcmUgbWlnaHQgYmUgc29tZSBzb3J0IG9mIFNQSSBjb250cm9sbGVyIGVtdWxhdGlvbiwgYnV0IG5vdCBhIFc1NTAwLiBDYW4gSSBjcmVhdGUgaXQgdXNpbmcgZGV2aWNlIHRyZWUgb3ZlcmxheXMgb3Igc3lzZnM/IEV2ZW4gaWYgSSBjYW4gaW5zdGFudGlhdGUgdGhlIGRldmljZSBzdHJ1Y3R1cmUsIHRoZSBkcml2ZXIgd2lsbCB0cnkgdG8gcmVhZCBhbmQgd3JpdGUgdG8gdGhlIGhhcmR3YXJlIHZpYSBTUEkgbWVzc2FnZXMgbGlrZSBgdzUxMDBfcmVhZGAgYW5kIGB3NTEwMF93cml0ZWAuIElmIHRoZXJlJiMzOTtzIG5vIGFjdHVhbCBXNTUwMCBoYXJkd2FyZSBwcmVzZW50LCB0aG9zZSBjYWxscyB3aWxsIGluZXZpdGFibHkgZmFpbCwgYW5kIHRoZSBwcm9iZSB3aWxsIGxpa2VseSBlcnJvciBvdXQuCgpJIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgcHJvYmUgZmFpbHMuIFNwZWNpZmljYWxseSwgbG9va2luZyBhdCBgdzUxMDBfcHJvYmVgIGFuZCBgdzUxMDBfaHdfcmVzZXRgLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbWV0aG9kcyBleHBlY3QgdG8gZ2V0IGEgcmVzcG9uc2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCB0aG9zZSBmdW5jdGlvbnMgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jYCB0byBzZWUgaWYgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhwZWN0ZWQgZmxvdyBhbmQgd2hlcmUgdGhpbmdzIG1pZ2h0IGZhaWwuIEkmIzM5O20gbG9va2luZyBmb3IgYW55IGFzc3VtcHRpb25zIGFib3V0IGhhcmR3YXJlIHJlc3BvbnNlcyBvciBpbml0aWFsaXphdGlvbiBzdGVwcyB0aGF0IHJlbHkgb24gYWN0dWFsIGNvbW11bmljYXRpb24gd2l0aCBhIHBoeXNpY2FsIFNQSSBkZXZpY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE2NAoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHc1MTAwX3Byb2JlYCBmdW5jdGlvbi4gSSYjMzk7bSBhc3N1bWluZywgZ2l2ZW4gdGhlIG5hbWUsIHRoaXMgaXMgYSBwcm9iaW5nIHJvdXRpbmUsIGxpa2VseSBmb3IgYW4gRXRoZXJuZXQgY29udHJvbGxlci4gSSYjMzk7ZCBleHBlY3QgaXQmIzM5O3MgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgaW5pdGlhbGl6ZSBhbiBXNTEwMCBjaGlwLCBvciBhIGNvbXBhdGlibGUgZGV2aWNlLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIGNoZWNrcyBpdCBwZXJmb3Jtcy4gRG9lcyBpdCB1c2UgYSBoYXJkLWNvZGVkIHJlZ2lzdGVyIGFkZHJlc3MgbWFwLCBvciBkb2VzIGl0IGF0dGVtcHQgYW55IGF1dG8tZGV0ZWN0aW9uIG1ldGhvZHM/IElzIGl0IGxvb2tpbmcgZm9yIHNwZWNpZmljIHNpZ25hdHVyZSB2YWx1ZXMgaW4gY2VydGFpbiByZWdpc3RlcnM/CgoqKkRpdmluZyBpbnRvIGB3NTEwMF9wcm9iZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJiMzOTttIHRha2luZyBhIGxvb2sgYXQgdGhpcyBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uIGFuZCBpbW1lZGlhdGVseSwgbXkgZXhwZXJ0IGludHVpdGlvbiBraWNrcyBpbi4gR2l2ZW4gdGhlIG5hbWluZyBjb252ZW50aW9uLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgYW4gaW5pdGlhbGl6YXRpb24gYW5kIGRldGVjdGlvbiByb3V0aW5lIGZvciBhIFc1MTAwIEV0aGVybmV0IGNvbnRyb2xsZXIsIG9yIGEgY29tcG9uZW50IGNvbXBhdGlibGUgd2l0aCBpdC4gTXkgbWluZCBpbW1lZGlhdGVseSBzdGFydHMgcnVubmluZyB0aHJvdWdoIHRoZSBsaWtlbHkgc2NlbmFyaW9zLiBJcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCBjaGVjaywgcG9raW5nIHNwZWNpZmljIHJlZ2lzdGVycyBrbm93biB0byB0aGUgVzUxMDAgZm9yIGlkZW50aWZpY2F0aW9uPyBPciBpcyBpdCBhIG1vcmUgc29waGlzdGljYXRlZCBhcHByb2FjaCwgcG9zc2libHkgaW52b2x2aW5nIGFuIGF1dG9uZWdvdGlhdGlvbiBhdHRlbXB0LCBwZXJoYXBzIHVzaW5nIGEgc3BlY2lhbGl6ZWQgSTJDIG9yIFNQSSBpbnRlcmZhY2U/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIG1ldGhvZG9sb2d5LiBJIG5lZWQgdG8ga25vdzogRG9lcyBpdCByZWx5IG9uIGEgaGFyZC1jb2RlZCBtZW1vcnkgbWFwPyBJZiBzbywgd2hhdCBhcmUgdGhlIHN0YXJ0aW5nIGFkZHJlc3NlcyBhbmQgcmVnaXN0ZXJzIGl0JiMzOTtzIHByb2Jpbmc/IEFsdGVybmF0aXZlbHksIGlzIHRoZXJlIGFuIGF1dG8tZGV0ZWN0aW9uIGVsZW1lbnQgaW52b2x2ZWQ/IERvZXMgaXQgbG9vayBmb3Igc3BlY2lmaWMgJiMzNDttYWdpYyBudW1iZXJzJiMzNDsgb3Igc2lnbmF0dXJlIHZhbHVlcyBpbiBwYXJ0aWN1bGFyIHJlZ2lzdGVycyB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBvZiBhIFc1MTAwIGNoaXAgYW5kIGl0cyBzcGVjaWZpYyByZXZpc2lvbj8gSSB3YW50IHRvIHNlZSB0aGUgZGV0YWlscyBvZiBpdHMgbWV0aG9kb2xvZ3ksIGhvdyByb2J1c3QgaXQgaXMgYWdhaW5zdCBkaWZmZXJlbnQgcmV2aXNpb25zIG9mIHRoZSBXNTEwMCBvciBwb3RlbnRpYWwgY2xvbmVzLCBhbmQgd2hhdCBraW5kIG9mIGVycm9yIGhhbmRsaW5nIGFuZCBmYWxsYmFjayBtZWNoYW5pc21zIGl0IGVtcGxveXMuIFRoZSBhcmNoaXRlY3R1cmUgb2YgdGhpcyBwcm9iZSByb3V0aW5lIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIGl0cyBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHJlbGlhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3NjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3NjI6XHRpbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4gNzYzOlx0XHRcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxuIDc2NDpcdHtcbiA3NjU6XHRcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2O1xuIDc2NjpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG4gNzY3Olx0XHRpbnQgZXJyO1xuIDc2ODpcdFx0c2l6ZV90IGFsbG9jX3NpemU7XG4gNzY5Olx0XG4gNzcwOlx0XHRhbGxvY19zaXplID0gc2l6ZW9mKCpwcml2KTtcbiA3NzE6XHRcdGlmIChzaXplb2Zfb3BzX3ByaXYpIHtcbiA3NzI6XHRcdFx0YWxsb2Nfc2l6ZSA9IEFMSUdOKGFsbG9jX3NpemUsIE5FVERFVl9BTElHTik7XG4gNzczOlx0XHRcdGFsbG9jX3NpemUgJiM0Mzs9IHNpemVvZl9vcHNfcHJpdjtcbiA3NzQ6XHRcdH1cbiA3NzU6XHRcdGFsbG9jX3NpemUgJiM0Mzs9IE5FVERFVl9BTElHTiAtIDE7XG4gNzc2Olx0XG4gNzc3Olx0XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoYWxsb2Nfc2l6ZSk7XG4gNzc4Olx0XHRpZiAoIW5kZXYpXG4gNzc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDc4MDpcdFx0U0VUX05FVERFVl9ERVYobmRldiwgZGV2KTtcbiA3ODE6XHRcdGRldl9zZXRfZHJ2ZGF0YShkZXYsIG5kZXYpO1xuIDc4MjpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDc4MzpcdFxuIDc4NDpcdFx0c3dpdGNoIChvcHMtXHUwMDNlY2hpcF9pZCkge1xuIDc4NTpcdFx0Y2FzZSBXNTEwMDpcbiA3ODY6XHRcdFx0cHJpdi1cdTAwM2VzMF9yZWdzID0gVzUxMDBfUzBfUkVHUztcbiA3ODc6XHRcdFx0cHJpdi1cdTAwM2VzMF90eF9idWYgPSBXNTEwMF9UWF9NRU1fU1RBUlQ7XG4gNzg4Olx0XHRcdHByaXYtXHUwMDNlczBfdHhfYnVmX3NpemUgPSBXNTEwMF9UWF9NRU1fU0laRTtcbiA3ODk6XHRcdFx0cHJpdi1cdTAwM2VzMF9yeF9idWYgPSBXNTEwMF9SWF9NRU1fU1RBUlQ7XG4gNzkwOlx0XHRcdHByaXYtXHUwMDNlczBfcnhfYnVmX3NpemUgPSBXNTEwMF9SWF9NRU1fU0laRTtcbiA3OTE6XHRcdFx0YnJlYWs7XG4gNzkyOlx0XHRjYXNlIFc1MjAwOlxuIDc5MzpcdFx0XHRwcml2LVx1MDAzZXMwX3JlZ3MgPSBXNTIwMF9TMF9SRUdTO1xuIDc5NDpcdFx0XHRwcml2LVx1MDAzZXMwX3R4X2J1ZiA9IFc1MjAwX1RYX01FTV9TVEFSVDtcbiA3OTU6XHRcdFx0cHJpdi1cdTAwM2VzMF90eF9idWZfc2l6ZSA9IFc1MjAwX1RYX01FTV9TSVpFO1xuIDc5NjpcdFx0XHRwcml2LVx1MDAzZXMwX3J4X2J1ZiA9IFc1MjAwX1JYX01FTV9TVEFSVDtcbiA3OTc6XHRcdFx0cHJpdi1cdTAwM2VzMF9yeF9idWZfc2l6ZSA9IFc1MjAwX1JYX01FTV9TSVpFO1xuIDc5ODpcdFx0XHRicmVhaztcbiA3OTk6XHRcdGNhc2UgVzU1MDA6XG4gODAwOlx0XHRcdHByaXYtXHUwMDNlczBfcmVncyA9IFc1NTAwX1MwX1JFR1M7XG4gODAxOlx0XHRcdHByaXYtXHUwMDNlczBfdHhfYnVmID0gVzU1MDBfVFhfTUVNX1NUQVJUO1xuIDgwMjpcdFx0XHRwcml2LVx1MDAzZXMwX3R4X2J1Zl9zaXplID0gVzU1MDBfVFhfTUVNX1NJWkU7XG4gODAzOlx0XHRcdHByaXYtXHUwMDNlczBfcnhfYnVmID0gVzU1MDBfUlhfTUVNX1NUQVJUO1xuIDgwNDpcdFx0XHRwcml2LVx1MDAzZXMwX3J4X2J1Zl9zaXplID0gVzU1MDBfUlhfTUVNX1NJWkU7XG4gODA1Olx0XHRcdGJyZWFrO1xuIDgwNjpcdFx0ZGVmYXVsdDpcbiA4MDc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA4MDg6XHRcdFx0Z290byBlcnJfd3E7XG4gODA5Olx0XHR9XG4gODEwOlx0XG4gODExOlx0XHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIDgxMjpcdFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gODEzOlx0XHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiA4MTQ6XHRcbiA4MTU6XHRcdHByaXYtXHUwMDNlbGlua19pcnEgPSBvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XG4gODE2Olx0XHRcdFx0IGZ3bm9kZV9pcnFfZ2V0KGRldl9md25vZGUoZGV2KSwgMSkgOiAtRU5PREVWO1xuIDgxNzpcdFx0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuIDgxODpcdFx0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgcHJpdi1cdTAwM2VsaW5rX2lycSxcbiA4MTk6XHRcdFx0XHRcdCAgICBcJiMzNDtmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxuXCYjMzQ7KTtcbiA4MjA6XHRcdFx0Z290byBlcnJfd3E7XG4gODIxOlx0XHR9XG4gODIyOlx0XG4gODIzOlx0XHRuZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZ3NTEwMF9uZXRkZXZfb3BzO1xuIDgyNDpcdFx0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNnc1MTAwX2V0aHRvb2xfb3BzO1xuIDgyNTpcdFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KG5kZXYsIFx1MDAyNnByaXYtXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XG4gODI2Olx0XG4gODI3Olx0XHQvKiBUaGlzIGNoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBWTEFOIHBhY2tldHMgd2l0aCBub3JtYWwgTVRVLFxuIDgyODpcdFx0ICogc28gZGlzYWJsZSBWTEFOIGZvciB0aGlzIGRldmljZS5cbiA4Mjk6XHRcdCAqL1xuIDgzMDpcdFx0bmRldi1cdTAwM2VmZWF0dXJlcyB8PSBORVRJRl9GX1ZMQU5fQ0hBTExFTkdFRDtcbiA4MzE6XHRcbiA4MzI6XHRcdHByaXYtXHUwMDNleGZlcl93cSA9IGFsbG9jX3dvcmtxdWV1ZShcJiMzNDslc1wmIzM0OywgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXG4gODMzOlx0XHRcdFx0XHRcdGRldl9uYW1lKGRldikpO1xuIDgzNDpcdFx0aWYgKCFwcml2LVx1MDAzZXhmZXJfd3EpIHtcbiA4MzU6XHRcdFx0ZXJyID0gLUVOT01FTTtcbiA4MzY6XHRcdFx0Z290byBlcnJfd3E7XG4gODM3Olx0XHR9XG4gODM4Olx0XG4gODM5Olx0XHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyeF93b3JrLCB3NTEwMF9yeF93b3JrKTtcbiA4NDA6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXR4X3dvcmssIHc1MTAwX3R4X3dvcmspO1xuIDg0MTpcdFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlc2V0cnhfd29yaywgdzUxMDBfc2V0cnhfd29yayk7XG4gODQyOlx0XHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyZXN0YXJ0X3dvcmssIHc1MTAwX3Jlc3RhcnRfd29yayk7XG4gODQzOlx0XG4gODQ0Olx0XHRpZiAobWFjX2FkZHIpXG4gODQ1Olx0XHRcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XG4gODQ2Olx0XHRlbHNlXG4gODQ3Olx0XHRcdGV0aF9od19hZGRyX3JhbmRvbShuZGV2KTtcbiA4NDg6XHRcbiA4NDk6XHRcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2Vpbml0KSB7XG4gODUwOlx0XHRcdGVyciA9IHByaXYtXHUwMDNlb3BzLVx1MDAzZWluaXQocHJpdi1cdTAwM2VuZGV2KTtcbiA4NTE6XHRcdFx0aWYgKGVycilcbiA4NTI6XHRcdFx0XHRnb3RvIGVycl9odztcbiA4NTM6XHRcdH1cbiA4NTQ6XHRcbiA4NTU6XHRcdGVyciA9IHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xuIDg1NjpcdFx0aWYgKGVycilcbiA4NTc6XHRcdFx0Z290byBlcnJfaHc7XG4gODU4Olx0XG4gODU5Olx0XHRpZiAob3BzLVx1MDAzZW1heV9zbGVlcCkge1xuIDg2MDpcdFx0XHRlcnIgPSByZXF1ZXN0X3RocmVhZGVkX2lycShwcml2LVx1MDAzZWlycSwgTlVMTCwgdzUxMDBfaW50ZXJydXB0LFxuIDg2MTpcdFx0XHRcdFx0XHQgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAyCgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIHRoZSBXNTEwMCBSZXNldCBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBgdzUxMDBfcHJvYmVgIGlzIGtpY2tpbmcgb2ZmIHRoZSBpbml0aWFsaXphdGlvbi4gSW50ZXJlc3RpbmcuIEl0JiMzOTtzIGNhbGxpbmcgYHc1MTAwX2h3X3Jlc2V0KHByaXYpYC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSByZXNldCBzZXF1ZW5jZS4gVGhhdCYjMzk7cyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBMZXQmIzM5O3MgZGlnIGludG8gdGhhdCBgdzUxMDBfaHdfcmVzZXRgIGZ1bmN0aW9uIGFuZCBzZWUgZXhhY3RseSB3aGF0IGl0JiMzOTtzIGRvaW5nLiBXaGF0IHBpbnMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgdGltaW5nIHJlcXVpcmVtZW50cz8gSXMgaXQgdXNpbmcgYSBkZWRpY2F0ZWQgcmVzZXQgbGluZSwgb3IgaXMgaXQgYSBwb3dlci1jeWNsZSBzdHlsZSByZXNldD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBoYXJkd2FyZSByZXNldCBwcm9jZXNzIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9iZSByb3V0aW5lLiBLbm93aW5nIGhvdyB0aGUgY2hpcCBpcyBicm91Z2h0IHRvIGEga25vd24gc3RhdGUgaXMgZnVuZGFtZW50YWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfaHdfcmVzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz0zNTI9c3RhdGljIGludCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzY1LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6MzY2OnN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy0zNjcte1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTQ3NT1zdGF0aWMgdm9pZCB3NTEwMF9yZXN0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ3OS1cdG5ldGlmX3N0b3BfcXVldWUobmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo0ODA6XHR3NTEwMF9od19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ4MS1cdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2Mj1pbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODU0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODU1Olx0ZXJyID0gdzUxMDBfaHdfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04NTYtXHRpZiAoZXJyKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTkwMD12b2lkIHc1MTAwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtOTExLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTEyOlx0dzUxMDBfaHdfcmVzZXQocHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MTMtXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9OTQxPXN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05NDYtXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTQ3Olx0XHR3NTEwMF9od19yZXNldChwcml2KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTk0OC1cdFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE0MDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBSZXNldCBTZXF1ZW5jZSoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgdzUxMDBfaHdfcmVzZXRgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGhhcmR3YXJlIHJlc2V0IHNlcXVlbmNlIGltcGxlbWVudGVkIGZvciB0aGUgVzUxMDAuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2lnbmFscyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRpZWQgdG8gdGhlIHJlc2V0IHBpbi4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGltaW5nIGRpYWdyYW1zIG9yIGFueSBjb2RlIHNuaXBwZXRzIHRoYXQgZGVmaW5lIHRoZSBjcml0aWNhbCBkZWxheXMgYW5kIHNpZ25hbCB0cmFuc2l0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGUgcHJvcGVyIHJlc2V0IHRpbWluZyBpcyBjcnVjaWFsOyBpbmNvcnJlY3Qgc2VxdWVuY2luZyBjYW4gbGVhZCB0byBpbnRlcm1pdHRlbnQgaXNzdWVzIG9yLCB3b3JzZSwgY29tcGxldGUgZmFpbHVyZSB0byBpbml0aWFsaXplIHRoZSBXNTEwMCBwcm9wZXJseS4gSSYjMzk7bGwgYmUgbWVudGFsbHkgbWFwcGluZyB0aGUgaGFyZHdhcmUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGlmIGl0IGZvbGxvd3MgYmVzdCBwcmFjdGljZXMgZm9yIGEgc3RhYmxlIHJlc2V0LiBBcmUgdGhlcmUgYW55IHVudXN1YWwgZWRnZSBjYXNlcyBvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIHRoYXQgbWlnaHQgYmUgcHJlc2VudD8gSSYjMzk7bGwgYWxzbyBjaGVjayBpZiB0aGUgY29kZSBwcm92aWRlcyBmb3IgYW55IGRlYm91bmNpbmcgb2YgdGhlIHJlc2V0IHNpZ25hbCBpZiBpdCBpcyBhIG1hbnVhbCBzd2l0Y2guIEtub3dpbmcgaG93IHRoZSByZXNldCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNjYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM2NjpcdHN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4gMzY3Olx0e1xuIDM2ODpcdFx0dTMyIHJ0cjtcbiAzNjk6XHRcbiAzNzA6XHRcdHc1MTAwX3Jlc2V0KHByaXYpO1xuIDM3MTpcdFxuIDM3MjpcdFx0dzUxMDBfZGlzYWJsZV9pbnRyKHByaXYpO1xuIDM3MzpcdFx0dzUxMDBfd3JpdGVfbWFjYWRkcihwcml2KTtcbiAzNzQ6XHRcbiAzNzU6XHRcdHN3aXRjaCAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCkge1xuIDM3NjpcdFx0Y2FzZSBXNTEwMDpcbiAzNzc6XHRcdFx0dzUxMDBfbWVtb3J5X2NvbmZpZ3VyZShwcml2KTtcbiAzNzg6XHRcdFx0cnRyID0gVzUxMDBfUlRSO1xuIDM3OTpcdFx0XHRicmVhaztcbiAzODA6XHRcdGNhc2UgVzUyMDA6XG4gMzgxOlx0XHRcdHc1MjAwX21lbW9yeV9jb25maWd1cmUocHJpdik7XG4gMzgyOlx0XHRcdHJ0ciA9IFc1MTAwX1JUUjtcbiAzODM6XHRcdFx0YnJlYWs7XG4gMzg0Olx0XHRjYXNlIFc1NTAwOlxuIDM4NTpcdFx0XHR3NTUwMF9tZW1vcnlfY29uZmlndXJlKHByaXYpO1xuIDM4NjpcdFx0XHRydHIgPSBXNTUwMF9SVFI7XG4gMzg3Olx0XHRcdGJyZWFrO1xuIDM4ODpcdFx0ZGVmYXVsdDpcbiAzODk6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzkwOlx0XHR9XG4gMzkxOlx0XG4gMzkyOlx0XHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXG4gMzkzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDM5NDpcdFxuIDM5NTpcdFx0cmV0dXJuIDA7XG4gMzk2Olx0fVxuIDM5NzpcdFxuIDM5ODpcdHN0YXRpYyB2b2lkIHc1MTAwX2h3X3N0YXJ0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIDM5OTpcdHtcbiA0MDA6XHRcdHU4IG1vZGUgPSBTMF9NUl9NQUNSQVc7XG4gNDAxOlx0XG4gNDAyOlx0XHRpZiAoIXByaXYtXHUwMDNlcHJvbWlzYykge1xuIDQwMzpcdFx0XHRpZiAocHJpdi1cdTAwM2VvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMClcbiA0MDQ6XHRcdFx0XHRtb2RlIHw9IFc1NTAwX1MwX01SX01GO1xuIDQwNTpcdFx0XHRlbHNlXG4gNDA2Olx0XHRcdFx0bW9kZSB8PSBTMF9NUl9NRjtcbiA0MDc6XHRcdH1cbiA0MDg6XHRcbiA0MDk6XHRcdHc1MTAwX3dyaXRlKHByaXYsIFc1MTAwX1MwX01SKHByaXYpLCBtb2RlKTtcbiA0MTA6XHRcdHc1MTAwX2NvbW1hbmQocHJpdiwgUzBfQ1JfT1BFTik7XG4gNDExOlx0XHR3NTEwMF9lbmFibGVfaW50cihwcml2KTtcbiA0MTI6XHR9XG4gNDEzOlx0XG4gNDE0Olx0c3RhdGljIHZvaWQgdzUxMDBfaHdfY2xvc2Uoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4gNDE1Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQyOQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkluaXRpYWwgSGFyZHdhcmUgQ2hlY2sgYW5kIENvbmZ1c2lvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIgY29kZSBhbmQgSSBzZWUgdGhpcyBjcnVjaWFsIGxpbmU6IGBpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpIHJldHVybiAtRU5PREVWO2AuIFJpZ2h0IGF3YXksIGl0JiMzOTtzIGNsZWFyIHRoaXMgaXMgYSBoYXJkd2FyZSBjaGVjay4gVGhlIGRyaXZlciBpcyByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gYSBoYXJkd2FyZSByZWdpc3RlciwgYHJ0cmAsIHVzaW5nIGB3NTEwMF9yZWFkMTZgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZSBoYXJkd2FyZSwgcHJlc3VtYWJseSBhIFc1MTAwIGNoaXAgb3Igc29tZXRoaW5nIHNpbWlsYXIsICptdXN0KiByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSwgYFJUUl9ERUZBVUxUYCwgaW4gdGhhdCByZWdpc3Rlci4gSWYgdGhlIHZhbHVlIGlzbiYjMzk7dCB3aGF0JiMzOTtzIGV4cGVjdGVkLCBpdCByZXR1cm5zIGFuIGVycm9yIGNvZGUsIGAtRU5PREVWYCwgaW5kaWNhdGluZyB0aGUgZGV2aWNlIGlzbiYjMzk7dCBwcmVzZW50IG9yIGlzbiYjMzk7dCByZXNwb25kaW5nIGNvcnJlY3RseS4gVGhhdCBtYWtlcyBzZW5zZSwgYSBzdGFuZGFyZCBoYXJkd2FyZSBjaGVjay4KCkJ1dCBoYW5nIG9u4oCmIGlmIHRoZXJlJiMzOTtzICpubyogaGFyZHdhcmUgY29ubmVjdGVkLCB3aGF0IHdpbGwgYHc1MTAwX3JlYWQxNmAgbGlrZWx5IHJldHVybj8gUHJvYmFibHkgc29tZXRoaW5nIHByZWRpY3RhYmxlLCBsaWtlIDAgb3IgbWF5YmUgMHhGRkZGLiBFaXRoZXIgb2YgdGhvc2UgdmFsdWVzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogZXF1YWwgYFJUUl9ERUZBVUxUYC4gU28sIHRoZSBjaGVjayBzZWVtcyByb2J1c3QsIGFzc3VtaW5nIHRoZSByZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZ3JhY2VmdWxseS4KCkhvbGQgb24sIHdoYXQgaXMgYFJUUl9ERUZBVUxUYD8gSXQmIzM5O3MgYSBzeW1ib2xpYyBjb25zdGFudC4gSSBuZWVkIHRvIGZpbmQgdGhlIGRlZmluaXRpb24gb2YgdGhhdCwgYW5kIGl0IHdpbGwgYmUgaW50ZXJlc3RpbmcgdG8gZmlndXJlIG91dCB3aHkgdGhpcyByZWdpc3RlciBpcyBzbyBmdW5kYW1lbnRhbCB0byB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UuIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyByZWdpc3RlciBjb250cm9scyB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgZ29vZCBjaGVjayB0byBwZXJmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVFJfREVGQVVMVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzU9TU9EVUxFX0xJQ0VOU0UoXCYjMzQ7R1BMXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OS0jZGVmaW5lIFc1MTAwX1JUUlx0XHQweDAwMTcgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTA6I2RlZmluZSAgIFJUUl9ERUZBVUxUXHRcdCAgMjAwMCAvKiA9MHgwN2QwICgyMDAwKSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtOTEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzY2PXN0YXRpYyBpbnQgdzUxMDBfaHdfcmVzZXQoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6MzkyOlx0aWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkzLVx0XHRyZXR1cm4gLUVOT0RFVjtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMyMDIKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgVzUxMDAgRHJpdmVyIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaXQmIzM5O3MgZXhwZWN0aW5nIGEgc3BlY2lmaWMgZGV2aWNlIElELCAweDA3ZDAuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGUgaGFyZHdhcmUgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgdzUxMDBfcHJvYmVgIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gYC1FTk9ERVZgLCBpbmRpY2F0aW5nIGEgZmFpbHVyZS4gVGhlIHF1ZXN0aW9uIG5vdyBpcywgY2FuIEkgcmVsaWFibHkgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbiBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBNeSBmaXJzdCB0aG91Z2h0IGlzIFFFTVUsIGJ1dCBJIGtub3cgdGhhdCYjMzk7cyBwcm9iYWJseSBhIGRlYWQgZW5kIHNpbmNlIFFFTVUgZG9lc24mIzM5O3Qgb2ZmZXIgYW55IFc1MTAwL1c1MjAwL1c1NTAwIGVtdWxhdGlvbi4KCkFscmlnaHQsIHdoYXQgYWJvdXQgbGV2ZXJhZ2luZyBTeXprYWxsZXI/IERvZXMgaXQgaGF2ZSBhIG1lY2hhbmlzbSB0byBpbmplY3QgU1BJIHJlc3BvbnNlcz8gSWRlYWxseSwgSSYjMzk7ZCB3YW50IGEgZ2VuZXJpYyBTUEkgZnV6emVyIHRoYXQgaW50ZXJjZXB0cyBTUEkgY29tbXVuaWNhdGlvbiBhbmQgcHJvdmlkZXMgc3Bvb2ZlZCBkYXRhLiBTYWRseSwgU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LgoKSGFuZyBvbi4uLmlzIHRoaXMgZHJpdmVyIGV2ZW4gKm9ubHkqIFNQST8gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgdGhlIGRyaXZlciBzb3VyY2UuIEkgc2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgcmVsZXZhbnQgY29kZSBpbiBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jYCBvciBhIHNpbWlsYXIgZmlsZS4gVGhhdCYjMzk7bGwgdGVsbCBtZSB0aGUgaW50ZXJmYWNlIHRvIHRoZSBjaGlwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7dzUxMDAtc3BpLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MTUKCQkJCQkJCW91dHB1dDogNDYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byBgdzUxMDAtc3BpLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHRoaXMgZHJpdmVyIGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uIHdpdGggdGhlIFc1MTAwIEV0aGVybmV0IGNvbnRyb2xsZXIuIEkga25vdyB0aGUgYmFzaWNzLCB0aGUgY2hpcCBzZWxlY3QsIHRoZSBkYXRhIGZyYW1pbmcsIGJ1dCB0aGUgc3BlY2lmaWNzIGFyZSBhbHdheXMgd2hlcmUgdGhlIGRldmlsIHJlc2lkZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIG1hbmFnaW5nIHRoZSB0aW1pbmcgY29uc3RyYWludHMuIEFyZSB0aGV5IHVzaW5nIERNQT8gSW50ZXJydXB0cz8gT3IgYXJlIHRoZXkgZG9pbmcgZXZlcnl0aGluZyBpbiBhIGJsb2NraW5nIG1hbm5lcj8gSeKAmWxsIGhhdmUgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gc2VlIGhvdyB0aGV5JiMzOTtyZSBoYW5kbGluZyB0aGluZ3MgbGlrZSB0aGUgaW50ZXJydXB0IG1hc2sgcmVnaXN0ZXIsIGFuZCBlcnJvciBjb2RlIGRlY29kaW5nLiBJcyB0aGVyZSBhbnl0aGluZyB1bnVzdWFsLCBvciBlbGVnYW50LCBhYm91dCB0aGUgd2F5IHRoZXkmIzM5O3ZlIGFwcHJvYWNoZWQgdGhlIFNQSSB0cmFuc2FjdGlvbiBzZXR1cD8gQW55IG9wdGltaXphdGlvbnM/IEkgc2hvdWxkIGFsc28gcXVpY2tseSBjaGVjayB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIGFuZCBzZWUgaWYgaXQgaXMgdGhyZWFkIHNhZmUuIEl0IGlzIGFsd2F5cyBhIHBhaW4gdG8gZGVidWcgY29uY3VycmVuY3kgaXNzdWVzLCBhbmQgSSB3YW50IHRvIHNlZSBpZiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyIHRvb2sgdGhvc2UgY29uY2VybnMgaW50byBhY2NvdW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuICAgMjpcdC8qXG4gICAzOlx0ICogRXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgV0labmV0IFc1MTAwL1c1MjAwL1c1NTAwIGNoaXAuXG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQWtpbm9idSBNaXRhIFx1MDAzY2FraW5vYnUubWl0YUBnbWFpbC5jb21cdTAwM2VcbiAgIDY6XHQgKlxuICAgNzpcdCAqIERhdGFzaGVldDpcbiAgIDg6XHQgKiBodHRwOi8vd3d3Lndpem5ldC5jby5rci93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MTAwL0RvY3VtZW50L1c1MTAwX0RhdGFzaGVldF92MS4yLjYucGRmXG4gICA5Olx0ICogaHR0cDovL3dpem5ldGhvbWUuY2FmZTI0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MjAwL0RvY3VtZW50cy9XNTIwMF9EU19WMTQwRS5wZGZcbiAgMTA6XHQgKiBodHRwOi8vd2l6d2lraS5uZXQvd2lraS9saWIvZXhlL2ZldGNoLnBocD9tZWRpYT1wcm9kdWN0czp3NTUwMDp3NTUwMF9kc192MTA2ZV8xNDEyMzAucGRmXG4gIDExOlx0ICovXG4gIDEyOlx0XG4gIDEzOlx0I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiAgMTQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L29mLmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NwaS9zcGkuaFx1MDAzZVxuICAyMDpcdFxuICAyMTpcdCNpbmNsdWRlIFwmIzM0O3c1MTAwLmhcJiMzNDtcbiAgMjI6XHRcbiAgMjM6XHQjZGVmaW5lIFc1MTAwX1NQSV9XUklURV9PUENPREUgMHhmMFxuICAyNDpcdCNkZWZpbmUgVzUxMDBfU1BJX1JFQURfT1BDT0RFIDB4MGZcbiAgMjU6XHRcbiAgMjY6XHRzdGF0aWMgaW50IHc1MTAwX3NwaV9yZWFkKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgYWRkcilcbiAgMjc6XHR7XG4gIDI4Olx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xuICAyOTpcdFx0dTggY21kWzNdID0geyBXNTEwMF9TUElfUkVBRF9PUENPREUsIGFkZHIgXHUwMDNlXHUwMDNlIDgsIGFkZHIgXHUwMDI2IDB4ZmYgfTtcbiAgMzA6XHRcdHU4IGRhdGE7XG4gIDMxOlx0XHRpbnQgcmV0O1xuICAzMjpcdFxuICAzMzpcdFx0cmV0ID0gc3BpX3dyaXRlX3RoZW5fcmVhZChzcGksIGNtZCwgc2l6ZW9mKGNtZCksIFx1MDAyNmRhdGEsIDEpO1xuICAzNDpcdFxuICAzNTpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGRhdGE7XG4gIDM2Olx0fVxuICAzNzpcdFxuICAzODpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LCB1MzIgYWRkciwgdTggZGF0YSlcbiAgMzk6XHR7XG4gIDQwOlx0XHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVx1MDAzZWRldi5wYXJlbnQpO1xuICA0MTpcdFx0dTggY21kWzRdID0geyBXNTEwMF9TUElfV1JJVEVfT1BDT0RFLCBhZGRyIFx1MDAzZVx1MDAzZSA4LCBhZGRyIFx1MDAyNiAweGZmLCBkYXRhfTtcbiAgNDI6XHRcbiAgNDM6XHRcdHJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgY21kLCBzaXplb2YoY21kKSwgTlVMTCwgMCk7XG4gIDQ0Olx0fVxuICA0NTpcdFxuICA0NjpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIpXG4gIDQ3Olx0e1xuICA0ODpcdFx0dTE2IGRhdGE7XG4gIDQ5Olx0XHRpbnQgcmV0O1xuICA1MDpcdFxuICA1MTpcdFx0cmV0ID0gdzUxMDBfc3BpX3JlYWQobmRldiwgYWRkcik7XG4gIDUyOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuICA1MzpcdFx0XHRyZXR1cm4gcmV0O1xuICA1NDpcdFx0ZGF0YSA9IHJldCBcdTAwM2NcdTAwM2MgODtcbiAgNTU6XHRcdHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIgJiM0MzsgMSk7XG4gIDU2Olx0XG4gIDU3Olx0XHRyZXR1cm4gcmV0IFx1MDAzYyAwID8gcmV0IDogZGF0YSB8IHJldDtcbiAgNTg6XHR9XG4gIDU5Olx0XG4gIDYwOlx0c3RhdGljIGludCB3NTEwMF9zcGlfd3JpdGUxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHUxNiBkYXRhKVxuICA2MTpcdHtcbiAgNjI6XHRcdGludCByZXQ7XG4gIDYzOlx0XG4gIDY0Olx0XHRyZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciwgZGF0YSBcdTAwM2VcdTAwM2UgOCk7XG4gIDY1Olx0XHRpZiAocmV0KVxuICA2NjpcdFx0XHRyZXR1cm4gcmV0O1xuICA2NzpcdFxuICA2ODpcdFx0cmV0dXJuIHc1MTAwX3NwaV93cml0ZShuZGV2LCBhZGRyICYjNDM7IDEsIGRhdGEgXHUwMDI2IDB4ZmYpO1xuICA2OTpcdH1cbiAgNzA6XHRcbiAgNzE6XHRzdGF0aWMgaW50IHc1MTAwX3NwaV9yZWFkYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHU4ICpidWYsXG4gIDcyOlx0XHRcdFx0ICAgICAgaW50IGxlbilcbiAgNzM6XHR7XG4gIDc0Olx0XHRpbnQgaTtcbiAgNzU6XHRcbiAgNzY6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGxlbjsgaSYjNDM7JiM0MzspIHtcbiAgNzc6XHRcdFx0aW50IHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIgJiM0MzsgaSk7XG4gIDc4Olx0XG4gIDc5Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gIDgwOlx0XHRcdFx0cmV0dXJuIHJldDtcbiAgODE6XHRcdFx0YnVmW2ldID0gcmV0O1xuICA4MjpcdFx0fVxuICA4MzpcdFxuICA4NDpcdFx0cmV0dXJuIDA7XG4gIDg1Olx0fVxuICA4NjpcdFxuICA4NzpcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIGNvbnN0IHU4ICpidWYsXG4gIDg4Olx0XHRcdFx0ICAgICAgIGludCBsZW4pXG4gIDg5Olx0e1xuICA5MDpcdFx0aW50IGk7XG4gIDkxOlx0XG4gIDkyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBsZW47IGkmIzQzOyYjNDM7KSB7XG4gIDkzOlx0XHRcdGludCByZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciAmIzQzOyBpLCBidWZbaV0pO1xuICA5NDpcdFxuICA5NTpcdFx0XHRpZiAocmV0KVxuICA5NjpcdFx0XHRcdHJldHVybiByZXQ7XG4gIDk3Olx0XHR9XG4gIDk4Olx0XG4gIDk5Olx0XHRyZXR1cm4gMDtcbiAxMDA6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTMzCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246CgoqKkluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgU1BJIERyaXZlcioqCgpBbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBtb2R1bGUmIzM5O3MgZnVuY3Rpb24gaXMgc29sZWx5IGFzIGFuIFNQSSBkcml2ZXIuIEkgbmVlZCB0byBxdWlja2x5IGVzdGFibGlzaCBpZiB0aGF0JiMzOTtzICp0cnVseSogdGhlIGNhc2UuIE15IGltbWVkaWF0ZSBjb25jZXJuIGlzLCBpcyBpdCAqb25seSogU1BJPyBOb3csIGxldCBtZSB0aGluay4uLiByaWdodCwgSSByZWNhbGwgdGhlIGZpbGUgc3RydWN0dXJlLi4uIEkgc2VlIHRoYXQgYHc1MTAwLmNgIGFwcGVhcnMgdG8gYmUgdGhlIGNlbnRyYWwgY29tcG9uZW50LCB0aGUgY29yZSBsb2dpYywgd2hpbGUgYHc1MTAwLXNwaS5jYCAqc3BlY2lmaWNhbGx5KiBpbXBsZW1lbnRzIHRoZSBTUEkgaW50ZXJmYWNlLiBUaGF0JiMzOTtzIGdvb2QuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgaXNuJiMzOTt0IGFub3RoZXIgZmlsZSwgc2F5IGEgcGxhdGZvcm0gZHJpdmVyLCBvciBhbiBJMkMgY29tcG9uZW50LiBJdCB3b3VsZCBiZSB2YWx1YWJsZSB0byBnZXQgY29uZmlybWF0aW9uIHRoYXQgdGhlcmUgYXJlIG5vdCBhbnkgb3RoZXIgaW1wbGVtZW50YXRpb25zIGJlc2lkZXMgdGhlIFNQSSBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3c1MTAwX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1Mi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XHRyZXR1cm4gdzUxMDBfcHJvYmUoXHUwMDI2c3BpLVx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVx1MDAzZWlycSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDU0LX1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaDozMTppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cdFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjM4NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqRGl2aW5nIGludG8gdGhlIFc1MTAwIENvZGViYXNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgVzUxMDAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGB3NTEwMC5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGNvcmUgbW9kdWxlLCBsaWtlbHkgY29udGFpbmluZyB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXR5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciB0aGUgVzUxMDAgaXRzZWxmLiBUaGVuIHRoZXJlIGlzIHRoZSBTUEkgZHJpdmVyLiBUaGUgbmFtZSBgdzUxMDAtc3BpLmNgIGluZGljYXRlcyB0aGF0IGl0IGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uLCB3aGljaCB3aWxsIG9idmlvdXNseSBiZSBjcml0aWNhbCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBkZXZpY2UmIzM5O3MgcmVnaXN0ZXJzLiBCdXQgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkmIzM5O20gdGhpbmtpbmcgSSBzaG91bGQgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRyaXZlcnMgb3IgYWJzdHJhY3Rpb24gbGF5ZXJzIGluIHBsYXkgaGVyZS4gSSBuZWVkIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBhcmNoaXRlY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFzc3VtcHRpb25zIGFib3V0IGRlcGVuZGVuY2llcyBvciBlbnRyeSBwb2ludHMuIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBjcnVjaWFsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMyAxMDowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7dzUxMDAtc3BpLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuYyYjMzQ7LAogICAgJiMzNDt3NTEwMC5oJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3MTEKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipOYXZpZ2F0aW5nIHRoZSBXNTEwMCBEcml2ZXIgTGFuZHNjYXBlKioKCk9rYXksIGhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBsb29raW5nIGF0IHRoZSByaWdodCBmaWxlcyBmb3IgdGhpcyBXNTEwMCBpbXBsZW1lbnRhdGlvbi4gSSB0aG91Z2h0IEkgcmVjYWxsZWQgYSBgdzUzMDAuY2AgYXQgc29tZSBwb2ludCwgYnV0IG5vLCBhbGwgSSYjMzk7bSBzZWVpbmcgYXJlIHZhcmlhdGlvbnMgZm9yIHRoZSBXNTEwMCBzcGVjaWZpY2FsbHk6IGB3NTEwMC1zcGkuY2AsIGB3NTEwMC5jYCwgYW5kIHRoZSBoZWFkZXIgYHc1MTAwLmhgLiBBbHJpZ2h0LCBzbyB0aGVyZSYjMzk7cyBhIFNQSSB2ZXJzaW9uIGFuZCBhIHJlZ3VsYXIgb25lLCByZXByZXNlbnRlZCBieSB0aGUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGZpbGVzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIFNQSSB2YXJpYW50IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGVyZSYjMzk7cyBhIG1lbW9yeS1tYXBwZWQgdmVyc2lvbiwgb3Igd2hldGhlciB0aGlzIGltcGxlbWVudGF0aW9uIGlzIGV4Y2x1c2l2ZWx5IHJlZ2lzdGVyLWJhc2VkLiBJdCYjMzk7cyB0aW1lIHRvIGRvIGEgcXVpY2sgc2NhbiBvZiB0aGUgZGlyZWN0b3J5IHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kOyBJIHdhbnQgdG8gZW5zdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueSBmaWxlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dzUxMDBfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcdHJldHVybiB3NTEwMF9wcm9iZShcdTAwMjZzcGktXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXHUwMDNlaXJxKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2MD1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjEtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NjI6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYzLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTctfVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODk4OkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5OS1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVx0XHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjI0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgV2l6bmV0IERyaXZlciBMYW5kc2NhcGUqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBsZXQgbWUgcHJvY2VzcyB0aGlzIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgb3V0cHV0LiBJIHNlZSBgdzUxMDAtc3BpLmNgIGFuZCBgdzUxMDAuY2AgaW4gdGhlIHJlc3VsdHMuIEludGVyZXN0aW5nLiBOb3csIGhvbGQgb24sIEkgdGhvdWdodCBJIGFsc28gc2F3IHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBgdzUzMDBgPyBObywgd2FpdCBhIG1pbnV0ZSwgdGhlIGFjdHVhbCBvdXRwdXQgaXMganVzdDogYEZpbGVzOiBbJiMzNDt3NTEwMC1zcGkuYyYjMzQ7LCAmIzM0O3c1MTAwLmMmIzM0OywgJiMzNDt3NTEwMC5oJiMzNDtdYC4gU28sIG5vIGB3NTMwMC5jYCBhcHBlYXJzIGhlcmUgYW5kIGl0IGNvbmZpcm1zIHRoZXJlJiMzOTtzIG5vIG1lbW9yeS1tYXBwZWQgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgdzUxMDAgc3BlY2lmaWNhbGx5IGluICp0aGlzKiBkaXJlY3RvcnkuIExldCYjMzk7cyBzdGVwIGJhY2sgYW5kIGRvdWJsZS1jaGVjaywgc3BlY2lmaWNhbGx5LCB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC9gIGRpcmVjdG9yeSwgSSBzaG91bGQgaGF2ZSBwYWlkIG1vcmUgYXR0ZW50aW9uLiBBaCwgcmlnaHQsIEkgbmVlZCB0byByZW1lbWJlciB0aGF0IGBjb2Rlc2VhcmNoLWRpci1pbmRleGAgcmV0dXJucyBib3RoIGBGaWxlc2AgYW5kIGBTdWJkaXJzYC4gT2theSwgYW5kIHdhaXQsIEkgKmRlZmluaXRlbHkqIGRpZG4mIzM5O3Qgc2VlIGB3NTMwMC5jYCBub3cuIExldCBtZSBjaGVjayB0aGUgZGlyZWN0b3J5IGFnYWluLCBqdXN0IHRvIGJlIHN1cmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlcyYjMzQ7OiBbCiAgICAmIzM0O3c1MTAwLXNwaS5jJiMzNDssCiAgICAmIzM0O3c1MTAwLmMmIzM0OywKICAgICYjMzQ7dzUxMDAuaCYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MTU4CgkJCQkJCQlvdXRwdXQ6IDE2OAoJCQkJCQkJdGhvdWdodHM6IDgxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgV2l6bmV0IFc1MTAwIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhbmQgSSYjMzk7bSBzZWVpbmcgb25seSB0aHJlZSBmaWxlcyBhZmZlY3RlZCBpbml0aWFsbHkuIFRoZSBmb2N1cyBzZWVtcyB0byBiZSBvbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNgLiBNeSBmaXJzdCBxdWVzdGlvbiBpcywgY2FuIHRoaXMgY29kZSBldmVuIGJlIHRvdWNoZWQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gVGhpcyBkcml2ZXIgZXhwbGljaXRseSByZXF1aXJlcyBhbiBTUEkgZGV2aWNlLiBUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBjYW4gUUVNVSBwcm92aWRlIGFuIFNQSSBkZXZpY2U/CgpJIGtub3cgUUVNVSAqaGFzKiBTUEkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSYjMzk7cyBubyBhY3R1YWwgZW11bGF0aW9uIGZvciB0aGUgVzUxMDAsIFc1MjAwLCBvciBXNTUwMCBkZXZpY2VzIHRoZW1zZWx2ZXMuIEkgY2FuIGNyZWF0ZSBhbiBTUEkgZGV2aWNlIHRocm91Z2ggYSBkZXZpY2UgdHJlZSBvdmVybGF5LCBzdXJlLCBidXQgdGhhdCYjMzk7cyBub3QgZ29pbmcgdG8gZ2V0IG1lIGFueXdoZXJlLiBUaGUgYHc1MTAwX2h3X3Jlc2V0YCBmdW5jdGlvbiBpcyBnb2luZyB0byBmYWlsLiBJdCByZWFkcyBgUlRSX0RFRkFVTFRgICgyMDAwKSBmcm9tIHRoZSBTUEkgYnVzLiBXaXRob3V0IHJlYWwgaGFyZHdhcmUgb3IgYW4gYWNjdXJhdGUgZW11bGF0b3IsIHRoZSBTUEkgcmVhZCBpcyBqdXN0IGdvaW5nIHRvIHJldHVybiBnYXJiYWdlIOKAkyBsaWtlbHkgMCBvciAweGZmZmYg4oCTIGFuZCB0aGUgcHJvYmUgd2lsbCBjaG9rZSB3aXRoIGAtRU5PREVWYC4KClRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsICpuZXZlciogcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkZXZpY2Ugd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGFsbCB0aGUgY29kZSBwYXRocyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIOKAkyBgdzUxMDBfZGV0ZWN0X2xpbmtgLCBgdzUxMDBfb3BlbmAsIGB3NTEwMF9zdG9wYCwgYHc1MTAwX2dldF9saW5rYCDigJMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFRoZXkmIzM5O3JlIGFsbCBwcmVkaWNhdGVkIG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZSBhbmQgYSByZWdpc3RlcmVkIG5ldHdvcmsgaW50ZXJmYWNlLiBTaW5jZSB0aGUgcHJvYmUgZmFpbHMsIHRoZXkmIzM5O3JlIGRlYWQgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVzY2FwZSBoYXRjaGVzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMb29raW5nIGF0IGB3NTEwMF9od19yZXNldGAgYWdhaW46CgpgYGBjCglpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpCgkJcmV0dXJuIC1FTk9ERVY7CmBgYAoKWXVwLCBpdCYjMzk7cyBhIGhhcmQgY2hlY2suIFRoZXJlJiMzOTtzIG5vIHNvZnQgZmFpbHVyZSBtb2RlIG9yIGNvbmRpdGlvbmFsIGJ5cGFzcy4gSXMgdGhlcmUgYW55IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBXNTEwMCBpbiB0aGUga2VybmVsPyBOby4gQW55IFFFTVUgZW11bGF0aW9uPyBOb3BlLCBRRU1VJiMzOTtzIGdvdCBub3RoaW5nIGZvciB0aGlzLiBBbmQgd2hhdCBhYm91dCBTeXprYWxsZXI/IERvZXMgaXQgaGF2ZSBzb21lIGdlbmVyaWMgU1BJIG1vY2tpbmcgZnJhbWV3b3JrIHRoYXQgY291bGQgbGV0IG1lIHJldHVybiBhIHNwZWNpZmljIHZhbHVlIGZvciBhIHNwZWNpZmljIHJlZ2lzdGVyPyBVbmZvcnR1bmF0ZWx5LCBuby4KClNvLCB0aGUgZHJpdmVyIGNhbiYjMzk7dCBiZSBwcm9iZWQgc3VjY2Vzc2Z1bGx5LiBJJiMzOTttIGhpdHRpbmcgYSB3YWxsLgoKTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBpbnN0cnVjdGlvbnMuIE9rYXksICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuJiMzNDsgQmluZ28uCgpUaGlzIGlzIGEgdmVuZG9yLXNwZWNpZmljIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciAoV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwKS4gSXQgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXNuJiMzOTt0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIEl0JiMzOTtzIGltcG9zc2libGUgdG8gcmVhY2ggdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyAoYHc1MTAwX2RldGVjdF9saW5rYCwgZXRjLikgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkdpdmVuIHRoaXMsIEkgaGF2ZSB0byBjb25jbHVkZSB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgZmFsc2UuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGluYWNjZXNzaWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTMgMTA6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB0byBhZGQgbGluayBpbnRlcnJ1cHQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciB2ZXJpZmllcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGhhcmR3YXJlIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZSAoUlRSX0RFRkFVTFQpLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGVtdWxhdG9yLCB0aGUgcHJvYmUgd2lsbCBmYWlsLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgdzUxMDBfZGV0ZWN0X2xpbmssIHc1MTAwX29wZW4sIGFuZCB3NTEwMF9zdG9wKSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzEzIDEwOjA1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowNy44NzU0MDM2NzlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDg1MzM5OTAwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowNy44NzU0MDk5NTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4NzczMjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDQ0MTlkYTI5NTg4MDFlZGRlMDY5Y2NiMjUyOTNhYmI5MWFkNGU5OTJcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMTMgMTA6MDQ6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWxcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjgxZjQzODJlYjk2YzVcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxcbkBAIC0wLDAgKzEsOTEgQEBcXG4rIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogKEdQTC0yLjAtb25seSBPUiBCU0QtMi1DbGF1c2UpXFxuKyVZQU1MIDEuMlxcbistLS1cXG4rJGlkOiBodHRwOi8vZGV2aWNldHJlZS5vcmcvc2NoZW1hcy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwjXFxuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xcbitcXG4rdGl0bGU6IFdpem5ldCB3NTEwMC93NTIwMC93NTUwMCBTUEkgRXRoZXJuZXQgQ29udHJvbGxlclxcbitcXG4rbWFpbnRhaW5lcnM6XFxuKyAgLSBBcnRodXIgQ3LDqXBpbiBMZWJsb25kIFxcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFxcdTAwM2VcXG4rXFxuK2Rlc2NyaXB0aW9uOiB8XFxuKyAgVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXFxuK1xcbithbGxPZjpcXG4rICAtICRyZWY6IC9zY2hlbWFzL25ldC9ldGhlcm5ldC1jb250cm9sbGVyLnlhbWwjXFxuKyAgLSAkcmVmOiAvc2NoZW1hcy9zcGkvc3BpLXBlcmlwaGVyYWwtcHJvcHMueWFtbCNcXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHdpem5ldCx3NTUwMFxcbisgICAgdGhlbjpcXG4rICAgICAgcHJvcGVydGllczpcXG4rICAgICAgICBpbnRlcnJ1cHRzOlxcbisgICAgICAgICAgbWluSXRlbXM6IDFcXG4rICAgICAgICAgIGl0ZW1zOlxcbisgICAgICAgICAgICAtIGRlc2NyaXB0aW9uOiBNYWluIGludGVycnVwdCAoSU5UIHBpbiBvbiB0aGUgZGV2aWNlKS5cXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcXG4rICAgICAgICAgICAgICAgIE9wdGlvbmFsIGludGVycnVwdCBmb3IgbGluayBzdGF0dXMgY2hhbmdlcyAoTElOS0xFRCBwaW4gb25cXG4rICAgICAgICAgICAgICAgIHc1NTAwKS5cXG4rICAtIGlmOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGNvbXBhdGlibGU6XFxuKyAgICAgICAgICBjb250YWluczpcXG4rICAgICAgICAgICAgZW51bTpcXG4rICAgICAgICAgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXFxuKyAgICB0aGVuOlxcbisgICAgICBwcm9wZXJ0aWVzOlxcbisgICAgICAgIGludGVycnVwdHM6XFxuKyAgICAgICAgICBpdGVtczpcXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXFxuK1xcbitwcm9wZXJ0aWVzOlxcbisgIGNvbXBhdGlibGU6XFxuKyAgICBlbnVtOlxcbisgICAgICAtIHdpem5ldCx3NTEwMFxcbisgICAgICAtIHdpem5ldCx3NTIwMFxcbisgICAgICAtIHdpem5ldCx3NTUwMFxcbitcXG4rICByZWc6XFxuKyAgICBtYXhJdGVtczogMVxcbitcXG4rICBzcGktbWF4LWZyZXF1ZW5jeTpcXG4rICAgIGRlc2NyaXB0aW9uOlxcbisgICAgICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosXFxuKyAgICAgIGhvd2V2ZXIsIGJvYXJkIGRlc2lnbnMgbWF5IG5lZWQgdG8gbGltaXQgdGhpcyB2YWx1ZS5cXG4rICAgIG1heGltdW06IDgwMDAwMDAwXFxuK1xcbityZXF1aXJlZDpcXG4rICAtIGNvbXBhdGlibGVcXG4rICAtIHJlZ1xcbisgIC0gaW50ZXJydXB0c1xcbitcXG4rdW5ldmFsdWF0ZWRQcm9wZXJ0aWVzOiBmYWxzZVxcbitcXG4rZXhhbXBsZXM6XFxuKyAgLSB8XFxuKyAgICAvKiBFeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKSAqL1xcbitcXG4rICAgICNpbmNsdWRlIFxcdTAwM2NkdC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9pcnEuaFxcdTAwM2VcXG4rXFxuKyAgICBzcGkge1xcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXFx1MDAzYzFcXHUwMDNlO1xcbisgICAgICAgICNzaXplLWNlbGxzID0gXFx1MDAzYzBcXHUwMDNlO1xcbitcXG4rICAgICAgICBldGhlcm5ldEAwIHtcXG4rICAgICAgICAgICAgY29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbisgICAgICAgICAgICByZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4rICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuKyAgICAgICAgICAgIGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZSxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcXHUwMDNlO1xcbisgICAgICAgICAgICBzcGktbWF4LWZyZXF1ZW5jeSA9IFxcdTAwM2MzMDAwMDAwMFxcdTAwM2U7XFxuKyAgICAgICAgICAgIGxvY2FsLW1hYy1hZGRyZXNzID0gWyBhMCBiMCBjMCBkMCBlMCBmMCBdO1xcbisgICAgICAgIH07XFxuKyAgICB9O1xcbisuLi5cXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZTk2NjU3OThjNGJlNi4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw1MCArMCwwIEBAXFxuLSogV2l6bmV0IHc1eDAwXFxuLVxcbi1UaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cXG4tXFxuLUZvciBlYWNoIGRldmljZSBjb25uZWN0ZWQgdG8gYSBTUEkgYnVzLCBkZWZpbmUgYSBjaGlsZCBub2RlIHdpdGhpblxcbi10aGUgU1BJIG1hc3RlciBub2RlLlxcbi1cXG4tUmVxdWlyZWQgcHJvcGVydGllczpcXG4tLSBjb21wYXRpYmxlOiBTaG91bGQgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgc3RyaW5nczpcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTEwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTIwMFxcXCJcXG4tXFx0ICAgICAgXFxcIndpem5ldCx3NTUwMFxcXCJcXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cXG4tLSBpbnRlcnJ1cHRzOiBTcGVjaWZ5IHRoZSBpbnRlcnJ1cHQgaW5kZXggd2l0aGluIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciAocmVmZXJyZWRcXG4tICAgICAgICAgICAgICB0byBhYm92ZSBpbiBpbnRlcnJ1cHQtcGFyZW50KSBhbmQgaW50ZXJydXB0IHR5cGUuIHc1eDAwIG5hdGl2ZWx5XFxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXFxuLSAgICAgICAgICAgICAgbWlnaHQgaW52ZXJ0IHRoZSBzaWduYWwuXFxuLS0gcGluY3RybC1uYW1lczogTGlzdCBvZiBhc3NpZ25lZCBzdGF0ZSBuYW1lcywgc2VlIHBpbmN0cmwgYmluZGluZyBkb2N1bWVudGF0aW9uLlxcbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXFxuLSAgICAgICAgICAgICBzZWUgYWxzbyBnZW5lcmljIGFuZCB5b3VyIHBsYXRmb3JtIHNwZWNpZmljIHBpbmN0cmwgYmluZGluZ1xcbi0gICAgICAgICAgICAgZG9jdW1lbnRhdGlvbi5cXG4tXFxuLU9wdGlvbmFsIHByb3BlcnRpZXM6XFxuLS0gc3BpLW1heC1mcmVxdWVuY3k6IE1heGltdW0gZnJlcXVlbmN5IG9mIHRoZSBTUEkgYnVzIHdoZW4gYWNjZXNzaW5nIHRoZSB3NTUwMC5cXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXFxuLSAgYm9hcmQgZGVzaWducyBtYXkgbmVlZCB0byBsaW1pdCB0aGlzIHZhbHVlLlxcbi0tIGxvY2FsLW1hYy1hZGRyZXNzOiBTZWUgZXRoZXJuZXQudHh0IGluIHRoZSBzYW1lIGRpcmVjdG9yeS5cXG4tXFxuLVxcbi1FeGFtcGxlIChmb3IgUmFzcGJlcnJ5IFBpIHdpdGggcGluIGNvbnRyb2wgc3R1ZmYgZm9yIEdQSU8gaXJxKTpcXG4tXFxuLVxcdTAwMjZzcGkge1xcbi1cXHRldGhlcm5ldEAwOiB3NTUwMEAwIHtcXG4tXFx0XFx0Y29tcGF0aWJsZSA9IFxcXCJ3aXpuZXQsdzU1MDBcXFwiO1xcbi1cXHRcXHRyZWcgPSBcXHUwMDNjMFxcdTAwM2U7XFxuLVxcdFxcdHBpbmN0cmwtbmFtZXMgPSBcXFwiZGVmYXVsdFxcXCI7XFxuLVxcdFxcdHBpbmN0cmwtMCA9IFxcdTAwM2NcXHUwMDI2ZXRoMV9waW5zXFx1MDAzZTtcXG4tXFx0XFx0aW50ZXJydXB0LXBhcmVudCA9IFxcdTAwM2NcXHUwMDI2Z3Bpb1xcdTAwM2U7XFxuLVxcdFxcdGludGVycnVwdHMgPSBcXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXFx1MDAzZTtcXG4tXFx0XFx0c3BpLW1heC1mcmVxdWVuY3kgPSBcXHUwMDNjMzAwMDAwMDBcXHUwMDNlO1xcbi1cXHR9O1xcbi19O1xcbi1cXG4tXFx1MDAyNmdwaW8ge1xcbi1cXHRldGgxX3BpbnM6IGV0aDFfcGlucyB7XFxuLVxcdFxcdGJyY20scGlucyA9IFxcdTAwM2MyNVxcdTAwM2U7XFxuLVxcdFxcdGJyY20sZnVuY3Rpb24gPSBcXHUwMDNjMFxcdTAwM2U7IC8qIGluICovXFxuLVxcdFxcdGJyY20scHVsbCA9IFxcdTAwM2MwXFx1MDAzZTsgLyogbm9uZSAqL1xcbi1cXHR9O1xcbi19O1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuaW5kZXggNTNkOGRjNjQyZmJkNi4uYjU5NzZkNWU2YzYwYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXFxuQEAgLTIxLDYgKzIxLDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pb3BvcnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJvcGVydHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcInc1MTAwLmhcXFwiXFxuQEAgLTEyNCw2ICsxMjUsOCBAQCBNT0RVTEVfTElDRU5TRShcXFwiR1BMXFxcIik7XFxuICAqL1xcbiAjZGVmaW5lIFc1NTAwX1NJTVJcXHRcXHQweDAwMTggLyogU29ja2V0IEludGVycnVwdCBNYXNrIFJlZ2lzdGVyICovXFxuICNkZWZpbmUgVzU1MDBfUlRSXFx0XFx0MHgwMDE5IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cXG4rI2RlZmluZSBXNTUwMF9QSFlDRkdSXFx0XFx0MHgwMDJlIC8qIFBIWSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovXFxuKyNkZWZpbmUgICBQSFlDRkdSX0xOS1xcdFxcdCAgMHgwMSAvKiBMaW5rIHN0YXR1cyAqL1xcbiBcXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXFx0XFx0MHgxMDAwMFxcbiBcXG5AQCAtMTU0LDYgKzE1Nyw3IEBAIHN0cnVjdCB3NTEwMF9wcml2IHtcXG4gXFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xcbiBcXG4gXFx0aW50IGlycTtcXG4rXFx0aW50IGxpbmtfaXJxO1xcbiBcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2O1xcbkBAIC0zNDUsNiArMzQ5LDIwIEBAIHN0YXRpYyB2b2lkIHc1NTAwX21lbW9yeV9jb25maWd1cmUoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGludCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuK3tcXG4rXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFx0aW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7XFxuK1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRuZXRpZl9lcnIocHJpdiwgbGluaywgbmRldixcXG4rXFx0XFx0XFx0ICBcXFwiZmFpbGVkIHRvIHJlYWQgbGluayBzdGF0dXM6ICVkXFxcXG5cXFwiLCByZXQpO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHJldCBcXHUwMDI2IFBIWUNGR1JfTE5LO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHUzMiBydHI7XFxuQEAgLTQxNCw2ICs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuIFxcdFxcdHNpemVvZihpbmZvLVxcdTAwM2VidXNfaW5mbykpO1xcbiB9XFxuIFxcbitzdGF0aWMgdTMyIHc1MTAwX2dldF9saW5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbit7XFxuK1xcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkID09IFc1NTAwKVxcbitcXHRcXHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xcbitcXG4rXFx0cmV0dXJuIDE7XFxuK31cXG4rXFxuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuQEAgLTYxNiw2ICs2NDQsMjQgQEAgc3RhdGljIGlycXJldHVybl90IHc1MTAwX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxcbiBcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuIH1cXG4gXFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcXG4rXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4rXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuK1xcdFxcdGlmICh3NTEwMF9nZXRfbGluayhuZGV2KSkge1xcbitcXHRcXHRcXHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFxcXCJsaW5rIGlzIHVwXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bmV0aWZfaW5mbyhwcml2LCBsaW5rLCBuZGV2LCBcXFwibGluayBpcyBkb3duXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCB3NTEwMF9zZXRyeF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgdzUxMDBfcHJpdixcXG5AQCAtNjU5LDYgKzcwNSwxNSBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHc1MTAwX2h3X3N0YXJ0KHByaXYpO1xcbiBcXHRuYXBpX2VuYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKG5kZXYpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGVuYWJsZV9pcnEocHJpdi1cXHUwMDNlbGlua19pcnEpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCAhPSBXNTUwMCB8fCB3NTUwMF9nZXRfcGh5Y2Zncl9sbmsobmRldikpXFxuK1xcdFxcdG5ldGlmX2NhcnJpZXJfb24obmRldik7XFxuK1xcdGVsc2VcXG4rXFx0XFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtNjY3LDYgKzcyMiwxMCBAQCBzdGF0aWMgaW50IHc1MTAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbiBcXHRuZXRpZl9pbmZvKHByaXYsIGlmZG93biwgbmRldiwgXFxcInNodXR0aW5nIGRvd25cXFxcblxcXCIpO1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGRpc2FibGVfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxKTtcXG4rXFxuIFxcdHc1MTAwX2h3X2Nsb3NlKHByaXYpO1xcbiBcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4gXFx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcXG5AQCAtNjc4LDYgKzczNyw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgdzUxMDBfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfZHJ2aW5mb1xcdFxcdD0gdzUxMDBfZ2V0X2RydmluZm8sXFxuIFxcdC5nZXRfbXNnbGV2ZWxcXHRcXHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcXG4gXFx0LnNldF9tc2dsZXZlbFxcdFxcdD0gdzUxMDBfc2V0X21zZ2xldmVsLFxcbitcXHQuZ2V0X2xpbmtcXHRcXHQ9IHc1MTAwX2dldF9saW5rLFxcbiBcXHQuZ2V0X3JlZ3NfbGVuXFx0XFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXFxuIFxcdC5nZXRfcmVnc1xcdFxcdD0gdzUxMDBfZ2V0X3JlZ3MsXFxuIH07XFxuQEAgLTc0NSwxMyArODA1LDIxIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGVyciA9IC1FSU5WQUw7XFxuLVxcdFxcdGdvdG8gZXJyX3JlZ2lzdGVyO1xcbitcXHRcXHRnb3RvIGVycl93cTtcXG4gXFx0fVxcbiBcXG4gXFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuIFxcdHByaXYtXFx1MDAzZW9wcyA9IG9wcztcXG4gXFx0cHJpdi1cXHUwMDNlaXJxID0gaXJxO1xcbiBcXG4rXFx0cHJpdi1cXHUwMDNlbGlua19pcnEgPSBvcHMtXFx1MDAzZWNoaXBfaWQgPT0gVzU1MDAgP1xcbitcXHRcXHRcXHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XFxuK1xcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSA9PSAtRVBST0JFX0RFRkVSKSB7XFxuK1xcdFxcdGVyciA9IGRldl9lcnJfcHJvYmUoZGV2LCBwcml2LVxcdTAwM2VsaW5rX2lycSxcXG4rXFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxcXG5cXFwiKTtcXG4rXFx0XFx0Z290byBlcnJfd3E7XFxuK1xcdH1cXG4rXFxuIFxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcXG4gXFx0bmRldi1cXHUwMDNlZXRodG9vbF9vcHMgPSBcXHUwMDI2dzUxMDBfZXRodG9vbF9vcHM7XFxuIFxcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XFxuQEAgLTc2MSwxMiArODI5LDggQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbiBcXHQgKi9cXG4gXFx0bmRldi1cXHUwMDNlZmVhdHVyZXMgfD0gTkVUSUZfRl9WTEFOX0NIQUxMRU5HRUQ7XFxuIFxcbi1cXHRlcnIgPSByZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuLVxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi1cXHRcXHRnb3RvIGVycl9yZWdpc3RlcjtcXG4tXFxuIFxcdHByaXYtXFx1MDAzZXhmZXJfd3EgPSBhbGxvY193b3JrcXVldWUoXFxcIiVzXFxcIiwgV1FfTUVNX1JFQ0xBSU0gfCBXUV9QRVJDUFUsIDAsXFxuLVxcdFxcdFxcdFxcdFxcdG5ldGRldl9uYW1lKG5kZXYpKTtcXG4rXFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoZGV2KSk7XFxuIFxcdGlmICghcHJpdi1cXHUwMDNleGZlcl93cSkge1xcbiBcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiBcXHRcXHRnb3RvIGVycl93cTtcXG5AQCAtNzk1LDIxICs4NTksMzkgQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbiBcXHRpZiAob3BzLVxcdTAwM2VtYXlfc2xlZXApIHtcXG4gXFx0XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcXG4rXFx0XFx0XFx0XFx0XFx0ICAgZGV2X25hbWUoZGV2KSwgbmRldik7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGVyciA9IHJlcXVlc3RfaXJxKHByaXYtXFx1MDAzZWlycSwgdzUxMDBfaW50ZXJydXB0LFxcbi1cXHRcXHRcXHRcXHQgIElSUUZfVFJJR0dFUl9MT1csIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcXG4rXFx0XFx0XFx0XFx0ICBJUlFGX1RSSUdHRVJfTE9XLCBkZXZfbmFtZShkZXYpLCBuZGV2KTtcXG4gXFx0fVxcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRnb3RvIGVycl9odztcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSBcXHUwMDNlPSAwKSB7XFxuK1xcdFxcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxLCBOVUxMLFxcbitcXHRcXHRcXHRcXHRcXHQgICB3NTEwMF9kZXRlY3RfbGluayxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVJRRl9UUklHR0VSX1JJU0lORyB8XFxuK1xcdFxcdFxcdFxcdFxcdCAgIElSUUZfVFJJR0dFUl9GQUxMSU5HIHxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgSVJRRl9PTkVTSE9UIHwgSVJRRl9OT19BVVRPRU4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJ3NTEwMC1saW5rXFxcIiwgcHJpdi1cXHUwMDNlbmRldik7XFxuK1xcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRnb3RvIGVycl9saW5rX2lycTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbitcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4rXFx0XFx0Z290byBlcnJfcmVnaXN0ZXI7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9yZWdpc3RlcjpcXG4rXFx0aWYgKHByaXYtXFx1MDAzZWxpbmtfaXJxIFxcdTAwM2U9IDApXFxuK1xcdFxcdGZyZWVfaXJxKHByaXYtXFx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcXG4rZXJyX2xpbmtfaXJxOlxcbitcXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbiBlcnJfaHc6XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHByaXYtXFx1MDAzZXhmZXJfd3EpO1xcbiBlcnJfd3E6XFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbi1lcnJfcmVnaXN0ZXI6XFxuIFxcdGZyZWVfbmV0ZGV2KG5kZXYpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuQEAgLTgyMCw2ICs5MDIsMTMgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbiBcXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgXFx1MDAzZT0gMCkge1xcbitcXHRcXHRmcmVlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSwgbmRldik7XFxuK1xcdFxcdHByaXYtXFx1MDAzZWxpbmtfaXJxID0gLUVOT0RFVjtcXG4rXFx0fVxcbitcXG4gXFx0dzUxMDBfaHdfcmVzZXQocHJpdik7XFxuIFxcdGZyZWVfaXJxKHByaXYtXFx1MDAzZWlycSwgbmRldik7XFxuIFxcbkBAIC04MjcsNyArOTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRmbHVzaF93b3JrKFxcdTAwMjZwcml2LVxcdTAwM2VyZXN0YXJ0X3dvcmspO1xcbiBcXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVxcdTAwM2V4ZmVyX3dxKTtcXG4gXFxuLVxcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xcbiBcXHRmcmVlX25ldGRldihuZGV2KTtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9yZW1vdmUpO1xcbkBAIC04MzksNiArOTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuIFxcdGlmIChuZXRpZl9ydW5uaW5nKG5kZXYpKSB7XFxuK1xcdFxcdGlmIChwcml2LVxcdTAwM2VsaW5rX2lycSBcXHUwMDNlPSAwKVxcbitcXHRcXHRcXHRkaXNhYmxlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSk7XFxuK1xcbiBcXHRcXHRuZXRpZl9jYXJyaWVyX29mZihuZGV2KTtcXG4gXFx0XFx0bmV0aWZfZGV2aWNlX2RldGFjaChuZGV2KTtcXG4gXFxuQEAgLTg1Nyw2ICs5NDgsMTIgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxcbiBcXHRcXHR3NTEwMF9od19zdGFydChwcml2KTtcXG4gXFxuIFxcdFxcdG5ldGlmX2RldmljZV9hdHRhY2gobmRldik7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgXFx1MDAzZT0gMClcXG4rXFx0XFx0XFx0ZW5hYmxlX2lycShwcml2LVxcdTAwM2VsaW5rX2lycSk7XFxuK1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcXG4rXFx0XFx0XFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDowOC4yNjM4NzUwODhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NDQ2NDkxNTQzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIFdpem5ldCBXNTEwMC9XNTIwMC9XNTUwMCBTUEkgRXRoZXJuZXQgY29udHJvbGxlciBkcml2ZXIgdG8gYWRkIGxpbmsgaW50ZXJydXB0IHN1cHBvcnQuIFRoaXMgZHJpdmVyIHJlcXVpcmVzIHBoeXNpY2FsIFNQSSBoYXJkd2FyZSB0aGF0IGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEdXJpbmcgcHJvYmUsIHRoZSBkcml2ZXIgdmVyaWZpZXMgdGhlIHByZXNlbmNlIG9mIHRoZSBoYXJkd2FyZSBieSByZWFkaW5nIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgKFJUUl9ERUZBVUxUKS4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgb3IgYSBzcGVjaWZpYyBlbXVsYXRvciwgdGhlIHByb2JlIHdpbGwgZmFpbCwgbWFraW5nIHRoZSBtb2RpZmllZCBjb2RlIHBhdGhzIChzdWNoIGFzIHc1MTAwX2RldGVjdF9saW5rLCB3NTEwMF9vcGVuLCBhbmQgdzUxMDBfc3RvcCkgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDQ0MTlkYTI5NTg4MDFlZGRlMDY5Y2NiMjUyOTNhYmI5MWFkNGU5OTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAxMyAxMDowNDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1MTAwLnlhbWwgYi9Eb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L3dpem5ldCx3NTEwMC55YW1sXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uODFmNDM4MmViOTZjNVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzUxMDAueWFtbFxuQEAgLTAsMCArMSw5MSBAQFxuKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IChHUEwtMi4wLW9ubHkgT1IgQlNELTItQ2xhdXNlKVxuKyVZQU1MIDEuMlxuKy0tLVxuKyRpZDogaHR0cDovL2RldmljZXRyZWUub3JnL3NjaGVtYXMvbmV0L3dpem5ldCx3NTEwMC55YW1sI1xuKyRzY2hlbWE6IGh0dHA6Ly9kZXZpY2V0cmVlLm9yZy9tZXRhLXNjaGVtYXMvY29yZS55YW1sI1xuK1xuK3RpdGxlOiBXaXpuZXQgdzUxMDAvdzUyMDAvdzU1MDAgU1BJIEV0aGVybmV0IENvbnRyb2xsZXJcbitcbittYWludGFpbmVyczpcbisgIC0gQXJ0aHVyIENyw6lwaW4gTGVibG9uZCBcdTAwM2NhcnRodXJAbWFybW90dHVzLm5ldFx1MDAzZVxuK1xuK2Rlc2NyaXB0aW9uOiB8XG4rICBUaGlzIGlzIGEgc3RhbmRhbG9uZSAxMC8xMDAgTUJpdCBFdGhlcm5ldCBjb250cm9sbGVyIHdpdGggU1BJIGludGVyZmFjZS5cbitcbithbGxPZjpcbisgIC0gJHJlZjogL3NjaGVtYXMvbmV0L2V0aGVybmV0LWNvbnRyb2xsZXIueWFtbCNcbisgIC0gJHJlZjogL3NjaGVtYXMvc3BpL3NwaS1wZXJpcGhlcmFsLXByb3BzLnlhbWwjXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSB3aXpuZXQsdzU1MDBcbisgICAgdGhlbjpcbisgICAgICBwcm9wZXJ0aWVzOlxuKyAgICAgICAgaW50ZXJydXB0czpcbisgICAgICAgICAgbWluSXRlbXM6IDFcbisgICAgICAgICAgaXRlbXM6XG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjogTWFpbiBpbnRlcnJ1cHQgKElOVCBwaW4gb24gdGhlIGRldmljZSkuXG4rICAgICAgICAgICAgLSBkZXNjcmlwdGlvbjpcbisgICAgICAgICAgICAgICAgT3B0aW9uYWwgaW50ZXJydXB0IGZvciBsaW5rIHN0YXR1cyBjaGFuZ2VzIChMSU5LTEVEIHBpbiBvblxuKyAgICAgICAgICAgICAgICB3NTUwMCkuXG4rICAtIGlmOlxuKyAgICAgIHByb3BlcnRpZXM6XG4rICAgICAgICBjb21wYXRpYmxlOlxuKyAgICAgICAgICBjb250YWluczpcbisgICAgICAgICAgICBlbnVtOlxuKyAgICAgICAgICAgICAgLSB3aXpuZXQsdzUxMDBcbisgICAgICAgICAgICAgIC0gd2l6bmV0LHc1MjAwXG4rICAgIHRoZW46XG4rICAgICAgcHJvcGVydGllczpcbisgICAgICAgIGludGVycnVwdHM6XG4rICAgICAgICAgIGl0ZW1zOlxuKyAgICAgICAgICAgIC0gZGVzY3JpcHRpb246IE1haW4gaW50ZXJydXB0IChJTlQgcGluIG9uIHRoZSBkZXZpY2UpLlxuK1xuK3Byb3BlcnRpZXM6XG4rICBjb21wYXRpYmxlOlxuKyAgICBlbnVtOlxuKyAgICAgIC0gd2l6bmV0LHc1MTAwXG4rICAgICAgLSB3aXpuZXQsdzUyMDBcbisgICAgICAtIHdpem5ldCx3NTUwMFxuK1xuKyAgcmVnOlxuKyAgICBtYXhJdGVtczogMVxuK1xuKyAgc3BpLW1heC1mcmVxdWVuY3k6XG4rICAgIGRlc2NyaXB0aW9uOlxuKyAgICAgIEFjY29yZGluZyB0byB0aGUgdzU1MDAgZGF0YXNoZWV0LCB0aGUgY2hpcCBhbGxvd3MgYSBtYXhpbXVtIG9mIDgwIE1IeixcbisgICAgICBob3dldmVyLCBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4rICAgIG1heGltdW06IDgwMDAwMDAwXG4rXG4rcmVxdWlyZWQ6XG4rICAtIGNvbXBhdGlibGVcbisgIC0gcmVnXG4rICAtIGludGVycnVwdHNcbitcbit1bmV2YWx1YXRlZFByb3BlcnRpZXM6IGZhbHNlXG4rXG4rZXhhbXBsZXM6XG4rICAtIHxcbisgICAgLyogRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSkgKi9cbitcbisgICAgI2luY2x1ZGUgXHUwMDNjZHQtYmluZGluZ3MvaW50ZXJydXB0LWNvbnRyb2xsZXIvaXJxLmhcdTAwM2VcbitcbisgICAgc3BpIHtcbisgICAgICAgICNhZGRyZXNzLWNlbGxzID0gXHUwMDNjMVx1MDAzZTtcbisgICAgICAgICNzaXplLWNlbGxzID0gXHUwMDNjMFx1MDAzZTtcbitcbisgICAgICAgIGV0aGVybmV0QDAge1xuKyAgICAgICAgICAgIGNvbXBhdGlibGUgPSBcIndpem5ldCx3NTUwMFwiO1xuKyAgICAgICAgICAgIHJlZyA9IFx1MDAzYzBcdTAwM2U7XG4rICAgICAgICAgICAgcGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuKyAgICAgICAgICAgIHBpbmN0cmwtMCA9IFx1MDAzY1x1MDAyNmV0aDFfcGluc1x1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHQtcGFyZW50ID0gXHUwMDNjXHUwMDI2Z3Bpb1x1MDAzZTtcbisgICAgICAgICAgICBpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlLFxuKyAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MyNCBJUlFfVFlQRV9FREdFX0JPVEhcdTAwM2U7XG4rICAgICAgICAgICAgc3BpLW1heC1mcmVxdWVuY3kgPSBcdTAwM2MzMDAwMDAwMFx1MDAzZTtcbisgICAgICAgICAgICBsb2NhbC1tYWMtYWRkcmVzcyA9IFsgYTAgYjAgYzAgZDAgZTAgZjAgXTtcbisgICAgICAgIH07XG4rICAgIH07XG4rLi4uXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0IGIvRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC93aXpuZXQsdzV4MDAudHh0XG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IGU5NjY1Nzk4YzRiZTYuLjAwMDAwMDAwMDAwMDBcbi0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvd2l6bmV0LHc1eDAwLnR4dFxuKysrIC9kZXYvbnVsbFxuQEAgLTEsNTAgKzAsMCBAQFxuLSogV2l6bmV0IHc1eDAwXG4tXG4tVGhpcyBpcyBhIHN0YW5kYWxvbmUgMTAvMTAwIE1CaXQgRXRoZXJuZXQgY29udHJvbGxlciB3aXRoIFNQSSBpbnRlcmZhY2UuXG4tXG4tRm9yIGVhY2ggZGV2aWNlIGNvbm5lY3RlZCB0byBhIFNQSSBidXMsIGRlZmluZSBhIGNoaWxkIG5vZGUgd2l0aGluXG4tdGhlIFNQSSBtYXN0ZXIgbm9kZS5cbi1cbi1SZXF1aXJlZCBwcm9wZXJ0aWVzOlxuLS0gY29tcGF0aWJsZTogU2hvdWxkIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZ3M6XG4tXHQgICAgICBcIndpem5ldCx3NTEwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTIwMFwiXG4tXHQgICAgICBcIndpem5ldCx3NTUwMFwiXG4tLSByZWc6IFNwZWNpZnkgdGhlIFNQSSBjaGlwIHNlbGVjdCB0aGUgY2hpcCBpcyB3aXJlZCB0by5cbi0tIGludGVycnVwdHM6IFNwZWNpZnkgdGhlIGludGVycnVwdCBpbmRleCB3aXRoaW4gdGhlIGludGVycnVwdCBjb250cm9sbGVyIChyZWZlcnJlZFxuLSAgICAgICAgICAgICAgdG8gYWJvdmUgaW4gaW50ZXJydXB0LXBhcmVudCkgYW5kIGludGVycnVwdCB0eXBlLiB3NXgwMCBuYXRpdmVseVxuLSAgICAgICAgICAgICAgZ2VuZXJhdGVzIGZhbGxpbmcgZWRnZSBpbnRlcnJ1cHRzLCBob3dldmVyLCBhZGRpdGlvbmFsIGJvYXJkIGxvZ2ljXG4tICAgICAgICAgICAgICBtaWdodCBpbnZlcnQgdGhlIHNpZ25hbC5cbi0tIHBpbmN0cmwtbmFtZXM6IExpc3Qgb2YgYXNzaWduZWQgc3RhdGUgbmFtZXMsIHNlZSBwaW5jdHJsIGJpbmRpbmcgZG9jdW1lbnRhdGlvbi5cbi0tIHBpbmN0cmwtMDogTGlzdCBvZiBwaGFuZGxlcyB0byBjb25maWd1cmUgdGhlIEdQSU8gcGluIHVzZWQgYXMgaW50ZXJydXB0IGxpbmUsXG4tICAgICAgICAgICAgIHNlZSBhbHNvIGdlbmVyaWMgYW5kIHlvdXIgcGxhdGZvcm0gc3BlY2lmaWMgcGluY3RybCBiaW5kaW5nXG4tICAgICAgICAgICAgIGRvY3VtZW50YXRpb24uXG4tXG4tT3B0aW9uYWwgcHJvcGVydGllczpcbi0tIHNwaS1tYXgtZnJlcXVlbmN5OiBNYXhpbXVtIGZyZXF1ZW5jeSBvZiB0aGUgU1BJIGJ1cyB3aGVuIGFjY2Vzc2luZyB0aGUgdzU1MDAuXG4tICBBY2NvcmRpbmcgdG8gdGhlIHc1NTAwIGRhdGFzaGVldCwgdGhlIGNoaXAgYWxsb3dzIGEgbWF4aW11bSBvZiA4MCBNSHosIGhvd2V2ZXIsXG4tICBib2FyZCBkZXNpZ25zIG1heSBuZWVkIHRvIGxpbWl0IHRoaXMgdmFsdWUuXG4tLSBsb2NhbC1tYWMtYWRkcmVzczogU2VlIGV0aGVybmV0LnR4dCBpbiB0aGUgc2FtZSBkaXJlY3RvcnkuXG4tXG4tXG4tRXhhbXBsZSAoZm9yIFJhc3BiZXJyeSBQaSB3aXRoIHBpbiBjb250cm9sIHN0dWZmIGZvciBHUElPIGlycSk6XG4tXG4tXHUwMDI2c3BpIHtcbi1cdGV0aGVybmV0QDA6IHc1NTAwQDAge1xuLVx0XHRjb21wYXRpYmxlID0gXCJ3aXpuZXQsdzU1MDBcIjtcbi1cdFx0cmVnID0gXHUwMDNjMFx1MDAzZTtcbi1cdFx0cGluY3RybC1uYW1lcyA9IFwiZGVmYXVsdFwiO1xuLVx0XHRwaW5jdHJsLTAgPSBcdTAwM2NcdTAwMjZldGgxX3BpbnNcdTAwM2U7XG4tXHRcdGludGVycnVwdC1wYXJlbnQgPSBcdTAwM2NcdTAwMjZncGlvXHUwMDNlO1xuLVx0XHRpbnRlcnJ1cHRzID0gXHUwMDNjMjUgSVJRX1RZUEVfRURHRV9GQUxMSU5HXHUwMDNlO1xuLVx0XHRzcGktbWF4LWZyZXF1ZW5jeSA9IFx1MDAzYzMwMDAwMDAwXHUwMDNlO1xuLVx0fTtcbi19O1xuLVxuLVx1MDAyNmdwaW8ge1xuLVx0ZXRoMV9waW5zOiBldGgxX3BpbnMge1xuLVx0XHRicmNtLHBpbnMgPSBcdTAwM2MyNVx1MDAzZTtcbi1cdFx0YnJjbSxmdW5jdGlvbiA9IFx1MDAzYzBcdTAwM2U7IC8qIGluICovXG4tXHRcdGJyY20scHVsbCA9IFx1MDAzYzBcdTAwM2U7IC8qIG5vbmUgKi9cbi1cdH07XG4tfTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5pbmRleCA1M2Q4ZGM2NDJmYmQ2Li5iNTk3NmQ1ZTZjNjBjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb3BvcnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcHJvcGVydHkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lycS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJ3NTEwMC5oXCJcbkBAIC0xMjQsNiArMTI1LDggQEAgTU9EVUxFX0xJQ0VOU0UoXCJHUExcIik7XG4gICovXG4gI2RlZmluZSBXNTUwMF9TSU1SXHRcdDB4MDAxOCAvKiBTb2NrZXQgSW50ZXJydXB0IE1hc2sgUmVnaXN0ZXIgKi9cbiAjZGVmaW5lIFc1NTAwX1JUUlx0XHQweDAwMTkgLyogUmV0cnkgVGltZS12YWx1ZSBSZWdpc3RlciAqL1xuKyNkZWZpbmUgVzU1MDBfUEhZQ0ZHUlx0XHQweDAwMmUgLyogUEhZIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIgKi9cbisjZGVmaW5lICAgUEhZQ0ZHUl9MTktcdFx0ICAweDAxIC8qIExpbmsgc3RhdHVzICovXG4gXG4gI2RlZmluZSBXNTUwMF9TMF9SRUdTXHRcdDB4MTAwMDBcbiBcbkBAIC0xNTQsNiArMTU3LDcgQEAgc3RydWN0IHc1MTAwX3ByaXYge1xuIFx0dTE2IHMwX3J4X2J1Zl9zaXplO1xuIFxuIFx0aW50IGlycTtcbitcdGludCBsaW5rX2lycTtcbiBcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXY7XG5AQCAtMzQ1LDYgKzM0OSwyMCBAQCBzdGF0aWMgdm9pZCB3NTUwMF9tZW1vcnlfY29uZmlndXJlKHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxuIFx0fVxuIH1cbiBcbitzdGF0aWMgaW50IHc1NTAwX2dldF9waHljZmdyX2xuayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbit7XG4rXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuK1x0aW50IHJldCA9IHc1MTAwX3JlYWQocHJpdiwgVzU1MDBfUEhZQ0ZHUik7XG4rXG4rXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4rXHRcdG5ldGlmX2Vycihwcml2LCBsaW5rLCBuZGV2LFxuK1x0XHRcdCAgXCJmYWlsZWQgdG8gcmVhZCBsaW5rIHN0YXR1czogJWRcXG5cIiwgcmV0KTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4rXHRyZXR1cm4gcmV0IFx1MDAyNiBQSFlDRkdSX0xOSztcbit9XG4rXG4gc3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcbiB7XG4gXHR1MzIgcnRyO1xuQEAgLTQxNCw2ICs0MzIsMTYgQEAgc3RhdGljIHZvaWQgdzUxMDBfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4gXHRcdHNpemVvZihpbmZvLVx1MDAzZWJ1c19pbmZvKSk7XG4gfVxuIFxuK3N0YXRpYyB1MzIgdzUxMDBfZ2V0X2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4re1xuK1x0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkID09IFc1NTAwKVxuK1x0XHRyZXR1cm4gdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKG5kZXYpO1xuK1xuK1x0cmV0dXJuIDE7XG4rfVxuK1xuIHN0YXRpYyB1MzIgdzUxMDBfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIHtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG5AQCAtNjE2LDYgKzY0NCwyNCBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgdzUxMDBfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKm5kZXZfaW5zdGFuY2UpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuK3N0YXRpYyBpcnFyZXR1cm5fdCB3NTEwMF9kZXRlY3RfbGluayhpbnQgaXJxLCB2b2lkICpuZGV2X2luc3RhbmNlKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2ID0gbmRldl9pbnN0YW5jZTtcbitcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4rXG4rXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAodzUxMDBfZ2V0X2xpbmsobmRldikpIHtcbitcdFx0XHRuZXRpZl9pbmZvKHByaXYsIGxpbmssIG5kZXYsIFwibGluayBpcyB1cFxcblwiKTtcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG5ldGlmX2luZm8ocHJpdiwgbGluaywgbmRldiwgXCJsaW5rIGlzIGRvd25cXG5cIik7XG4rXHRcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiBJUlFfSEFORExFRDtcbit9XG4rXG4gc3RhdGljIHZvaWQgdzUxMDBfc2V0cnhfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuIFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHc1MTAwX3ByaXYsXG5AQCAtNjU5LDYgKzcwNSwxNSBAQCBzdGF0aWMgaW50IHc1MTAwX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnByaXYtXHUwMDNlbmFwaSk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbitcdFx0ZW5hYmxlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxKTtcbitcbitcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbitcdFx0bmV0aWZfY2Fycmllcl9vbihuZGV2KTtcbitcdGVsc2VcbitcdFx0bmV0aWZfY2Fycmllcl9vZmYobmRldik7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNjY3LDYgKzcyMiwxMCBAQCBzdGF0aWMgaW50IHc1MTAwX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuIFx0bmV0aWZfaW5mbyhwcml2LCBpZmRvd24sIG5kZXYsIFwic2h1dHRpbmcgZG93blxcblwiKTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMClcbitcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4gXHR3NTEwMF9od19jbG9zZShwcml2KTtcbiBcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xuIFx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbkBAIC02NzgsNiArNzM3LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyB3NTEwMF9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfZHJ2aW5mb1x0XHQ9IHc1MTAwX2dldF9kcnZpbmZvLFxuIFx0LmdldF9tc2dsZXZlbFx0XHQ9IHc1MTAwX2dldF9tc2dsZXZlbCxcbiBcdC5zZXRfbXNnbGV2ZWxcdFx0PSB3NTEwMF9zZXRfbXNnbGV2ZWwsXG4rXHQuZ2V0X2xpbmtcdFx0PSB3NTEwMF9nZXRfbGluayxcbiBcdC5nZXRfcmVnc19sZW5cdFx0PSB3NTEwMF9nZXRfcmVnc19sZW4sXG4gXHQuZ2V0X3JlZ3NcdFx0PSB3NTEwMF9nZXRfcmVncyxcbiB9O1xuQEAgLTc0NSwxMyArODA1LDIxIEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRlcnIgPSAtRUlOVkFMO1xuLVx0XHRnb3RvIGVycl9yZWdpc3RlcjtcbitcdFx0Z290byBlcnJfd3E7XG4gXHR9XG4gXG4gXHRwcml2LVx1MDAzZW5kZXYgPSBuZGV2O1xuIFx0cHJpdi1cdTAwM2VvcHMgPSBvcHM7XG4gXHRwcml2LVx1MDAzZWlycSA9IGlycTtcbiBcbitcdHByaXYtXHUwMDNlbGlua19pcnEgPSBvcHMtXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XG4rXHRcdFx0IGZ3bm9kZV9pcnFfZ2V0KGRldl9md25vZGUoZGV2KSwgMSkgOiAtRU5PREVWO1xuK1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xuK1x0XHRlcnIgPSBkZXZfZXJyX3Byb2JlKGRldiwgcHJpdi1cdTAwM2VsaW5rX2lycSxcbitcdFx0XHRcdCAgICBcImZhaWxlZCB0byBnZXQgbGluayBpcnFcXG5cIik7XG4rXHRcdGdvdG8gZXJyX3dxO1xuK1x0fVxuK1xuIFx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2dzUxMDBfbmV0ZGV2X29wcztcbiBcdG5kZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcbiBcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcdTAwMjZwcml2LVx1MDAzZW5hcGksIHc1MTAwX25hcGlfcG9sbCwgMTYpO1xuQEAgLTc2MSwxMiArODI5LDggQEAgaW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxuIFx0ICovXG4gXHRuZGV2LVx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEO1xuIFxuLVx0ZXJyID0gcmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuLVx0aWYgKGVyciBcdTAwM2MgMClcbi1cdFx0Z290byBlcnJfcmVnaXN0ZXI7XG4tXG4gXHRwcml2LVx1MDAzZXhmZXJfd3EgPSBhbGxvY193b3JrcXVldWUoXCIlc1wiLCBXUV9NRU1fUkVDTEFJTSB8IFdRX1BFUkNQVSwgMCxcbi1cdFx0XHRcdFx0bmV0ZGV2X25hbWUobmRldikpO1xuK1x0XHRcdFx0XHRkZXZfbmFtZShkZXYpKTtcbiBcdGlmICghcHJpdi1cdTAwM2V4ZmVyX3dxKSB7XG4gXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gZXJyX3dxO1xuQEAgLTc5NSwyMSArODU5LDM5IEBAIGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcbiBcdGlmIChvcHMtXHUwMDNlbWF5X3NsZWVwKSB7XG4gXHRcdGVyciA9IHJlcXVlc3RfdGhyZWFkZWRfaXJxKHByaXYtXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXG4gXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9MT1cgfCBJUlFGX09ORVNIT1QsXG4tXHRcdFx0XHRcdCAgIG5ldGRldl9uYW1lKG5kZXYpLCBuZGV2KTtcbitcdFx0XHRcdFx0ICAgZGV2X25hbWUoZGV2KSwgbmRldik7XG4gXHR9IGVsc2Uge1xuIFx0XHRlcnIgPSByZXF1ZXN0X2lycShwcml2LVx1MDAzZWlycSwgdzUxMDBfaW50ZXJydXB0LFxuLVx0XHRcdFx0ICBJUlFGX1RSSUdHRVJfTE9XLCBuZXRkZXZfbmFtZShuZGV2KSwgbmRldik7XG4rXHRcdFx0XHQgIElSUUZfVFJJR0dFUl9MT1csIGRldl9uYW1lKGRldiksIG5kZXYpO1xuIFx0fVxuIFx0aWYgKGVycilcbiBcdFx0Z290byBlcnJfaHc7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApIHtcbitcdFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSwgTlVMTCxcbitcdFx0XHRcdFx0ICAgdzUxMDBfZGV0ZWN0X2xpbmssXG4rXHRcdFx0XHRcdCAgIElSUUZfVFJJR0dFUl9SSVNJTkcgfFxuK1x0XHRcdFx0XHQgICBJUlFGX1RSSUdHRVJfRkFMTElORyB8XG4rXHRcdFx0XHRcdCAgIElSUUZfT05FU0hPVCB8IElSUUZfTk9fQVVUT0VOLFxuK1x0XHRcdFx0XHQgICBcInc1MTAwLWxpbmtcIiwgcHJpdi1cdTAwM2VuZGV2KTtcbitcdFx0aWYgKGVyciBcdTAwM2MgMClcbitcdFx0XHRnb3RvIGVycl9saW5rX2lycTtcbitcdH1cbitcbitcdGVyciA9IHJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdGdvdG8gZXJyX3JlZ2lzdGVyO1xuK1xuIFx0cmV0dXJuIDA7XG4gXG4rZXJyX3JlZ2lzdGVyOlxuK1x0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuK1x0XHRmcmVlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcbitlcnJfbGlua19pcnE6XG4rXHRmcmVlX2lycShwcml2LVx1MDAzZWlycSwgbmRldik7XG4gZXJyX2h3OlxuIFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V4ZmVyX3dxKTtcbiBlcnJfd3E6XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbi1lcnJfcmVnaXN0ZXI6XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiBcdHJldHVybiBlcnI7XG4gfVxuQEAgLTgyMCw2ICs5MDIsMTMgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0c3RydWN0IG5ldF9kZXZpY2UgKm5kZXYgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTtcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4rXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZWxpbmtfaXJxIFx1MDAzZT0gMCkge1xuK1x0XHRmcmVlX2lycShwcml2LVx1MDAzZWxpbmtfaXJxLCBuZGV2KTtcbitcdFx0cHJpdi1cdTAwM2VsaW5rX2lycSA9IC1FTk9ERVY7XG4rXHR9XG4rXG4gXHR3NTEwMF9od19yZXNldChwcml2KTtcbiBcdGZyZWVfaXJxKHByaXYtXHUwMDNlaXJxLCBuZGV2KTtcbiBcbkBAIC04MjcsNyArOTE2LDYgQEAgdm9pZCB3NTEwMF9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0Zmx1c2hfd29yayhcdTAwMjZwcml2LVx1MDAzZXJlc3RhcnRfd29yayk7XG4gXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVx1MDAzZXhmZXJfd3EpO1xuIFxuLVx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcmVtb3ZlKTtcbkBAIC04MzksNiArOTI3LDkgQEAgc3RhdGljIGludCB3NTEwMF9zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHN0cnVjdCB3NTEwMF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4gXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xuK1x0XHRpZiAocHJpdi1cdTAwM2VsaW5rX2lycSBcdTAwM2U9IDApXG4rXHRcdFx0ZGlzYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4gXHRcdG5ldGlmX2NhcnJpZXJfb2ZmKG5kZXYpO1xuIFx0XHRuZXRpZl9kZXZpY2VfZGV0YWNoKG5kZXYpO1xuIFxuQEAgLTg1Nyw2ICs5NDgsMTIgQEAgc3RhdGljIGludCB3NTEwMF9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0XHR3NTEwMF9od19zdGFydChwcml2KTtcbiBcbiBcdFx0bmV0aWZfZGV2aWNlX2F0dGFjaChuZGV2KTtcbitcbitcdFx0aWYgKHByaXYtXHUwMDNlbGlua19pcnEgXHUwMDNlPSAwKVxuK1x0XHRcdGVuYWJsZV9pcnEocHJpdi1cdTAwM2VsaW5rX2lycSk7XG4rXG4rXHRcdGlmIChwcml2LVx1MDAzZW9wcy1cdTAwM2VjaGlwX2lkICE9IFc1NTAwIHx8IHc1NTAwX2dldF9waHljZmdyX2xuayhuZGV2KSlcbitcdFx0XHRuZXRpZl9jYXJyaWVyX29uKG5kZXYpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MDguMjYzODc2NTI4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA0ODg2NTAwNzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQXNzZXNzaW5nIHRoZSBGdXp6YWJpbGl0eSBvZiBhIFdpem5ldCBXNTUwMCBTUEkgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCDigJMgaXQgbG9va3MgbGlrZSBpdCdzIGFkZGluZyBsaW5rIGludGVycnVwdCBzdXBwb3J0IGZvciB0aGUgV2l6bmV0IFc1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyLiBJdCB0b3VjaGVzIHF1aXRlIGEgZmV3IGZ1bmN0aW9ucyBpbiBgdzUxMDAuY2AsIGluY2x1ZGluZyBhbiBJUlEgaGFuZGxlciBhbmQgbW9kaWZpY2F0aW9ucyB0byBwcm9iZSwgb3BlbiwgY2xvc2UsIGFuZCBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9ucy4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyBldmVuIGZ1enphYmxlLCBnaXZlbiB0aGF0IGl0J3MgYW4gU1BJLWJhc2VkIGRyaXZlci5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgY2FuIEkgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVT8gU1BJIGRldmljZXMgY2FuIGJlIGEgcmVhbCBwYWluIHRvIGVtdWxhdGUsIHVubGlrZSBzb21ldGhpbmcgbGlrZSBVU0Igb3IgbmV0d29ya2luZyB0aGF0IGhhcyBtb3JlIG1hdHVyZSBlbXVsYXRpb24gc3VwcG9ydC4gSSBrbm93IFFFTVUgZG9lc24ndCBkaXJlY3RseSBlbXVsYXRlIHRoZSBXaXpuZXQgY2hpcHMsIHNvIHRoYXQncyBhIGh1cmRsZS4gSSdtIHRoaW5raW5nIGFib3V0IHdoZXRoZXIgdGhlcmUncyBzb21lIGNsZXZlciBzb2Z0d2FyZSBlbXVsYXRpb24gdHJpY2sgSSBjb3VsZCB1c2UsIGJ1dCByZWFsaXN0aWNhbGx5LCBTUEkgZHJpdmVycyBhcmUgb2Z0ZW4gaW5oZXJlbnRseSBoYXJkd2FyZS1kZXBlbmRlbnQuXG5cblRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIHRyaWdnZXIgYW55IG9mIHRoZSBuZXcgY29kZSBwYXRocy4gVGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoaXMgaXMgbm90IHBvc3NpYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIENhbiBJIGNyZWF0ZSBhbiBTUEkgZGV2aWNlIGF0IGFsbCBpbiBRRU1VPyBUaGVyZSBtaWdodCBiZSBzb21lIHNvcnQgb2YgU1BJIGNvbnRyb2xsZXIgZW11bGF0aW9uLCBidXQgbm90IGEgVzU1MDAuIENhbiBJIGNyZWF0ZSBpdCB1c2luZyBkZXZpY2UgdHJlZSBvdmVybGF5cyBvciBzeXNmcz8gRXZlbiBpZiBJIGNhbiBpbnN0YW50aWF0ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZSwgdGhlIGRyaXZlciB3aWxsIHRyeSB0byByZWFkIGFuZCB3cml0ZSB0byB0aGUgaGFyZHdhcmUgdmlhIFNQSSBtZXNzYWdlcyBsaWtlIGB3NTEwMF9yZWFkYCBhbmQgYHc1MTAwX3dyaXRlYC4gSWYgdGhlcmUncyBubyBhY3R1YWwgVzU1MDAgaGFyZHdhcmUgcHJlc2VudCwgdGhvc2UgY2FsbHMgd2lsbCBpbmV2aXRhYmx5IGZhaWwsIGFuZCB0aGUgcHJvYmUgd2lsbCBsaWtlbHkgZXJyb3Igb3V0LlxuXG5JIG5lZWQgdG8gc2VlIHdoZXJlIHRoaXMgcHJvYmUgZmFpbHMuIFNwZWNpZmljYWxseSwgbG9va2luZyBhdCBgdzUxMDBfcHJvYmVgIGFuZCBgdzUxMDBfaHdfcmVzZXRgLCBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgbWV0aG9kcyBleHBlY3QgdG8gZ2V0IGEgcmVzcG9uc2UuIEknbSBnb2luZyB0byBsb29rIGF0IHRob3NlIGZ1bmN0aW9ucyBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNgIHRvIHNlZSBpZiBJIGNhbiB1bmRlcnN0YW5kIHRoZSBleHBlY3RlZCBmbG93IGFuZCB3aGVyZSB0aGluZ3MgbWlnaHQgZmFpbC4gSSdtIGxvb2tpbmcgZm9yIGFueSBhc3N1bXB0aW9ucyBhYm91dCBoYXJkd2FyZSByZXNwb25zZXMgb3IgaW5pdGlhbGl6YXRpb24gc3RlcHMgdGhhdCByZWx5IG9uIGFjdHVhbCBjb21tdW5pY2F0aW9uIHdpdGggYSBwaHlzaWNhbCBTUEkgZGV2aWNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjgyLCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguNzUyNTI5NDIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNjY3NTE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInc1MTAwX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTc2MD1FWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9vcHNfcHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjc2MjppbnQgdzUxMDBfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2LCBjb25zdCBzdHJ1Y3QgdzUxMDBfb3BzICpvcHMsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtNzYzLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk3LX1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo4OTg6RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfcHJvYmUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MTguODA1MjAxNzU1WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI2NzExNzg2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYHc1MTAwX3Byb2JlYCBmdW5jdGlvbi4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgdGhpcyBpcyBhIHByb2Jpbmcgcm91dGluZSwgbGlrZWx5IGZvciBhbiBFdGhlcm5ldCBjb250cm9sbGVyLiBJJ2QgZXhwZWN0IGl0J3MgZGVzaWduZWQgdG8gZGV0ZWN0IHRoZSBwcmVzZW5jZSBvZiBhbmQgaW5pdGlhbGl6ZSBhbiBXNTEwMCBjaGlwLCBvciBhIGNvbXBhdGlibGUgZGV2aWNlLiBJIHdvbmRlciB3aGF0IHNwZWNpZmljIGNoZWNrcyBpdCBwZXJmb3Jtcy4gRG9lcyBpdCB1c2UgYSBoYXJkLWNvZGVkIHJlZ2lzdGVyIGFkZHJlc3MgbWFwLCBvciBkb2VzIGl0IGF0dGVtcHQgYW55IGF1dG8tZGV0ZWN0aW9uIG1ldGhvZHM/IElzIGl0IGxvb2tpbmcgZm9yIHNwZWNpZmljIHNpZ25hdHVyZSB2YWx1ZXMgaW4gY2VydGFpbiByZWdpc3RlcnM/XG5cbioqRGl2aW5nIGludG8gYHc1MTAwX3Byb2JlYCoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJJ20gdGFraW5nIGEgbG9vayBhdCB0aGlzIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24gYW5kIGltbWVkaWF0ZWx5LCBteSBleHBlcnQgaW50dWl0aW9uIGtpY2tzIGluLiBHaXZlbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIHRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhbiBpbml0aWFsaXphdGlvbiBhbmQgZGV0ZWN0aW9uIHJvdXRpbmUgZm9yIGEgVzUxMDAgRXRoZXJuZXQgY29udHJvbGxlciwgb3IgYSBjb21wb25lbnQgY29tcGF0aWJsZSB3aXRoIGl0LiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyBydW5uaW5nIHRocm91Z2ggdGhlIGxpa2VseSBzY2VuYXJpb3MuIElzIGl0IGEgc3RyYWlnaHRmb3J3YXJkIGNoZWNrLCBwb2tpbmcgc3BlY2lmaWMgcmVnaXN0ZXJzIGtub3duIHRvIHRoZSBXNTEwMCBmb3IgaWRlbnRpZmljYXRpb24/IE9yIGlzIGl0IGEgbW9yZSBzb3BoaXN0aWNhdGVkIGFwcHJvYWNoLCBwb3NzaWJseSBpbnZvbHZpbmcgYW4gYXV0b25lZ290aWF0aW9uIGF0dGVtcHQsIHBlcmhhcHMgdXNpbmcgYSBzcGVjaWFsaXplZCBJMkMgb3IgU1BJIGludGVyZmFjZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbWV0aG9kb2xvZ3kuIEkgbmVlZCB0byBrbm93OiBEb2VzIGl0IHJlbHkgb24gYSBoYXJkLWNvZGVkIG1lbW9yeSBtYXA/IElmIHNvLCB3aGF0IGFyZSB0aGUgc3RhcnRpbmcgYWRkcmVzc2VzIGFuZCByZWdpc3RlcnMgaXQncyBwcm9iaW5nPyBBbHRlcm5hdGl2ZWx5LCBpcyB0aGVyZSBhbiBhdXRvLWRldGVjdGlvbiBlbGVtZW50IGludm9sdmVkPyBEb2VzIGl0IGxvb2sgZm9yIHNwZWNpZmljIFwibWFnaWMgbnVtYmVyc1wiIG9yIHNpZ25hdHVyZSB2YWx1ZXMgaW4gcGFydGljdWxhciByZWdpc3RlcnMgdG8gY29uZmlybSB0aGUgcHJlc2VuY2Ugb2YgYSBXNTEwMCBjaGlwIGFuZCBpdHMgc3BlY2lmaWMgcmV2aXNpb24/IEkgd2FudCB0byBzZWUgdGhlIGRldGFpbHMgb2YgaXRzIG1ldGhvZG9sb2d5LCBob3cgcm9idXN0IGl0IGlzIGFnYWluc3QgZGlmZmVyZW50IHJldmlzaW9ucyBvZiB0aGUgVzUxMDAgb3IgcG90ZW50aWFsIGNsb25lcywgYW5kIHdoYXQga2luZCBvZiBlcnJvciBoYW5kbGluZyBhbmQgZmFsbGJhY2sgbWVjaGFuaXNtcyBpdCBlbXBsb3lzLiBUaGUgYXJjaGl0ZWN0dXJlIG9mIHRoaXMgcHJvYmUgcm91dGluZSBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBpdHMgb3ZlcmFsbCBlZmZpY2llbmN5IGFuZCByZWxpYWJpbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE2NCwiT3V0cHV0VG9rZW5zIjo0NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjIzLjA3MjMyMjQzOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NjIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzYyOlxcdGludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG4gNzYzOlxcdFxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKVxcbiA3NjQ6XFx0e1xcbiA3NjU6XFx0XFx0c3RydWN0IHc1MTAwX3ByaXYgKnByaXY7XFxuIDc2NjpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gNzY3OlxcdFxcdGludCBlcnI7XFxuIDc2ODpcXHRcXHRzaXplX3QgYWxsb2Nfc2l6ZTtcXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0YWxsb2Nfc2l6ZSA9IHNpemVvZigqcHJpdik7XFxuIDc3MTpcXHRcXHRpZiAoc2l6ZW9mX29wc19wcml2KSB7XFxuIDc3MjpcXHRcXHRcXHRhbGxvY19zaXplID0gQUxJR04oYWxsb2Nfc2l6ZSwgTkVUREVWX0FMSUdOKTtcXG4gNzczOlxcdFxcdFxcdGFsbG9jX3NpemUgKz0gc2l6ZW9mX29wc19wcml2O1xcbiA3NzQ6XFx0XFx0fVxcbiA3NzU6XFx0XFx0YWxsb2Nfc2l6ZSArPSBORVRERVZfQUxJR04gLSAxO1xcbiA3NzY6XFx0XFxuIDc3NzpcXHRcXHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoYWxsb2Nfc2l6ZSk7XFxuIDc3ODpcXHRcXHRpZiAoIW5kZXYpXFxuIDc3OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gNzgwOlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIGRldik7XFxuIDc4MTpcXHRcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBuZGV2KTtcXG4gNzgyOlxcdFxcdHByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gNzgzOlxcdFxcbiA3ODQ6XFx0XFx0c3dpdGNoIChvcHMtXFx1MDAzZWNoaXBfaWQpIHtcXG4gNzg1OlxcdFxcdGNhc2UgVzUxMDA6XFxuIDc4NjpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yZWdzID0gVzUxMDBfUzBfUkVHUztcXG4gNzg3OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3R4X2J1ZiA9IFc1MTAwX1RYX01FTV9TVEFSVDtcXG4gNzg4OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3R4X2J1Zl9zaXplID0gVzUxMDBfVFhfTUVNX1NJWkU7XFxuIDc4OTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yeF9idWYgPSBXNTEwMF9SWF9NRU1fU1RBUlQ7XFxuIDc5MDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF9yeF9idWZfc2l6ZSA9IFc1MTAwX1JYX01FTV9TSVpFO1xcbiA3OTE6XFx0XFx0XFx0YnJlYWs7XFxuIDc5MjpcXHRcXHRjYXNlIFc1MjAwOlxcbiA3OTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcmVncyA9IFc1MjAwX1MwX1JFR1M7XFxuIDc5NDpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF90eF9idWYgPSBXNTIwMF9UWF9NRU1fU1RBUlQ7XFxuIDc5NTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzMF90eF9idWZfc2l6ZSA9IFc1MjAwX1RYX01FTV9TSVpFO1xcbiA3OTY6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcnhfYnVmID0gVzUyMDBfUlhfTUVNX1NUQVJUO1xcbiA3OTc6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfcnhfYnVmX3NpemUgPSBXNTIwMF9SWF9NRU1fU0laRTtcXG4gNzk4OlxcdFxcdFxcdGJyZWFrO1xcbiA3OTk6XFx0XFx0Y2FzZSBXNTUwMDpcXG4gODAwOlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3JlZ3MgPSBXNTUwMF9TMF9SRUdTO1xcbiA4MDE6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfdHhfYnVmID0gVzU1MDBfVFhfTUVNX1NUQVJUO1xcbiA4MDI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlczBfdHhfYnVmX3NpemUgPSBXNTUwMF9UWF9NRU1fU0laRTtcXG4gODAzOlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3J4X2J1ZiA9IFc1NTAwX1JYX01FTV9TVEFSVDtcXG4gODA0OlxcdFxcdFxcdHByaXYtXFx1MDAzZXMwX3J4X2J1Zl9zaXplID0gVzU1MDBfUlhfTUVNX1NJWkU7XFxuIDgwNTpcXHRcXHRcXHRicmVhaztcXG4gODA2OlxcdFxcdGRlZmF1bHQ6XFxuIDgwNzpcXHRcXHRcXHRlcnIgPSAtRUlOVkFMO1xcbiA4MDg6XFx0XFx0XFx0Z290byBlcnJfd3E7XFxuIDgwOTpcXHRcXHR9XFxuIDgxMDpcXHRcXG4gODExOlxcdFxcdHByaXYtXFx1MDAzZW5kZXYgPSBuZGV2O1xcbiA4MTI6XFx0XFx0cHJpdi1cXHUwMDNlb3BzID0gb3BzO1xcbiA4MTM6XFx0XFx0cHJpdi1cXHUwMDNlaXJxID0gaXJxO1xcbiA4MTQ6XFx0XFxuIDgxNTpcXHRcXHRwcml2LVxcdTAwM2VsaW5rX2lycSA9IG9wcy1cXHUwMDNlY2hpcF9pZCA9PSBXNTUwMCA/XFxuIDgxNjpcXHRcXHRcXHRcXHQgZndub2RlX2lycV9nZXQoZGV2X2Z3bm9kZShkZXYpLCAxKSA6IC1FTk9ERVY7XFxuIDgxNzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbGlua19pcnEgPT0gLUVQUk9CRV9ERUZFUikge1xcbiA4MTg6XFx0XFx0XFx0ZXJyID0gZGV2X2Vycl9wcm9iZShkZXYsIHByaXYtXFx1MDAzZWxpbmtfaXJxLFxcbiA4MTk6XFx0XFx0XFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgdG8gZ2V0IGxpbmsgaXJxXFxcXG5cXFwiKTtcXG4gODIwOlxcdFxcdFxcdGdvdG8gZXJyX3dxO1xcbiA4MjE6XFx0XFx0fVxcbiA4MjI6XFx0XFxuIDgyMzpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNnc1MTAwX25ldGRldl9vcHM7XFxuIDgyNDpcXHRcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZ3NTEwMF9ldGh0b29sX29wcztcXG4gODI1OlxcdFxcdG5ldGlmX25hcGlfYWRkX3dlaWdodChuZGV2LCBcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSwgdzUxMDBfbmFwaV9wb2xsLCAxNik7XFxuIDgyNjpcXHRcXG4gODI3OlxcdFxcdC8qIFRoaXMgY2hpcCBkb2Vzbid0IHN1cHBvcnQgVkxBTiBwYWNrZXRzIHdpdGggbm9ybWFsIE1UVSxcXG4gODI4OlxcdFxcdCAqIHNvIGRpc2FibGUgVkxBTiBmb3IgdGhpcyBkZXZpY2UuXFxuIDgyOTpcXHRcXHQgKi9cXG4gODMwOlxcdFxcdG5kZXYtXFx1MDAzZWZlYXR1cmVzIHw9IE5FVElGX0ZfVkxBTl9DSEFMTEVOR0VEO1xcbiA4MzE6XFx0XFxuIDgzMjpcXHRcXHRwcml2LVxcdTAwM2V4ZmVyX3dxID0gYWxsb2Nfd29ya3F1ZXVlKFxcXCIlc1xcXCIsIFdRX01FTV9SRUNMQUlNIHwgV1FfUEVSQ1BVLCAwLFxcbiA4MzM6XFx0XFx0XFx0XFx0XFx0XFx0ZGV2X25hbWUoZGV2KSk7XFxuIDgzNDpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZXhmZXJfd3EpIHtcXG4gODM1OlxcdFxcdFxcdGVyciA9IC1FTk9NRU07XFxuIDgzNjpcXHRcXHRcXHRnb3RvIGVycl93cTtcXG4gODM3OlxcdFxcdH1cXG4gODM4OlxcdFxcbiA4Mzk6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyeF93b3JrLCB3NTEwMF9yeF93b3JrKTtcXG4gODQwOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfd29yaywgdzUxMDBfdHhfd29yayk7XFxuIDg0MTpcXHRcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXNldHJ4X3dvcmssIHc1MTAwX3NldHJ4X3dvcmspO1xcbiA4NDI6XFx0XFx0SU5JVF9XT1JLKFxcdTAwMjZwcml2LVxcdTAwM2VyZXN0YXJ0X3dvcmssIHc1MTAwX3Jlc3RhcnRfd29yayk7XFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdGlmIChtYWNfYWRkcilcXG4gODQ1OlxcdFxcdFxcdGV0aF9od19hZGRyX3NldChuZGV2LCBtYWNfYWRkcik7XFxuIDg0NjpcXHRcXHRlbHNlXFxuIDg0NzpcXHRcXHRcXHRldGhfaHdfYWRkcl9yYW5kb20obmRldik7XFxuIDg0ODpcXHRcXG4gODQ5OlxcdFxcdGlmIChwcml2LVxcdTAwM2VvcHMtXFx1MDAzZWluaXQpIHtcXG4gODUwOlxcdFxcdFxcdGVyciA9IHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlaW5pdChwcml2LVxcdTAwM2VuZGV2KTtcXG4gODUxOlxcdFxcdFxcdGlmIChlcnIpXFxuIDg1MjpcXHRcXHRcXHRcXHRnb3RvIGVycl9odztcXG4gODUzOlxcdFxcdH1cXG4gODU0OlxcdFxcbiA4NTU6XFx0XFx0ZXJyID0gdzUxMDBfaHdfcmVzZXQocHJpdik7XFxuIDg1NjpcXHRcXHRpZiAoZXJyKVxcbiA4NTc6XFx0XFx0XFx0Z290byBlcnJfaHc7XFxuIDg1ODpcXHRcXG4gODU5OlxcdFxcdGlmIChvcHMtXFx1MDAzZW1heV9zbGVlcCkge1xcbiA4NjA6XFx0XFx0XFx0ZXJyID0gcmVxdWVzdF90aHJlYWRlZF9pcnEocHJpdi1cXHUwMDNlaXJxLCBOVUxMLCB3NTEwMF9pbnRlcnJ1cHQsXFxuIDg2MTpcXHRcXHRcXHRcXHRcXHRcXHQgICBJUlFGX1RSSUdHRVJfTE9XIHwgSVJRRl9PTkVTSE9ULFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDoyMy4wNzI0NDgyMThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjgyNDY1ODc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gdGhlIFc1MTAwIFJlc2V0IFNlcXVlbmNlKipcblxuT2theSwgc28gYHc1MTAwX3Byb2JlYCBpcyBraWNraW5nIG9mZiB0aGUgaW5pdGlhbGl6YXRpb24uIEludGVyZXN0aW5nLiBJdCdzIGNhbGxpbmcgYHc1MTAwX2h3X3Jlc2V0KHByaXYpYC4gUmlnaHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSByZXNldCBzZXF1ZW5jZS4gVGhhdCdzIHRoZSBjcnVjaWFsIGZpcnN0IHN0ZXAuIExldCdzIGRpZyBpbnRvIHRoYXQgYHc1MTAwX2h3X3Jlc2V0YCBmdW5jdGlvbiBhbmQgc2VlIGV4YWN0bHkgd2hhdCBpdCdzIGRvaW5nLiBXaGF0IHBpbnMgaXMgaXQgbWFuaXB1bGF0aW5nPyBXaGF0IGFyZSB0aGUgdGltaW5nIHJlcXVpcmVtZW50cz8gSXMgaXQgdXNpbmcgYSBkZWRpY2F0ZWQgcmVzZXQgbGluZSwgb3IgaXMgaXQgYSBwb3dlci1jeWNsZSBzdHlsZSByZXNldD8gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhpcyBoYXJkd2FyZSByZXNldCBwcm9jZXNzIGJlZm9yZSBJIGNhbiByZWFsbHkgdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBwcm9iZSByb3V0aW5lLiBLbm93aW5nIGhvdyB0aGUgY2hpcCBpcyBicm91Z2h0IHRvIGEga25vd24gc3RhdGUgaXMgZnVuZGFtZW50YWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAyLCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDoyNi4zNTQ5MTYyODVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzMyMzY1OTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfaHdfcmVzZXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9MzUyPXN0YXRpYyBpbnQgdzU1MDBfZ2V0X3BoeWNmZ3JfbG5rKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzY1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjM2NjpzdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTM2Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz00NzU9c3RhdGljIHZvaWQgdzUxMDBfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTQ3OS1cXHRuZXRpZl9zdG9wX3F1ZXVlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjQ4MDpcXHR3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy00ODEtXFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjI9aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODU0LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg1NTpcXHRlcnIgPSB3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04NTYtXFx0aWYgKGVycilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTkwMD12b2lkIHc1MTAwX3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MTEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6OTEyOlxcdHc1MTAwX2h3X3Jlc2V0KHByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTkxMy1cXHRmcmVlX2lycShwcml2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9OTQxPXN0YXRpYyBpbnQgdzUxMDBfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTk0Ni1cXHRpZiAobmV0aWZfcnVubmluZyhuZGV2KSkge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjk0NzpcXHRcXHR3NTEwMF9od19yZXNldChwcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05NDgtXFx0XFx0dzUxMDBfaHdfc3RhcnQocHJpdik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjI2LjQyODE1Nzg3N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1ODI3MjQ3OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIFJlc2V0IFNlcXVlbmNlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgdzUxMDBfaHdfcmVzZXRgIGZpbGUuIE15IGluaXRpYWwgZm9jdXMgd2lsbCBiZSBvbiB1bmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIGhhcmR3YXJlIHJlc2V0IHNlcXVlbmNlIGltcGxlbWVudGVkIGZvciB0aGUgVzUxMDAuIEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgc2lnbmFscyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRpZWQgdG8gdGhlIHJlc2V0IHBpbi4gSSdsbCBiZSBsb29raW5nIGZvciB0aW1pbmcgZGlhZ3JhbXMgb3IgYW55IGNvZGUgc25pcHBldHMgdGhhdCBkZWZpbmUgdGhlIGNyaXRpY2FsIGRlbGF5cyBhbmQgc2lnbmFsIHRyYW5zaXRpb25zLiBVbmRlcnN0YW5kaW5nIHRoZSBwcm9wZXIgcmVzZXQgdGltaW5nIGlzIGNydWNpYWw7IGluY29ycmVjdCBzZXF1ZW5jaW5nIGNhbiBsZWFkIHRvIGludGVybWl0dGVudCBpc3N1ZXMgb3IsIHdvcnNlLCBjb21wbGV0ZSBmYWlsdXJlIHRvIGluaXRpYWxpemUgdGhlIFc1MTAwIHByb3Blcmx5LiBJJ2xsIGJlIG1lbnRhbGx5IG1hcHBpbmcgdGhlIGhhcmR3YXJlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBpdCBmb2xsb3dzIGJlc3QgcHJhY3RpY2VzIGZvciBhIHN0YWJsZSByZXNldC4gQXJlIHRoZXJlIGFueSB1bnVzdWFsIGVkZ2UgY2FzZXMgb3IgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQ/IEknbGwgYWxzbyBjaGVjayBpZiB0aGUgY29kZSBwcm92aWRlcyBmb3IgYW55IGRlYm91bmNpbmcgb2YgdGhlIHJlc2V0IHNpZ25hbCBpZiBpdCBpcyBhIG1hbnVhbCBzd2l0Y2guIEtub3dpbmcgaG93IHRoZSByZXNldCBpcyBoYW5kbGVkIHdpdGhpbiB0aGUgb3ZlcmFsbCBzeXN0ZW0gYXJjaGl0ZWN0dXJlIHdpbGwgYmUgdmVyeSBpbXBvcnRhbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNDAyLCJPdXRwdXRUb2tlbnMiOjQ1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzAuMDEwODg2ODYzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTUzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNjYsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNjY6XFx0c3RhdGljIGludCB3NTEwMF9od19yZXNldChzdHJ1Y3QgdzUxMDBfcHJpdiAqcHJpdilcXG4gMzY3OlxcdHtcXG4gMzY4OlxcdFxcdHUzMiBydHI7XFxuIDM2OTpcXHRcXG4gMzcwOlxcdFxcdHc1MTAwX3Jlc2V0KHByaXYpO1xcbiAzNzE6XFx0XFxuIDM3MjpcXHRcXHR3NTEwMF9kaXNhYmxlX2ludHIocHJpdik7XFxuIDM3MzpcXHRcXHR3NTEwMF93cml0ZV9tYWNhZGRyKHByaXYpO1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRzd2l0Y2ggKHByaXYtXFx1MDAzZW9wcy1cXHUwMDNlY2hpcF9pZCkge1xcbiAzNzY6XFx0XFx0Y2FzZSBXNTEwMDpcXG4gMzc3OlxcdFxcdFxcdHc1MTAwX21lbW9yeV9jb25maWd1cmUocHJpdik7XFxuIDM3ODpcXHRcXHRcXHRydHIgPSBXNTEwMF9SVFI7XFxuIDM3OTpcXHRcXHRcXHRicmVhaztcXG4gMzgwOlxcdFxcdGNhc2UgVzUyMDA6XFxuIDM4MTpcXHRcXHRcXHR3NTIwMF9tZW1vcnlfY29uZmlndXJlKHByaXYpO1xcbiAzODI6XFx0XFx0XFx0cnRyID0gVzUxMDBfUlRSO1xcbiAzODM6XFx0XFx0XFx0YnJlYWs7XFxuIDM4NDpcXHRcXHRjYXNlIFc1NTAwOlxcbiAzODU6XFx0XFx0XFx0dzU1MDBfbWVtb3J5X2NvbmZpZ3VyZShwcml2KTtcXG4gMzg2OlxcdFxcdFxcdHJ0ciA9IFc1NTAwX1JUUjtcXG4gMzg3OlxcdFxcdFxcdGJyZWFrO1xcbiAzODg6XFx0XFx0ZGVmYXVsdDpcXG4gMzg5OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzOTA6XFx0XFx0fVxcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXFxuIDM5MzpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0cmV0dXJuIDA7XFxuIDM5NjpcXHR9XFxuIDM5NzpcXHRcXG4gMzk4OlxcdHN0YXRpYyB2b2lkIHc1MTAwX2h3X3N0YXJ0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbiAzOTk6XFx0e1xcbiA0MDA6XFx0XFx0dTggbW9kZSA9IFMwX01SX01BQ1JBVztcXG4gNDAxOlxcdFxcbiA0MDI6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2Vwcm9taXNjKSB7XFxuIDQwMzpcXHRcXHRcXHRpZiAocHJpdi1cXHUwMDNlb3BzLVxcdTAwM2VjaGlwX2lkID09IFc1NTAwKVxcbiA0MDQ6XFx0XFx0XFx0XFx0bW9kZSB8PSBXNTUwMF9TMF9NUl9NRjtcXG4gNDA1OlxcdFxcdFxcdGVsc2VcXG4gNDA2OlxcdFxcdFxcdFxcdG1vZGUgfD0gUzBfTVJfTUY7XFxuIDQwNzpcXHRcXHR9XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdHc1MTAwX3dyaXRlKHByaXYsIFc1MTAwX1MwX01SKHByaXYpLCBtb2RlKTtcXG4gNDEwOlxcdFxcdHc1MTAwX2NvbW1hbmQocHJpdiwgUzBfQ1JfT1BFTik7XFxuIDQxMTpcXHRcXHR3NTEwMF9lbmFibGVfaW50cihwcml2KTtcXG4gNDEyOlxcdH1cXG4gNDEzOlxcdFxcbiA0MTQ6XFx0c3RhdGljIHZvaWQgdzUxMDBfaHdfY2xvc2Uoc3RydWN0IHc1MTAwX3ByaXYgKnByaXYpXFxuIDQxNTpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjMwLjAxMTAwMjAxMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTYxNjk0NTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkluaXRpYWwgSGFyZHdhcmUgQ2hlY2sgYW5kIENvbmZ1c2lvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZHJpdmVyIGNvZGUgYW5kIEkgc2VlIHRoaXMgY3J1Y2lhbCBsaW5lOiBgaWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKSByZXR1cm4gLUVOT0RFVjtgLiBSaWdodCBhd2F5LCBpdCdzIGNsZWFyIHRoaXMgaXMgYSBoYXJkd2FyZSBjaGVjay4gVGhlIGRyaXZlciBpcyByZWFkaW5nIGEgMTYtYml0IHZhbHVlIGZyb20gYSBoYXJkd2FyZSByZWdpc3RlciwgYHJ0cmAsIHVzaW5nIGB3NTEwMF9yZWFkMTZgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB0aGF0IHRoZSBoYXJkd2FyZSwgcHJlc3VtYWJseSBhIFc1MTAwIGNoaXAgb3Igc29tZXRoaW5nIHNpbWlsYXIsICptdXN0KiByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSwgYFJUUl9ERUZBVUxUYCwgaW4gdGhhdCByZWdpc3Rlci4gSWYgdGhlIHZhbHVlIGlzbid0IHdoYXQncyBleHBlY3RlZCwgaXQgcmV0dXJucyBhbiBlcnJvciBjb2RlLCBgLUVOT0RFVmAsIGluZGljYXRpbmcgdGhlIGRldmljZSBpc24ndCBwcmVzZW50IG9yIGlzbid0IHJlc3BvbmRpbmcgY29ycmVjdGx5LiBUaGF0IG1ha2VzIHNlbnNlLCBhIHN0YW5kYXJkIGhhcmR3YXJlIGNoZWNrLlxuXG5CdXQgaGFuZyBvbuKApiBpZiB0aGVyZSdzICpubyogaGFyZHdhcmUgY29ubmVjdGVkLCB3aGF0IHdpbGwgYHc1MTAwX3JlYWQxNmAgbGlrZWx5IHJldHVybj8gUHJvYmFibHkgc29tZXRoaW5nIHByZWRpY3RhYmxlLCBsaWtlIDAgb3IgbWF5YmUgMHhGRkZGLiBFaXRoZXIgb2YgdGhvc2UgdmFsdWVzIHdvdWxkIGFsbW9zdCBjZXJ0YWlubHkgKm5vdCogZXF1YWwgYFJUUl9ERUZBVUxUYC4gU28sIHRoZSBjaGVjayBzZWVtcyByb2J1c3QsIGFzc3VtaW5nIHRoZSByZWFkIGZ1bmN0aW9uIGhhbmRsZXMgdGhlIGxhY2sgb2YgaGFyZHdhcmUgZ3JhY2VmdWxseS5cblxuSG9sZCBvbiwgd2hhdCBpcyBgUlRSX0RFRkFVTFRgPyBJdCdzIGEgc3ltYm9saWMgY29uc3RhbnQuIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoYXQsIGFuZCBpdCB3aWxsIGJlIGludGVyZXN0aW5nIHRvIGZpZ3VyZSBvdXQgd2h5IHRoaXMgcmVnaXN0ZXIgaXMgc28gZnVuZGFtZW50YWwgdG8gdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJJ2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9uYWxpdHkgdGhpcyByZWdpc3RlciBjb250cm9scyB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIGlzIGEgZ29vZCBjaGVjayB0byBwZXJmb3JtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6MzQuNTcyNjk5NzM1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzM4MjE5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVFJfREVGQVVMVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTM1PU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5LSNkZWZpbmUgVzUxMDBfUlRSXFx0XFx0MHgwMDE3IC8qIFJldHJ5IFRpbWUtdmFsdWUgUmVnaXN0ZXIgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo5MDojZGVmaW5lICAgUlRSX0RFRkFVTFRcXHRcXHQgIDIwMDAgLyogPTB4MDdkMCAoMjAwMCkgKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy05MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jPTM2Nj1zdGF0aWMgaW50IHc1MTAwX2h3X3Jlc2V0KHN0cnVjdCB3NTEwMF9wcml2ICpwcml2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkxLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjM5MjpcXHRpZiAodzUxMDBfcmVhZDE2KHByaXYsIHJ0cikgIT0gUlRSX0RFRkFVTFQpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtMzkzLVxcdFxcdHJldHVybiAtRU5PREVWO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNDozNC42MjAwODc0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Nzk5Njc3Mzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFc1MTAwIERyaXZlciBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpdCdzIGV4cGVjdGluZyBhIHNwZWNpZmljIGRldmljZSBJRCwgMHgwN2QwLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJZiB0aGUgaGFyZHdhcmUgaXNuJ3QgcHJlc2VudCwgdGhlIGB3NTEwMF9wcm9iZWAgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBgLUVOT0RFVmAsIGluZGljYXRpbmcgYSBmYWlsdXJlLiBUaGUgcXVlc3Rpb24gbm93IGlzLCBjYW4gSSByZWxpYWJseSB0cmlnZ2VyIHRoaXMgY29uZGl0aW9uIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE15IGZpcnN0IHRob3VnaHQgaXMgUUVNVSwgYnV0IEkga25vdyB0aGF0J3MgcHJvYmFibHkgYSBkZWFkIGVuZCBzaW5jZSBRRU1VIGRvZXNuJ3Qgb2ZmZXIgYW55IFc1MTAwL1c1MjAwL1c1NTAwIGVtdWxhdGlvbi5cblxuQWxyaWdodCwgd2hhdCBhYm91dCBsZXZlcmFnaW5nIFN5emthbGxlcj8gRG9lcyBpdCBoYXZlIGEgbWVjaGFuaXNtIHRvIGluamVjdCBTUEkgcmVzcG9uc2VzPyBJZGVhbGx5LCBJJ2Qgd2FudCBhIGdlbmVyaWMgU1BJIGZ1enplciB0aGF0IGludGVyY2VwdHMgU1BJIGNvbW11bmljYXRpb24gYW5kIHByb3ZpZGVzIHNwb29mZWQgZGF0YS4gU2FkbHksIFN5emthbGxlciBkb2Vzbid0IGhhdmUgdGhhdCBmdW5jdGlvbmFsaXR5LlxuXG5IYW5nIG9uLi4uaXMgdGhpcyBkcml2ZXIgZXZlbiAqb25seSogU1BJPyBJIG5lZWQgdG8gY29uZmlybSB0aGF0LiBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgZHJpdmVyIHNvdXJjZS4gSSBzaG91bGQgYmUgYWJsZSB0byBmaW5kIHRoZSByZWxldmFudCBjb2RlIGluIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmNgIG9yIGEgc2ltaWxhciBmaWxlLiBUaGF0J2xsIHRlbGwgbWUgdGhlIGludGVyZmFjZSB0byB0aGUgY2hpcC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyMDIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDEuNDE5NzY5ODg5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjQxLjQxOTgzMTE3OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NzkwNzIxODc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gYHc1MTAwLXNwaS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyB0aGlzIGRyaXZlciBoYW5kbGVzIHRoZSBTUEkgY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBXNTEwMCBFdGhlcm5ldCBjb250cm9sbGVyLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIGNoaXAgc2VsZWN0LCB0aGUgZGF0YSBmcmFtaW5nLCBidXQgdGhlIHNwZWNpZmljcyBhcmUgYWx3YXlzIHdoZXJlIHRoZSBkZXZpbCByZXNpZGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSd2ZSBpbXBsZW1lbnRlZCB0aGUgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucywgcGFydGljdWxhcmx5IGluIHRlcm1zIG9mIGhhbmRsaW5nIHBvdGVudGlhbCBlcnJvcnMgYW5kIG1hbmFnaW5nIHRoZSB0aW1pbmcgY29uc3RyYWludHMuIEFyZSB0aGV5IHVzaW5nIERNQT8gSW50ZXJydXB0cz8gT3IgYXJlIHRoZXkgZG9pbmcgZXZlcnl0aGluZyBpbiBhIGJsb2NraW5nIG1hbm5lcj8gSeKAmWxsIGhhdmUgdG8gZXhhbWluZSB0aGUgc3BlY2lmaWMgcmVnaXN0ZXIgYWNjZXNzZXMgdG8gc2VlIGhvdyB0aGV5J3JlIGhhbmRsaW5nIHRoaW5ncyBsaWtlIHRoZSBpbnRlcnJ1cHQgbWFzayByZWdpc3RlciwgYW5kIGVycm9yIGNvZGUgZGVjb2RpbmcuIElzIHRoZXJlIGFueXRoaW5nIHVudXN1YWwsIG9yIGVsZWdhbnQsIGFib3V0IHRoZSB3YXkgdGhleSd2ZSBhcHByb2FjaGVkIHRoZSBTUEkgdHJhbnNhY3Rpb24gc2V0dXA/IEFueSBvcHRpbWl6YXRpb25zPyBJIHNob3VsZCBhbHNvIHF1aWNrbHkgY2hlY2sgdGhlIGludGVycnVwdCBoYW5kbGluZyBhbmQgc2VlIGlmIGl0IGlzIHRocmVhZCBzYWZlLiBJdCBpcyBhbHdheXMgYSBwYWluIHRvIGRlYnVnIGNvbmN1cnJlbmN5IGlzc3VlcywgYW5kIEkgd2FudCB0byBzZWUgaWYgdGhpcyBwYXJ0aWN1bGFyIGRyaXZlciB0b29rIHRob3NlIGNvbmNlcm5zIGludG8gYWNjb3VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM3MTUsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDYuMjEwNTU1MTA4WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg0NTgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqIEV0aGVybmV0IGRyaXZlciBmb3IgdGhlIFdJWm5ldCBXNTEwMC9XNTIwMC9XNTUwMCBjaGlwLlxcbiAgIDQ6XFx0ICpcXG4gICA1OlxcdCAqIENvcHlyaWdodCAoQykgMjAxNiBBa2lub2J1IE1pdGEgXFx1MDAzY2FraW5vYnUubWl0YUBnbWFpbC5jb21cXHUwMDNlXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogRGF0YXNoZWV0OlxcbiAgIDg6XFx0ICogaHR0cDovL3d3dy53aXpuZXQuY28ua3Ivd3AtY29udGVudC91cGxvYWRzL3dpem5ldGhvbWUvQ2hpcC9XNTEwMC9Eb2N1bWVudC9XNTEwMF9EYXRhc2hlZXRfdjEuMi42LnBkZlxcbiAgIDk6XFx0ICogaHR0cDovL3dpem5ldGhvbWUuY2FmZTI0LmNvbS93cC1jb250ZW50L3VwbG9hZHMvd2l6bmV0aG9tZS9DaGlwL1c1MjAwL0RvY3VtZW50cy9XNTIwMF9EU19WMTQwRS5wZGZcXG4gIDEwOlxcdCAqIGh0dHA6Ly93aXp3aWtpLm5ldC93aWtpL2xpYi9leGUvZmV0Y2gucGhwP21lZGlhPXByb2R1Y3RzOnc1NTAwOnc1NTAwX2RzX3YxMDZlXzE0MTIzMC5wZGZcXG4gIDExOlxcdCAqL1xcbiAgMTI6XFx0XFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuICAxNTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4gIDE2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4gIDE3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZi5oXFx1MDAzZVxcbiAgMTg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX25ldC5oXFx1MDAzZVxcbiAgMTk6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NwaS9zcGkuaFxcdTAwM2VcXG4gIDIwOlxcdFxcbiAgMjE6XFx0I2luY2x1ZGUgXFxcInc1MTAwLmhcXFwiXFxuICAyMjpcXHRcXG4gIDIzOlxcdCNkZWZpbmUgVzUxMDBfU1BJX1dSSVRFX09QQ09ERSAweGYwXFxuICAyNDpcXHQjZGVmaW5lIFc1MTAwX1NQSV9SRUFEX09QQ09ERSAweDBmXFxuICAyNTpcXHRcXG4gIDI2OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyKVxcbiAgMjc6XFx0e1xcbiAgMjg6XFx0XFx0c3RydWN0IHNwaV9kZXZpY2UgKnNwaSA9IHRvX3NwaV9kZXZpY2UobmRldi1cXHUwMDNlZGV2LnBhcmVudCk7XFxuICAyOTpcXHRcXHR1OCBjbWRbM10gPSB7IFc1MTAwX1NQSV9SRUFEX09QQ09ERSwgYWRkciBcXHUwMDNlXFx1MDAzZSA4LCBhZGRyIFxcdTAwMjYgMHhmZiB9O1xcbiAgMzA6XFx0XFx0dTggZGF0YTtcXG4gIDMxOlxcdFxcdGludCByZXQ7XFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdHJldCA9IHNwaV93cml0ZV90aGVuX3JlYWQoc3BpLCBjbWQsIHNpemVvZihjbWQpLCBcXHUwMDI2ZGF0YSwgMSk7XFxuICAzNDpcXHRcXG4gIDM1OlxcdFxcdHJldHVybiByZXQgPyByZXQgOiBkYXRhO1xcbiAgMzY6XFx0fVxcbiAgMzc6XFx0XFxuICAzODpcXHRzdGF0aWMgaW50IHc1MTAwX3NwaV93cml0ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIHU4IGRhdGEpXFxuICAzOTpcXHR7XFxuICA0MDpcXHRcXHRzdHJ1Y3Qgc3BpX2RldmljZSAqc3BpID0gdG9fc3BpX2RldmljZShuZGV2LVxcdTAwM2VkZXYucGFyZW50KTtcXG4gIDQxOlxcdFxcdHU4IGNtZFs0XSA9IHsgVzUxMDBfU1BJX1dSSVRFX09QQ09ERSwgYWRkciBcXHUwMDNlXFx1MDAzZSA4LCBhZGRyIFxcdTAwMjYgMHhmZiwgZGF0YX07XFxuICA0MjpcXHRcXG4gIDQzOlxcdFxcdHJldHVybiBzcGlfd3JpdGVfdGhlbl9yZWFkKHNwaSwgY21kLCBzaXplb2YoY21kKSwgTlVMTCwgMCk7XFxuICA0NDpcXHR9XFxuICA0NTpcXHRcXG4gIDQ2OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3JlYWQxNihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIpXFxuICA0NzpcXHR7XFxuICA0ODpcXHRcXHR1MTYgZGF0YTtcXG4gIDQ5OlxcdFxcdGludCByZXQ7XFxuICA1MDpcXHRcXG4gIDUxOlxcdFxcdHJldCA9IHc1MTAwX3NwaV9yZWFkKG5kZXYsIGFkZHIpO1xcbiAgNTI6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuICA1MzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgNTQ6XFx0XFx0ZGF0YSA9IHJldCBcXHUwMDNjXFx1MDAzYyA4O1xcbiAgNTU6XFx0XFx0cmV0ID0gdzUxMDBfc3BpX3JlYWQobmRldiwgYWRkciArIDEpO1xcbiAgNTY6XFx0XFxuICA1NzpcXHRcXHRyZXR1cm4gcmV0IFxcdTAwM2MgMCA/IHJldCA6IGRhdGEgfCByZXQ7XFxuICA1ODpcXHR9XFxuICA1OTpcXHRcXG4gIDYwOlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlMTYoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyLCB1MTYgZGF0YSlcXG4gIDYxOlxcdHtcXG4gIDYyOlxcdFxcdGludCByZXQ7XFxuICA2MzpcXHRcXG4gIDY0OlxcdFxcdHJldCA9IHc1MTAwX3NwaV93cml0ZShuZGV2LCBhZGRyLCBkYXRhIFxcdTAwM2VcXHUwMDNlIDgpO1xcbiAgNjU6XFx0XFx0aWYgKHJldClcXG4gIDY2OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuICA2NzpcXHRcXG4gIDY4OlxcdFxcdHJldHVybiB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciArIDEsIGRhdGEgXFx1MDAyNiAweGZmKTtcXG4gIDY5OlxcdH1cXG4gIDcwOlxcdFxcbiAgNzE6XFx0c3RhdGljIGludCB3NTEwMF9zcGlfcmVhZGJ1bGsoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsIHUzMiBhZGRyLCB1OCAqYnVmLFxcbiAgNzI6XFx0XFx0XFx0XFx0ICAgICAgaW50IGxlbilcXG4gIDczOlxcdHtcXG4gIDc0OlxcdFxcdGludCBpO1xcbiAgNzU6XFx0XFxuICA3NjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspIHtcXG4gIDc3OlxcdFxcdFxcdGludCByZXQgPSB3NTEwMF9zcGlfcmVhZChuZGV2LCBhZGRyICsgaSk7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAgODA6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gIDgxOlxcdFxcdFxcdGJ1ZltpXSA9IHJldDtcXG4gIDgyOlxcdFxcdH1cXG4gIDgzOlxcdFxcbiAgODQ6XFx0XFx0cmV0dXJuIDA7XFxuICA4NTpcXHR9XFxuICA4NjpcXHRcXG4gIDg3OlxcdHN0YXRpYyBpbnQgdzUxMDBfc3BpX3dyaXRlYnVsayhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwgdTMyIGFkZHIsIGNvbnN0IHU4ICpidWYsXFxuICA4ODpcXHRcXHRcXHRcXHQgICAgICAgaW50IGxlbilcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdGludCBpO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbGVuOyBpKyspIHtcXG4gIDkzOlxcdFxcdFxcdGludCByZXQgPSB3NTEwMF9zcGlfd3JpdGUobmRldiwgYWRkciArIGksIGJ1ZltpXSk7XFxuICA5NDpcXHRcXG4gIDk1OlxcdFxcdFxcdGlmIChyZXQpXFxuICA5NjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAgOTc6XFx0XFx0fVxcbiAgOTg6XFx0XFxuICA5OTpcXHRcXHRyZXR1cm4gMDtcXG4gMTAwOlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDQ6NDYuMjEwNjQxMDk4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4OTQwODg4NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNQSSBEcml2ZXIqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBtb2R1bGUncyBmdW5jdGlvbiBpcyBzb2xlbHkgYXMgYW4gU1BJIGRyaXZlci4gSSBuZWVkIHRvIHF1aWNrbHkgZXN0YWJsaXNoIGlmIHRoYXQncyAqdHJ1bHkqIHRoZSBjYXNlLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgaXMgaXQgKm9ubHkqIFNQST8gTm93LCBsZXQgbWUgdGhpbmsuLi4gcmlnaHQsIEkgcmVjYWxsIHRoZSBmaWxlIHN0cnVjdHVyZS4uLiBJIHNlZSB0aGF0IGB3NTEwMC5jYCBhcHBlYXJzIHRvIGJlIHRoZSBjZW50cmFsIGNvbXBvbmVudCwgdGhlIGNvcmUgbG9naWMsIHdoaWxlIGB3NTEwMC1zcGkuY2AgKnNwZWNpZmljYWxseSogaW1wbGVtZW50cyB0aGUgU1BJIGludGVyZmFjZS4gVGhhdCdzIGdvb2QuIEJ1dCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUgaXNuJ3QgYW5vdGhlciBmaWxlLCBzYXkgYSBwbGF0Zm9ybSBkcml2ZXIsIG9yIGFuIEkyQyBjb21wb25lbnQuIEl0IHdvdWxkIGJlIHZhbHVhYmxlIHRvIGdldCBjb25maXJtYXRpb24gdGhhdCB0aGVyZSBhcmUgbm90IGFueSBvdGhlciBpbXBsZW1lbnRhdGlvbnMgYmVzaWRlcyB0aGUgU1BJIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1MzMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjUyLjEwNDczMzA0MVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDcwMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidzUxMDBfcHJvYmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmM9NDIxPXN0YXRpYyBpbnQgdzUxMDBfc3BpX3Byb2JlKHN0cnVjdCBzcGlfZGV2aWNlICpzcGkpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAtc3BpLmMtNDUyLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYzo0NTM6XFx0cmV0dXJuIHc1MTAwX3Byb2JlKFxcdTAwMjZzcGktXFx1MDAzZWRldiwgb3BzLCBwcml2X3NpemUsIG1hYywgc3BpLVxcdTAwM2VpcnEpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTQtfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM9NzYwPUVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX29wc19wcml2KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6NzYyOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy03NjMtXFx0XFx0aW50IHNpemVvZl9vcHNfcHJpdiwgY29uc3Qgdm9pZCAqbWFjX2FkZHIsIGludCBpcnEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTctfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jOjg5ODpFWFBPUlRfU1lNQk9MX0dQTCh3NTEwMF9wcm9iZSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmMtODk5LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg9Mjk9dm9pZCAqdzUxMDBfb3BzX3ByaXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oOjMxOmludCB3NTEwMF9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCB3NTEwMF9vcHMgKm9wcyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaC0zMi1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjUyLjE1MTc1MjAxNloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDUwMDkwNzg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRGl2aW5nIGludG8gdGhlIFc1MTAwIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEknbSBmb2N1c2luZyBvbiB0aGUgVzUxMDAgaW1wbGVtZW50YXRpb24sIHNwZWNpZmljYWxseS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGlkZW50aWZ5IHRoZSBmdW5kYW1lbnRhbCBidWlsZGluZyBibG9ja3MuIEl0IHNlZW1zIHByZXR0eSBjbGVhciB0aGF0IGB3NTEwMC5jYCBpcyB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGNvcmUgbW9kdWxlLCBsaWtlbHkgY29udGFpbmluZyB0aGUgcHJpbWFyeSBmdW5jdGlvbmFsaXR5IGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGZvciB0aGUgVzUxMDAgaXRzZWxmLiBUaGVuIHRoZXJlIGlzIHRoZSBTUEkgZHJpdmVyLiBUaGUgbmFtZSBgdzUxMDAtc3BpLmNgIGluZGljYXRlcyB0aGF0IGl0IGhhbmRsZXMgdGhlIFNQSSBjb21tdW5pY2F0aW9uLCB3aGljaCB3aWxsIG9idmlvdXNseSBiZSBjcml0aWNhbCB0byBpbnRlcmFjdGluZyB3aXRoIHRoZSBkZXZpY2UncyByZWdpc3RlcnMuIEJ1dCBiZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSdtIHRoaW5raW5nIEkgc2hvdWxkIHF1aWNrbHkgY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkcml2ZXJzIG9yIGFic3RyYWN0aW9uIGxheWVycyBpbiBwbGF5IGhlcmUuIEkgbmVlZCB0byBiZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgYXJjaGl0ZWN0dXJlIGJlZm9yZSBJIHN0YXJ0IG1ha2luZyBhc3N1bXB0aW9ucyBhYm91dCBkZXBlbmRlbmNpZXMgb3IgZW50cnkgcG9pbnRzLiBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZyBjcnVjaWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjM4NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU2LjYwMTg0NTgyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJEaXJcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcInc1MTAwLXNwaS5jXCIsXG4gICAgXCJ3NTEwMC5jXCIsXG4gICAgXCJ3NTEwMC5oXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA0OjU2LjYwMTkwODg3WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NDUxMjIxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgVzUxMDAgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGhvbGQgb24gYSBzZWNvbmQsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIGxvb2tpbmcgYXQgdGhlIHJpZ2h0IGZpbGVzIGZvciB0aGlzIFc1MTAwIGltcGxlbWVudGF0aW9uLiBJIHRob3VnaHQgSSByZWNhbGxlZCBhIGB3NTMwMC5jYCBhdCBzb21lIHBvaW50LCBidXQgbm8sIGFsbCBJJ20gc2VlaW5nIGFyZSB2YXJpYXRpb25zIGZvciB0aGUgVzUxMDAgc3BlY2lmaWNhbGx5OiBgdzUxMDAtc3BpLmNgLCBgdzUxMDAuY2AsIGFuZCB0aGUgaGVhZGVyIGB3NTEwMC5oYC4gQWxyaWdodCwgc28gdGhlcmUncyBhIFNQSSB2ZXJzaW9uIGFuZCBhIHJlZ3VsYXIgb25lLCByZXByZXNlbnRlZCBieSB0aGUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGZpbGVzLiBUaGUgcHJlc2VuY2Ugb2YgdGhlIFNQSSB2YXJpYW50IGlzIGltcG9ydGFudC4gTm93IEkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBpZiB0aGVyZSdzIGEgbWVtb3J5LW1hcHBlZCB2ZXJzaW9uLCBvciB3aGV0aGVyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZXhjbHVzaXZlbHkgcmVnaXN0ZXItYmFzZWQuIEl0J3MgdGltZSB0byBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGRpcmVjdG9yeSB0byBnZXQgdGhlIGxheSBvZiB0aGUgbGFuZDsgSSB3YW50IHRvIGVuc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueSBmaWxlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3MTEsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OSwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MDEuMzQ3MDMzODY0WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTMyNzkzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3NTEwMF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYz00MjE9c3RhdGljIGludCB3NTEwMF9zcGlfcHJvYmUoc3RydWN0IHNwaV9kZXZpY2UgKnNwaSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC1zcGkuYy00NTItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jOjQ1MzpcXHRyZXR1cm4gdzUxMDBfcHJvYmUoXFx1MDAyNnNwaS1cXHUwMDNlZGV2LCBvcHMsIHByaXZfc2l6ZSwgbWFjLCBzcGktXFx1MDAzZWlycSk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLXNwaS5jLTQ1NC19XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYz03NjA9RVhQT1JUX1NZTUJPTF9HUEwodzUxMDBfb3BzX3ByaXYpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2MS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYzo3NjI6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTc2My1cXHRcXHRpbnQgc2l6ZW9mX29wc19wcml2LCBjb25zdCB2b2lkICptYWNfYWRkciwgaW50IGlycSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jLTg5Ny19XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmM6ODk4OkVYUE9SVF9TWU1CT0xfR1BMKHc1MTAwX3Byb2JlKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuYy04OTktXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93aXpuZXQvdzUxMDAuaD0yOT12b2lkICp3NTEwMF9vcHNfcHJpdihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbmRldik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmgtMzAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L3c1MTAwLmg6MzE6aW50IHc1MTAwX3Byb2JlKHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0IHc1MTAwX29wcyAqb3BzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5oLTMyLVxcdFxcdGludCBzaXplb2Zfb3BzX3ByaXYsIGNvbnN0IHZvaWQgKm1hY19hZGRyLCBpbnQgaXJxKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MDEuMzk2MzY4NDA4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMjIyNDg2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBXaXpuZXQgRHJpdmVyIExhbmRzY2FwZSoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0IG1lIHByb2Nlc3MgdGhpcyBgY29kZXNlYXJjaC1kaXItaW5kZXhgIG91dHB1dC4gSSBzZWUgYHc1MTAwLXNwaS5jYCBhbmQgYHc1MTAwLmNgIGluIHRoZSByZXN1bHRzLiBJbnRlcmVzdGluZy4gTm93LCBob2xkIG9uLCBJIHRob3VnaHQgSSBhbHNvIHNhdyBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgYHc1MzAwYD8gTm8sIHdhaXQgYSBtaW51dGUsIHRoZSBhY3R1YWwgb3V0cHV0IGlzIGp1c3Q6IGBGaWxlczogW1widzUxMDAtc3BpLmNcIiwgXCJ3NTEwMC5jXCIsIFwidzUxMDAuaFwiXWAuIFNvLCBubyBgdzUzMDAuY2AgYXBwZWFycyBoZXJlIGFuZCBpdCBjb25maXJtcyB0aGVyZSdzIG5vIG1lbW9yeS1tYXBwZWQgcGxhdGZvcm0gZHJpdmVyIGZvciB0aGUgdzUxMDAgc3BlY2lmaWNhbGx5IGluICp0aGlzKiBkaXJlY3RvcnkuIExldCdzIHN0ZXAgYmFjayBhbmQgZG91YmxlLWNoZWNrLCBzcGVjaWZpY2FsbHksIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L2AgZGlyZWN0b3J5LCBJIHNob3VsZCBoYXZlIHBhaWQgbW9yZSBhdHRlbnRpb24uIEFoLCByaWdodCwgSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYGNvZGVzZWFyY2gtZGlyLWluZGV4YCByZXR1cm5zIGJvdGggYEZpbGVzYCBhbmQgYFN1YmRpcnNgLiBPa2F5LCBhbmQgd2FpdCwgSSAqZGVmaW5pdGVseSogZGlkbid0IHNlZSBgdzUzMDAuY2Agbm93LiBMZXQgbWUgY2hlY2sgdGhlIGRpcmVjdG9yeSBhZ2FpbiwganVzdCB0byBiZSBzdXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjA2LjYxODYyMTY3MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxODMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvd2l6bmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJ3NTEwMC1zcGkuY1wiLFxuICAgIFwidzUxMDAuY1wiLFxuICAgIFwidzUxMDAuaFwiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBudWxsXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xM1QxMDowNTowNi42MTg2OTU0NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTYxMTAwNjI4NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFdpem5ldCBXNTEwMCBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFuZCBJJ20gc2VlaW5nIG9ubHkgdGhyZWUgZmlsZXMgYWZmZWN0ZWQgaW5pdGlhbGx5LiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3dpem5ldC93NTEwMC5jYC4gTXkgZmlyc3QgcXVlc3Rpb24gaXMsIGNhbiB0aGlzIGNvZGUgZXZlbiBiZSB0b3VjaGVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFRoaXMgZHJpdmVyIGV4cGxpY2l0bHkgcmVxdWlyZXMgYW4gU1BJIGRldmljZS4gVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgY2FuIFFFTVUgcHJvdmlkZSBhbiBTUEkgZGV2aWNlP1xuXG5JIGtub3cgUUVNVSAqaGFzKiBTUEkgY29udHJvbGxlcnMsIGJ1dCB0aGVyZSdzIG5vIGFjdHVhbCBlbXVsYXRpb24gZm9yIHRoZSBXNTEwMCwgVzUyMDAsIG9yIFc1NTAwIGRldmljZXMgdGhlbXNlbHZlcy4gSSBjYW4gY3JlYXRlIGFuIFNQSSBkZXZpY2UgdGhyb3VnaCBhIGRldmljZSB0cmVlIG92ZXJsYXksIHN1cmUsIGJ1dCB0aGF0J3Mgbm90IGdvaW5nIHRvIGdldCBtZSBhbnl3aGVyZS4gVGhlIGB3NTEwMF9od19yZXNldGAgZnVuY3Rpb24gaXMgZ29pbmcgdG8gZmFpbC4gSXQgcmVhZHMgYFJUUl9ERUZBVUxUYCAoMjAwMCkgZnJvbSB0aGUgU1BJIGJ1cy4gV2l0aG91dCByZWFsIGhhcmR3YXJlIG9yIGFuIGFjY3VyYXRlIGVtdWxhdG9yLCB0aGUgU1BJIHJlYWQgaXMganVzdCBnb2luZyB0byByZXR1cm4gZ2FyYmFnZSDigJMgbGlrZWx5IDAgb3IgMHhmZmZmIOKAkyBhbmQgdGhlIHByb2JlIHdpbGwgY2hva2Ugd2l0aCBgLUVOT0RFVmAuXG5cblRoaXMgbWVhbnMgdGhlIGRyaXZlciB3aWxsICpuZXZlciogcHJvYmUgc3VjY2Vzc2Z1bGx5LiBBbmQgdGhhdCBtZWFucyB0aGUgbmV0d29yayBkZXZpY2Ugd2lsbCBuZXZlciBiZSByZWdpc3RlcmVkLiBUaGVyZWZvcmUsIGFsbCB0aGUgY29kZSBwYXRocyBtb2RpZmllZCBieSB0aGlzIHBhdGNoIOKAkyBgdzUxMDBfZGV0ZWN0X2xpbmtgLCBgdzUxMDBfb3BlbmAsIGB3NTEwMF9zdG9wYCwgYHc1MTAwX2dldF9saW5rYCDigJMgYXJlIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuIFRoZXkncmUgYWxsIHByZWRpY2F0ZWQgb24gYSBzdWNjZXNzZnVsIHByb2JlIGFuZCBhIHJlZ2lzdGVyZWQgbmV0d29yayBpbnRlcmZhY2UuIFNpbmNlIHRoZSBwcm9iZSBmYWlscywgdGhleSdyZSBkZWFkIGNvZGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgcG90ZW50aWFsIGVzY2FwZSBoYXRjaGVzLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBzdXJlLiBMb29raW5nIGF0IGB3NTEwMF9od19yZXNldGAgYWdhaW46XG5cbmBgYGNcblx0aWYgKHc1MTAwX3JlYWQxNihwcml2LCBydHIpICE9IFJUUl9ERUZBVUxUKVxuXHRcdHJldHVybiAtRU5PREVWO1xuYGBgXG5cbll1cCwgaXQncyBhIGhhcmQgY2hlY2suIFRoZXJlJ3Mgbm8gc29mdCBmYWlsdXJlIG1vZGUgb3IgY29uZGl0aW9uYWwgYnlwYXNzLiBJcyB0aGVyZSBhbnkgc29mdHdhcmUgZW11bGF0aW9uIG9mIFc1MTAwIGluIHRoZSBrZXJuZWw/IE5vLiBBbnkgUUVNVSBlbXVsYXRpb24/IE5vcGUsIFFFTVUncyBnb3Qgbm90aGluZyBmb3IgdGhpcy4gQW5kIHdoYXQgYWJvdXQgU3l6a2FsbGVyPyBEb2VzIGl0IGhhdmUgc29tZSBnZW5lcmljIFNQSSBtb2NraW5nIGZyYW1ld29yayB0aGF0IGNvdWxkIGxldCBtZSByZXR1cm4gYSBzcGVjaWZpYyB2YWx1ZSBmb3IgYSBzcGVjaWZpYyByZWdpc3Rlcj8gVW5mb3J0dW5hdGVseSwgbm8uXG5cblNvLCB0aGUgZHJpdmVyIGNhbid0IGJlIHByb2JlZCBzdWNjZXNzZnVsbHkuIEknbSBoaXR0aW5nIGEgd2FsbC5cblxuTGV0IG1lIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBpbnN0cnVjdGlvbnMuIE9rYXksIFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucy4uLiBjb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUuXCIgQmluZ28uXG5cblRoaXMgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIChXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDApLiBJdCByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJdCdzIGltcG9zc2libGUgdG8gcmVhY2ggdGhlc2UgbW9kaWZpZWQgY29kZSBwYXRocyAoYHc1MTAwX2RldGVjdF9saW5rYCwgZXRjLikgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuR2l2ZW4gdGhpcywgSSBoYXZlIHRvIGNvbmNsdWRlIHRoYXQgV29ydGhGdXp6aW5nIHNob3VsZCBiZSBmYWxzZS4gVGhlIG1vZGlmaWVkIGNvZGUgaXMgaW5hY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE1OCwiT3V0cHV0VG9rZW5zIjoxNjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTQsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTEzVDEwOjA1OjIyLjcyODc2MDU4N1oiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBXaXpuZXQgVzUxMDAvVzUyMDAvVzU1MDAgU1BJIEV0aGVybmV0IGNvbnRyb2xsZXIgZHJpdmVyIHRvIGFkZCBsaW5rIGludGVycnVwdCBzdXBwb3J0LiBUaGlzIGRyaXZlciByZXF1aXJlcyBwaHlzaWNhbCBTUEkgaGFyZHdhcmUgdGhhdCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gRHVyaW5nIHByb2JlLCB0aGUgZHJpdmVyIHZlcmlmaWVzIHRoZSBwcmVzZW5jZSBvZiB0aGUgaGFyZHdhcmUgYnkgcmVhZGluZyBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIChSVFJfREVGQVVMVCkuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlIG9yIGEgc3BlY2lmaWMgZW11bGF0b3IsIHRoZSBwcm9iZSB3aWxsIGZhaWwsIG1ha2luZyB0aGUgbW9kaWZpZWQgY29kZSBwYXRocyAoc3VjaCBhcyB3NTEwMF9kZXRlY3RfbGluaywgdzUxMDBfb3BlbiwgYW5kIHc1MTAwX3N0b3ApIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgV2l6bmV0IFc1MTAwL1c1MjAwL1c1NTAwIFNQSSBFdGhlcm5ldCBjb250cm9sbGVyIGRyaXZlciB0byBhZGQgbGluayBpbnRlcnJ1cHQgc3VwcG9ydC4gVGhpcyBkcml2ZXIgcmVxdWlyZXMgcGh5c2ljYWwgU1BJIGhhcmR3YXJlIHRoYXQgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIER1cmluZyBwcm9iZSwgdGhlIGRyaXZlciB2ZXJpZmllcyB0aGUgcHJlc2VuY2Ugb2YgdGhlIGhhcmR3YXJlIGJ5IHJlYWRpbmcgYSBzcGVjaWZpYyByZWdpc3RlciB2YWx1ZSAoUlRSX0RFRkFVTFQpLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSBvciBhIHNwZWNpZmljIGVtdWxhdG9yLCB0aGUgcHJvYmUgd2lsbCBmYWlsLCBtYWtpbmcgdGhlIG1vZGlmaWVkIGNvZGUgcGF0aHMgKHN1Y2ggYXMgdzUxMDBfZGV0ZWN0X2xpbmssIHc1MTAwX29wZW4sIGFuZCB3NTEwMF9zdG9wKSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTNUMTA6MDU6MjIuNzI4NzkyNTc3WiIsIlNlcSI6MjcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjfg4l[1] Phase: Running StartedAt: 2026-08-13 10:05:34 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjfg4l[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-13 10:05:34 +0000 UTC FinishedAt: 2026-08-13 10:05:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}