Name: series-workflowv52dw Phase: Failed StartedAt: 2026-07-10 22:47:32 +0000 UTC FinishedAt: 2026-07-10 23:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv52dw[0] Phase: Succeeded StartedAt: 2026-07-10 22:47:32 +0000 UTC FinishedAt: 2026-07-10 23:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv52dw[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 22:47:32 +0000 UTC FinishedAt: 2026-07-10 23:11:56 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZmRiNDk1N2RlMjhmNDY5MDViNjFjMTY1ZjRkZDhiMjhlZmIyMzI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXG5pbmRleCAxODM3NmJjYzcxOGEyMC4uZjExNzA5ZTUzNmQzNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNkZWZpbmUgU0NfUFBFX1JFU0VUX0RSRVFcdFx0MHgwMjZDXG4gXG5AQCAtMjMyLDYgJiM0MzsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7XG4gXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xuIFx0aW50IHR4X2NvYWxlc2NlX3VzZWNzO1xuIFx0c3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7XG4mIzQzO1x0Ym9vbCBjbG9zaW5nO1xuIFxuIFx0dW5zaWduZWQgY2hhciAqcnhfYnVmW1JYX0RFU0NfTlVNXTtcbiBcdGRtYV9hZGRyX3QgcnhfcGh5c1tSWF9ERVNDX05VTV07XG5AQCAtNDk3LDYgJiM0Mzs0OTksMTIgQEAgc3RhdGljIHZvaWQgaGlwMDRfc3RhcnRfdHhfdGltZXIoc3RydWN0IGhpcDA0X3ByaXYgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucyA9IHByaXYtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgKiBOU0VDX1BFUl9VU0VDIC8gMjtcbiBcbiYjNDM7XHQvKiBEbyBub3QgKHJlLSlhcm0gdGhlIFRYIGNvYWxlc2NlIHRpbWVyIG9uY2UgdGVhcmRvd24gaGFzIGJlZ3VuLlxuJiM0MztcdCAqIEJvdGggYXJtaW5nIHNpdGVzIChUWCB4bWl0IGFuZCBOQVBJIHJ4IHBvbGwpIGdvIHRocm91Z2ggaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIGFsbG93IHRpbWVyIHRvIGZpcmUgYWZ0ZXIgaGFsZiB0aGUgdGltZSBhdCB0aGUgZWFybGllc3QgKi9cbiBcdGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lciwgbnNfdG9fa3RpbWUobnMpLFxuIFx0XHRcdCAgICAgICBucywgSFJUSU1FUl9NT0RFX1JFTCk7XG5AQCAtNjQ5LDEyICYjNDM7NjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHByaXYtXHUwMDNlcmVnX2ludGVuIHw9IFJDVl9JTlQ7XG4gXHRcdHdyaXRlbF9yZWxheGVkKHByaXYtXHUwMDNlcmVnX2ludGVuLCBwcml2LVx1MDAzZWJhc2UgJiM0MzsgUFBFX0lOVEVOKTtcbiBcdH1cbiYjNDM7XHQvKiBBcm0gdGhlIGNvYWxlc2NlIHRpbWVyIEJFRk9SRSBuYXBpX2NvbXBsZXRlX2RvbmUoKTogbmFwaV9kaXNhYmxlKClcbiYjNDM7XHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXG4mIzQzO1x0ICogdGhlIHBvbGwgZnVuY3Rpb24gcmV0dXJucywgc28gYXJtaW5nIGFmdGVyd2FyZHMgY2FuIHNsaXAgcGFzdCB0aGVcbiYjNDM7XHQgKiBzdG9wIHBhdGgmIzM5O3MgaHJ0aW1lcl9jYW5jZWwoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHhfcmVtYWluaW5nKVxuJiM0MztcdFx0aGlwMDRfc3RhcnRfdHhfdGltZXIocHJpdik7XG4gXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpO1xuIGRvbmU6XG4tXHQvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChyeCBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiB0eF9yZW1haW5pbmcpXG4tXHRcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xuLVxuIFx0cmV0dXJuIHJ4O1xuIH1cbiBcbkBAIC03MjksNiAmIzQzOzc0MCwxMSBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cHJpdi1cdTAwM2VyeF9jbnRfcmVtYWluaW5nID0gMDtcbiBcdHByaXYtXHUwMDNldHhfaGVhZCA9IDA7XG4gXHRwcml2LVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdC8qIEEgcGxhaW4gd3JpdGUgaXMgc3VmZmljaWVudCBoZXJlOiBtYWNfb3BlbigpIHJ1bnMgdW5kZXIgUlROTCwgc28gaXRcbiYjNDM7XHQgKiBjYW5ub3QgcmFjZSBtYWNfc3RvcCgpJiMzOTtzIHN0b3JlLXJlbGVhc2UsIGFuZCBuYXBpX2VuYWJsZSgpIGJlbG93IG9yZGVyc1xuJiM0MztcdCAqIHRoaXMgcmVzZXQgYmVmb3JlIGFueSBUWC9OQVBJIHRyYWZmaWMgY2FuIHJlc3VtZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKHByaXYtXHUwMDNlY2xvc2luZywgZmFsc2UpO1xuIFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlhfREVTQ19OVU07IGkmIzQzOyYjNDM7KSB7XG5AQCAtNzU5LDggJiM0Mzs3NzUsMjYgQEAgc3RhdGljIGludCBoaXAwNF9tYWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHQvKiBTdG9wIG5ldyB0aW1lciBhcm1zIGJlZm9yZSBkcmFpbmluZzogc2V0IHRoZSBjbG9zaW5nIGZsYWcgKGNoZWNrZWRcbiYjNDM7XHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxuJiM0MztcdCAqIFRYIHRvIGZpbmlzaCwgdGhlbiBjYW5jZWwgdGhlIHRpbWVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcbiYjNDM7XHQgKiBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBkaXJlY3RseSBmcm9tIGhpcDA0X3R4X3RpbWVvdXRfdGFzaygpLCBub3RcbiYjNDM7XHQgKiBvbmx5IHZpYSAubmRvX3N0b3Agd2hlcmUgdGhlIGNvcmUgaGFzIGFscmVhZHkgZGVhY3RpdmF0ZWQgVFg7XG4mIzQzO1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcbiYjNDM7XHQgKiB3aGljaCBhcm1zIHRoZSB0aW1lciwgdG8gZmluaXNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxuJiM0MztcdCAqIG5hcGlfZGlzYWJsZSgpIHJldHVybmluZyBtZWFucyB0aGF0IGFybSBoYXMgaGFwcGVuZWQsIHNvIHRoZVxuJiM0MztcdCAqIGhydGltZXJfY2FuY2VsKCkgYmVsb3cgY2Fubm90IG1pc3MgaXQuICBUaGUgc3RvcmUtcmVsZWFzZSBwYWlyc1xuJiM0MztcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuJiM0MztcbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKG5kZXYpO1xuJiM0MztcdGhydGltZXJfY2FuY2VsKFx1MDAyNnByaXYtXHUwMDNldHhfY29hbGVzY2VfdGltZXIpO1xuIFx0aGlwMDRfbWFjX2Rpc2FibGUobmRldik7XG4gXHRoaXAwNF90eF9yZWNsYWltKG5kZXYsIHRydWUpO1xuIFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xuQEAgLTc5MSw4ICYjNDM7ODI1LDIxIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7XG4mIzQzO1xuJiM0MztcdC8qIEJhaWwgaWYgdGhlIGRldmljZSB3YXMgdGFrZW4gZG93biAoZGV2X2Nsb3NlL3VucmVnaXN0ZXIpLiAgVGhlXG4mIzQzO1x0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXG4mIzQzO1x0ICogX19MSU5LX1NUQVRFX1NUQVJULCBzbyB0aGlzIGd1YXJkIGRvZXMgbm90IG1hdGNoIHRoZSByZXN0YXJ0JiMzOTtzXG4mIzQzO1x0ICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVx1MDAzZW5kZXYpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aGlwMDRfbWFjX3N0b3AocHJpdi1cdTAwM2VuZGV2KTtcbi1cdGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldik7XG4mIzQzO1x0aWYgKGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldikpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmRldiwgXCYjMzQ7cmVzdGFydCBhZnRlciB0eCB0aW1lb3V0IGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhpcDA0X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuQEAgLTEwMjYsMTMgJiM0MzsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIElSUSBpcyBkZXZtLW1hbmFnZWQgYW5kIHdvdWxkIG90aGVyd2lzZSBiZSBmcmVlZCBvbmx5IGFmdGVyXG4mIzQzO1x0ICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzXG4mIzQzO1x0ICogcnVuIC5uZG9fc3RvcCB0byBzdG9wIHRoZSBkZXZpY2UgYW5kIG1hc2sgaXRzIGludGVycnVwdCBzb3VyY2UsIGJ1dFxuJiM0MztcdCAqIGJlZm9yZSB0aGUgbWFudWFsIGZyZWVfbmV0ZGV2KCkgYmVsb3csIHNvIHRoYXQgaGlwMDRfbWFjX2ludGVycnVwdCgpXG4mIzQzO1x0ICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzb1xuJiM0MztcdCAqIGRyYWlucyBhbnkgaW4tZmxpZ2h0IGhhbmRsZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2bV9mcmVlX2lycShkLCBuZGV2LVx1MDAzZWlycSwgbmRldik7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzayk7XG4mIzQzO1x0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG4mIzQzO1xuIFx0aWYgKHByaXYtXHUwMDNlcGh5KVxuIFx0XHRwaHlfZGlzY29ubmVjdChwcml2LVx1MDAzZXBoeSk7XG4gXG4gXHRoaXAwNF9mcmVlX3JpbmcobmRldiwgZCk7XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiBcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlcGh5X25vZGUpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzayk7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmZkYjQ5NTdkZTI4ZjQ2OTA1YjYxYzE2NWY0ZGQ4YjI4ZWZiMjMyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDIzOjExOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jCmluZGV4IDE4Mzc2YmNjNzE4YTIwLi5mMTE3MDllNTM2ZDM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9vZl9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVnbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogCiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRCQkweDAyNkMKIApAQCAtMjMyLDYgJiM0MzsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7CiAJaW50IHR4X2NvYWxlc2NlX2ZyYW1lczsKIAlpbnQgdHhfY29hbGVzY2VfdXNlY3M7CiAJc3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7CiYjNDM7CWJvb2wgY2xvc2luZzsKIAogCXVuc2lnbmVkIGNoYXIgKnJ4X2J1ZltSWF9ERVNDX05VTV07CiAJZG1hX2FkZHJfdCByeF9waHlzW1JYX0RFU0NfTlVNXTsKQEAgLTQ5Nyw2ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LSZndDt0eF9jb2FsZXNjZV91c2VjcyAqIE5TRUNfUEVSX1VTRUMgLyAyOwogCiYjNDM7CS8qIERvIG5vdCAocmUtKWFybSB0aGUgVFggY29hbGVzY2UgdGltZXIgb25jZSB0ZWFyZG93biBoYXMgYmVndW4uCiYjNDM7CSAqIEJvdGggYXJtaW5nIHNpdGVzIChUWCB4bWl0IGFuZCBOQVBJIHJ4IHBvbGwpIGdvIHRocm91Z2ggaGVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cHJpdi0mZ3Q7Y2xvc2luZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogYWxsb3cgdGltZXIgdG8gZmlyZSBhZnRlciBoYWxmIHRoZSB0aW1lIGF0IHRoZSBlYXJsaWVzdCAqLwogCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmFtcDtwcml2LSZndDt0eF9jb2FsZXNjZV90aW1lciwgbnNfdG9fa3RpbWUobnMpLAogCQkJICAgICAgIG5zLCBIUlRJTUVSX01PREVfUkVMKTsKQEAgLTY0OSwxMiAmIzQzOzY1NywxNSBAQCBzdGF0aWMgaW50IGhpcDA0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCQlwcml2LSZndDtyZWdfaW50ZW4gfD0gUkNWX0lOVDsKIAkJd3JpdGVsX3JlbGF4ZWQocHJpdi0mZ3Q7cmVnX2ludGVuLCBwcml2LSZndDtiYXNlICYjNDM7IFBQRV9JTlRFTik7CiAJfQomIzQzOwkvKiBBcm0gdGhlIGNvYWxlc2NlIHRpbWVyIEJFRk9SRSBuYXBpX2NvbXBsZXRlX2RvbmUoKTogbmFwaV9kaXNhYmxlKCkKJiM0MzsJICogaW4gaGlwMDRfbWFjX3N0b3AoKSByZXR1cm5zIG9uY2UgU0NIRUQgaXMgY2xlYXJlZCBoZXJlLCBub3Qgd2hlbgomIzQzOwkgKiB0aGUgcG9sbCBmdW5jdGlvbiByZXR1cm5zLCBzbyBhcm1pbmcgYWZ0ZXJ3YXJkcyBjYW4gc2xpcCBwYXN0IHRoZQomIzQzOwkgKiBzdG9wIHBhdGgmIzM5O3MgaHJ0aW1lcl9jYW5jZWwoKS4KJiM0MzsJICovCiYjNDM7CWlmICh0eF9yZW1haW5pbmcpCiYjNDM7CQloaXAwNF9zdGFydF90eF90aW1lcihwcml2KTsKIAluYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpOwogZG9uZToKLQkvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocnggJmx0OyBidWRnZXQgJmFtcDsmYW1wOyB0eF9yZW1haW5pbmcpCi0JCWhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpOwotCiAJcmV0dXJuIHJ4OwogfQogCkBAIC03MjksNiAmIzQzOzc0MCwxMSBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXByaXYtJmd0O3J4X2NudF9yZW1haW5pbmcgPSAwOwogCXByaXYtJmd0O3R4X2hlYWQgPSAwOwogCXByaXYtJmd0O3R4X3RhaWwgPSAwOwomIzQzOwkvKiBBIHBsYWluIHdyaXRlIGlzIHN1ZmZpY2llbnQgaGVyZTogbWFjX29wZW4oKSBydW5zIHVuZGVyIFJUTkwsIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCByYWNlIG1hY19zdG9wKCkmIzM5O3Mgc3RvcmUtcmVsZWFzZSwgYW5kIG5hcGlfZW5hYmxlKCkgYmVsb3cgb3JkZXJzCiYjNDM7CSAqIHRoaXMgcmVzZXQgYmVmb3JlIGFueSBUWC9OQVBJIHRyYWZmaWMgY2FuIHJlc3VtZS4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UocHJpdi0mZ3Q7Y2xvc2luZywgZmFsc2UpOwogCWhpcDA0X3Jlc2V0X3BwZShwcml2KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBSWF9ERVNDX05VTTsgaSYjNDM7JiM0MzspIHsKQEAgLTc1OSw4ICYjNDM7Nzc1LDI2IEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgaTsKIAomIzQzOwkvKiBTdG9wIG5ldyB0aW1lciBhcm1zIGJlZm9yZSBkcmFpbmluZzogc2V0IHRoZSBjbG9zaW5nIGZsYWcgKGNoZWNrZWQKJiM0MzsJICogYXQgdGhlIHNpbmdsZSBhcm1pbmcgc2l0ZSksIHdhaXQgZm9yIHRoZSBOQVBJIHBvbGwgYW5kIGFueSBpbi1mbGlnaHQKJiM0MzsJICogVFggdG8gZmluaXNoLCB0aGVuIGNhbmNlbCB0aGUgdGltZXIuCiYjNDM7CSAqCiYjNDM7CSAqIG5ldGlmX3R4X2Rpc2FibGUoKSAobm90IG5ldGlmX3N0b3BfcXVldWUoKSkgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGlzCiYjNDM7CSAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gaGlwMDRfdHhfdGltZW91dF90YXNrKCksIG5vdAomIzQzOwkgKiBvbmx5IHZpYSAubmRvX3N0b3Agd2hlcmUgdGhlIGNvcmUgaGFzIGFscmVhZHkgZGVhY3RpdmF0ZWQgVFg7CiYjNDM7CSAqIG5ldGlmX3R4X2Rpc2FibGUoKSB3YWl0cyBmb3IgYW4gaW4tZmxpZ2h0IGhpcDA0X21hY19zdGFydF94bWl0KCksCiYjNDM7CSAqIHdoaWNoIGFybXMgdGhlIHRpbWVyLCB0byBmaW5pc2guCiYjNDM7CSAqCiYjNDM7CSAqIEJlY2F1c2UgaGlwMDRfcnhfcG9sbCgpIGFybXMgdGhlIHRpbWVyIGJlZm9yZSBuYXBpX2NvbXBsZXRlX2RvbmUoKSwKJiM0MzsJICogbmFwaV9kaXNhYmxlKCkgcmV0dXJuaW5nIG1lYW5zIHRoYXQgYXJtIGhhcyBoYXBwZW5lZCwgc28gdGhlCiYjNDM7CSAqIGhydGltZXJfY2FuY2VsKCkgYmVsb3cgY2Fubm90IG1pc3MgaXQuICBUaGUgc3RvcmUtcmVsZWFzZSBwYWlycwomIzQzOwkgKiB3aXRoIHRoZSBsb2FkIGluIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ByaXYtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwogCW5hcGlfZGlzYWJsZSgmYW1wO3ByaXYtJmd0O25hcGkpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUobmRldik7CiYjNDM7CWhydGltZXJfY2FuY2VsKCZhbXA7cHJpdi0mZ3Q7dHhfY29hbGVzY2VfdGltZXIpOwogCWhpcDA0X21hY19kaXNhYmxlKG5kZXYpOwogCWhpcDA0X3R4X3JlY2xhaW0obmRldiwgdHJ1ZSk7CiAJaGlwMDRfcmVzZXRfcHBlKHByaXYpOwpAQCAtNzkxLDggJiM0Mzs4MjUsMjEgQEAgc3RhdGljIHZvaWQgaGlwMDRfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjsKIAogCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7CiYjNDM7CiYjNDM7CS8qIEJhaWwgaWYgdGhlIGRldmljZSB3YXMgdGFrZW4gZG93biAoZGV2X2Nsb3NlL3VucmVnaXN0ZXIpLiAgVGhlCiYjNDM7CSAqIG1hY19zdG9wKCkgYmVsb3cgaXMgY2FsbGVkIGRpcmVjdGx5IGFuZCBkb2VzIG5vdCBjbGVhcgomIzQzOwkgKiBfX0xJTktfU1RBVEVfU1RBUlQsIHNvIHRoaXMgZ3VhcmQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3RhcnQmIzM5O3MKJiM0MzsJICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhwcml2LSZndDtuZGV2KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWhpcDA0X21hY19zdG9wKHByaXYtJmd0O25kZXYpOwotCWhpcDA0X21hY19vcGVuKHByaXYtJmd0O25kZXYpOwomIzQzOwlpZiAoaGlwMDRfbWFjX29wZW4ocHJpdi0mZ3Q7bmRldikpCiYjNDM7CQluZXRkZXZfZXJyKHByaXYtJmd0O25kZXYsICYjMzQ7cmVzdGFydCBhZnRlciB0eCB0aW1lb3V0IGZhaWxlZFxuJiMzNDspOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKIH0KIAogc3RhdGljIGludCBoaXAwNF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKQEAgLTEwMjYsMTMgJiM0MzsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGRldmljZSAqZCA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwogCiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwomIzQzOwkvKiBUaGUgSVJRIGlzIGRldm0tbWFuYWdlZCBhbmQgd291bGQgb3RoZXJ3aXNlIGJlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsJICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzCiYjNDM7CSAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXQKJiM0MzsJICogYmVmb3JlIHRoZSBtYW51YWwgZnJlZV9uZXRkZXYoKSBiZWxvdywgc28gdGhhdCBoaXAwNF9tYWNfaW50ZXJydXB0KCkKJiM0MzsJICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzbwomIzQzOwkgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLgomIzQzOwkgKi8KJiM0MzsJZGV2bV9mcmVlX2lycShkLCBuZGV2LSZndDtpcnEsIG5kZXYpOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7dHhfdGltZW91dF90YXNrKTsKJiM0MzsJaHJ0aW1lcl9jYW5jZWwoJmFtcDtwcml2LSZndDt0eF9jb2FsZXNjZV90aW1lcik7CiYjNDM7CiAJaWYgKHByaXYtJmd0O3BoeSkKIAkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0mZ3Q7cGh5KTsKIAogCWhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTsKLQl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlvZl9ub2RlX3B1dChwcml2LSZndDtwaHlfbm9kZSk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3R4X3RpbWVvdXRfdGFzayk7CiAJZnJlZV9uZXRkZXYobmRldik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIaXNpbGljb24gSElQMDQgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEhpc2lsaWNvbiBISVAwNC4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIHJhY2UgY29uZGl0aW9ucyBhbmQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGRyaXZlciYjMzk7cyB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGBwcml2LSZndDtjbG9zaW5nYCBmbGFnIHRvIG1hbmFnZSB0aW1lciByZS1hcm1pbmcsIHR3ZWFrZWQgdGhlIFJYIHBvbGxpbmcgbG9naWMgdG8gaGFuZGxlIHRoZSB0aW1lciBtb3JlIGNhcmVmdWxseSwgYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgb3Blbi9zdG9wL3RpbWVvdXQgZnVuY3Rpb25zIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgZHJpdmVyJiMzOTtzIHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc2h1dGRvd24uIFRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGJlZW4gdXBkYXRlZCB0byBkbyBhIHByb3BlciBjbGVhbnVwLCBpbmNsdWRpbmcgdW5yZWdpc3RlcmluZyB0aGUgbmV0IGRldmljZSwgZnJlZWluZyBpbnRlcnJ1cHRzLCBhbmQgY2FuY2VsaW5nIGFueSBwZW5kaW5nIHdvcmsgb3IgdGltZXJzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBHaXZlbiB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIsIGxpa2UgYSBISVAwNCwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgSSYjMzk7bGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBISVAwNCBoYXJkd2FyZSwgb3IsIGxlc3MgbGlrZWx5LCBzb21lIGNsZXZlciBzb2Z0d2FyZSBpbnN0YW50aWF0aW9uIG1lY2hhbmlzbS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgYXJlIHRpZWQgdmVyeSBjbG9zZWx5IHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gaWYgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlci4gQWgsIHllcywgdGhlIGBoaXAwNF9yZW1vdmVgIGZ1bmN0aW9uIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgIHdoaWNoIGNvbmZpcm1zIGl0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIHByb2JlIGl0IGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciwgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgZHJpdmVyIGhhcy4gT3IsIG1heWJlIEkgY291bGQgdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBgaGlwMDRfZXRoYCBpcyBkZWZpbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgYnJvdWdodCB1cCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBpdCBjb3VsZCBiZSBlbmFibGVkIGZvciB0ZXN0aW5nIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hpcDA0X2V0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSElYNUhEMl9HTUFDKSAmIzQzOz0gaGl4NWhkMl9nbWFjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ISVAwNF9FVEgpICYjNDM7PSBoaXAwNF9ldGgub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX0hOU19NRElPKSAmIzQzOz0gaG5zX21kaW8ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz04Nzc9c3RhdGljIHZvaWQgaGlwMDRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtODgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjg4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpcDA0X2V0aHRvb2xfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTg4NS1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9UWF9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTk0MD1zdGF0aWMgaW50IGhpcDA0X21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy0xMDM0LVx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGlwMDRfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzoxMDM1Olx0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmhpcDA0X2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTEwMzYtXHRuZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYW4gRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0mIzM5O3MgdGVsbGluZyBtZSB0aGUgRXRoZXJuZXQgZHJpdmVyIGluIHVzZSBpcyBgQ09ORklHX0hJUDA0X0VUSGAuIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGV4YWN0IGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQmIzM5O3MgYW4gRXRoZXJuZXQgZHJpdmVyLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWdgIHNob3VsZCBiZSB0aGUgbW9zdCByZWxldmFudCBzcG90LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGZvciBgSElQMDRfRVRIYCB0byBjb25maXJtIGl0cyBvcmlnaW4sIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMgaXQgbWlnaHQgaW5mbHVlbmNlLCBhbmQganVzdCBnZW5lcmFsbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZGV0YWlscy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1lIHRvIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgYXNzb2NpYXRlZCBkcml2ZXIgY29kZSBpZiB0aGlzIHR1cm5zIG91dCB0byBiZSB0aGUgc291cmNlIG9mIG15IGN1cnJlbnQgdHJvdWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSElQMDRfRVRIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTI4PWNvbmZpZyBISVNJX0ZFTUFDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo0MDpjb25maWcgSElQMDRfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy00MS1cdHRyaXN0YXRlIFwmIzM0O0hJU0lMSUNPTiBQMDQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYEhJUDA0X0VUSGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBISVAwNF9FVEhgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyBjb21wb25lbnQgc2l0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcG9uZW50cyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8KCk15IG1haW4gZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBjaGFuZ2VzIHRvIGBISVAwNF9FVEhgIG1pZ2h0IHJpcHBsZSB0aHJvdWdob3V0IHRoZSBlbnRpcmUgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgbWFwIG9mIGl0cyBpbW1lZGlhdGUgZGVwZW5kZW50cywgYW5kIGFsc28gcG90ZW50aWFsbHkgaXRzIGluZGlyZWN0IGRlcGVuZGVudHMsIGlmIHRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGltbWVkaWF0ZWx5IGFjY2Vzc2libGUuIFRoZSBxdWFsaXR5IG9mIHRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgZHJpdmUgbXkgYWJpbGl0eSB0byBxdWlja2x5IHRyaWFnZSBhbnkgaXNzdWVzLiBJIHdpbGwgdHJ5IHRvIGNvbnNpZGVyIHRoZSBkYXRhIHN0cnVjdHVyZXMsIEFQSXMsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgoKSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRlcGVuZGVuY2llczogaGFyZCBkZXBlbmRlbmNpZXMgdGhhdCBtdXN0IGJlIHByZXNlbnQgZm9yIGBISVAwNF9FVEhgIHRvIGZ1bmN0aW9uLCB2ZXJzdXMgc29mdGVyIGRlcGVuZGVuY2llcyBvciAmIzM0O3N1Z2dlc3RlZCYjMzQ7IGNvbXBvbmVudHMuIEkgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdoYXQmIzM5O3MgYWJzb2x1dGVseSBjcml0aWNhbCBhbmQgd2hhdCYjMzk7cyBtZXJlbHkgcmVjb21tZW5kZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZXMuIE15IHByb2Nlc3Mgd2lsbCBkZXBlbmQgb24gdGhlIGRhdGEgYWNjZXNzLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZ2V0IGRhdGEgcXVpY2tseSwgYW5kIHRoZW4gdG8gY29uc2lkZXIgaG93IG11Y2ggZGV0YWlsIGlzIHJlcXVpcmVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0Y29uZmlnIEhJUDA0X0VUSFxuICA0MTpcdFx0dHJpc3RhdGUgXCYjMzQ7SElTSUxJQ09OIFAwNCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVx0IyBGb3IgTUZEX1NZU0NPTlxuICA0MzpcdFx0c2VsZWN0IE1BUlZFTExfUEhZXG4gIDQ0Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuICA0NTpcdFx0c2VsZWN0IEhOU19NRElPXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIGEgaGFyZHdhcmUgd2l0aCBoaXNpbGljb24gcDA0IFNvQyBhbmRcbiAgNDg6XHRcdCAgd2FudCB0byB1c2UgdGhlIGludGVybmFsIGV0aGVybmV0IHRoZW4geW91IHNob3VsZCBhbnN3ZXIgWSB0byB0aGlzLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBISTEzWDFfR01BQ1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtIaXNpbGljb24gSEkxM1gxIE5ldHdvcmsgRGV2aWNlIFN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gSElQMDRfRVRIXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIGEgaGFyZHdhcmUgd2l0aCBoaXNpbGljb24gaGkxM3gxX2dhbWNcbiAgNTU6XHRcdCAgdGhlbiB5b3Ugc2hvdWxkIGFuc3dlciBZIHRvIHRoaXMuIFRoaXMgbWFrZXMgdGhpcyBkcml2ZXIgc3VpdGFibGUgZm9yIHVzZVxuICA1NjpcdFx0ICBvbiBjZXJ0YWluIGJvYXJkcyBzdWNoIGFzIHRoZSBISTEzWDEuXG4gIDU3Olx0XG4gIDU4Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTi5cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGhpcDA0X21hY2AgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoaXAwNF9tYWNgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gLCB3aGljaCBzY3JlYW1zICYjMzQ7cGxhdGZvcm0tc3BlY2lmaWMmIzM0OyB0byBtZS4gVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBIaXNpbGljb24gUDA0IFNvQywgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBuZWVkICp2ZXJ5KiBzcGVjaWZpYyBlbXVsYXRpb24gdG8gd29yay4gTm8gZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50IGlzIGdvaW5nIHRvIGN1dCBpdCBoZXJlIHVubGVzcyBzb21lb25lIHdlbnQgdG8gdGhlIGVmZm9ydCBvZiBjcmVhdGluZyBhIHNwZWNpZmljIG1hY2hpbmUgZGVmaW5pdGlvbiBmb3IgdGhhdCBleGFjdCBTb0MuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzdWNoIGFuIGVtdWxhdGlvbiBleGlzdHMsIGJ1dCBJJiMzOTttIG5vdCBvcHRpbWlzdGljLiBRRU1VIGdlbmVyYWxseSBkb2VzbiYjMzk7dCBnbyB0byB0aGF0IGxldmVsIG9mIGRldGFpbCwgZXNwZWNpYWxseSBmb3Igd2hhdCYjMzk7cyBwcm9iYWJseSBhIHJlbGF0aXZlbHkgbmljaGUgZXRoZXJuZXQgY29udHJvbGxlci4gQ2hhbmNlcyBhcmUgaXQgaXMgbm90IGEgd2lkZWx5IHVzZWQgYm9hcmQuCgpUaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBUaGUgd2F5IHN5emthbGxlciB3b3JrcyBpcyB0aGF0IHVubGVzcyB0aGlzIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGl04oCZcyBub3QgZnV6emFibGUuIEV2ZW4gKmlmKiB3ZSBjb3VsZCBpbmplY3QgaXQsIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQgcHJvcGVybHksIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gaW1tZWRpYXRlbHkgZmFpbCBkdXJpbmcgdGhlIHByb2JlIHNlcXVlbmNlLiBUaGluZ3MgbGlrZSBJL08gbWVtb3J5IG1hcHBpbmcsIG9yIHJlZ2lzdGVyIGNoZWNrcyBhcmUgZ29pbmcgdG8gYmxvdyB1cC4KCkkmIzM5O2QgYmV0dGVyIGp1c3QgY2hlY2sgdGhlIHByb2JlIGZ1bmN0aW9uIChgaGlwMDRfbWFjX3Byb2JlYCkgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGRvIGR1cmluZyB0aGUgcHJvYmluZyBwaGFzZSwgYW5kIHdoYXQgaXQmIzM5O3MgZXhwZWN0aW5nIHRvIGZpbmQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGlkZWEgb2YgaG93IGRpZmZpY3VsdCBpdCYjMzk7cyBnb2luZyB0byBiZSB0byBldmVuIGdldCB0aGlzIGRyaXZlciB0byAqbG9hZCosIGxldCBhbG9uZSBmdXp6IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk0MDpcdHN0YXRpYyBpbnQgaGlwMDRfbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gOTQxOlx0e1xuIDk0MjpcdFx0c3RydWN0IGRldmljZSAqZCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDk0MzpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZC1cdTAwM2VvZl9ub2RlO1xuIDk0NDpcdFx0c3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmc7XG4gOTQ1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiA5NDY6XHRcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2O1xuIDk0NzpcdFx0aW50IGlycTtcbiA5NDg6XHRcdGludCByZXQ7XG4gOTQ5Olx0XG4gOTUwOlx0XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBoaXAwNF9wcml2KSk7XG4gOTUxOlx0XHRpZiAoIW5kZXYpXG4gOTUyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDk1MzpcdFxuIDk1NDpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDk1NTpcdFx0cHJpdi1cdTAwM2VkZXYgPSBkO1xuIDk1NjpcdFx0cHJpdi1cdTAwM2VuZGV2ID0gbmRldjtcbiA5NTc6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpO1xuIDk1ODpcdFx0U0VUX05FVERFVl9ERVYobmRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDk1OTpcdFxuIDk2MDpcdFx0cHJpdi1cdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDk2MTpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWJhc2UpKSB7XG4gOTYyOlx0XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2ViYXNlKTtcbiA5NjM6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4gOTY0Olx0XHR9XG4gOTY1Olx0XG4gOTY2Olx0I2lmIGRlZmluZWQoQ09ORklHX0hJMTNYMV9HTUFDKVxuIDk2NzpcdFx0cHJpdi1cdTAwM2VzeXNjdHJsX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XG4gOTY4Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlc3lzY3RybF9iYXNlKSkge1xuIDk2OTpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlc3lzY3RybF9iYXNlKTtcbiA5NzA6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4gOTcxOlx0XHR9XG4gOTcyOlx0I2VuZGlmXG4gOTczOlx0XG4gOTc0Olx0XHRyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJncyhub2RlLCBcJiMzNDtwb3J0LWhhbmRsZVwmIzM0OywgMywgMCwgXHUwMDI2YXJnKTtcbiA5NzU6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA5NzY6XHRcdFx0ZGV2X3dhcm4oZCwgXCYjMzQ7bm8gcG9ydC1oYW5kbGVcXG5cJiMzNDspO1xuIDk3NzpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbiA5Nzg6XHRcdH1cbiA5Nzk6XHRcbiA5ODA6XHRcdHByaXYtXHUwMDNlcG9ydCA9IGFyZy5hcmdzWzBdO1xuIDk4MTpcdFx0cHJpdi1cdTAwM2VjaGFuID0gYXJnLmFyZ3NbMV0gKiBSWF9ERVNDX05VTTtcbiA5ODI6XHRcdHByaXYtXHUwMDNlZ3JvdXAgPSBhcmcuYXJnc1syXTtcbiA5ODM6XHRcbiA5ODQ6XHRcdC8qIEJRTCB3aWxsIHRyeSB0byBrZWVwIHRoZSBUWCBxdWV1ZSBhcyBzaG9ydCBhcyBwb3NzaWJsZSwgYnV0IGl0IGNhbiYjMzk7dFxuIDk4NTpcdFx0ICogYmUgZmFzdGVyIHRoYW4gdHhfY29hbGVzY2VfdXNlY3MsIHNvIHdlIG5lZWQgYSBmYXN0IHRpbWVvdXQgaGVyZSxcbiA5ODY6XHRcdCAqIGJ1dCBhbHNvIGxvbmcgZW5vdWdoIHRvIGdhdGhlciB1cCBlbm91Z2ggZnJhbWVzIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3RcbiA5ODc6XHRcdCAqIGdldCBtb3JlIGludGVycnVwdHMgdGhhbiBuZWNlc3NhcnkuXG4gOTg4Olx0XHQgKiAyMDB1cyBpcyBlbm91Z2ggZm9yIDE2IGZyYW1lcyBvZiAxNTAwIGJ5dGVzIGF0IGdpZ2FiaXQgZXRoZXJuZXQgcmF0ZVxuIDk4OTpcdFx0ICovXG4gOTkwOlx0XHRwcml2LVx1MDAzZXR4X2NvYWxlc2NlX2ZyYW1lcyA9IFRYX0RFU0NfTlVNICogMyAvIDQ7XG4gOTkxOlx0XHRwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3VzZWNzID0gMjAwO1xuIDk5MjpcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCB0eF9kb25lLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuIDk5MzpcdFxuIDk5NDpcdFx0cHJpdi1cdTAwM2VtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJnLm5wKTtcbiA5OTU6XHRcdG9mX25vZGVfcHV0KGFyZy5ucCk7XG4gOTk2Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbWFwKSkge1xuIDk5NzpcdFx0XHRkZXZfd2FybihkLCBcJiMzNDtubyBzeXNjb24gaGlzaWxpY29uLGhpcDA0LXBwZVxcblwmIzM0Oyk7XG4gOTk4Olx0XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VtYXApO1xuIDk5OTpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbjEwMDA6XHRcdH1cbjEwMDE6XHRcbjEwMDI6XHRcdHJldCA9IG9mX2dldF9waHlfbW9kZShub2RlLCBcdTAwMjZwcml2LVx1MDAzZXBoeV9tb2RlKTtcbjEwMDM6XHRcdGlmIChyZXQpIHtcbjEwMDQ6XHRcdFx0ZGV2X3dhcm4oZCwgXCYjMzQ7bm90IGZpbmQgcGh5LW1vZGVcXG5cJiMzNDspO1xuMTAwNTpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbjEwMDY6XHRcdH1cbjEwMDc6XHRcbjEwMDg6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4xMDA5Olx0XHRpZiAoaXJxIFx1MDAzYyAwKSB7XG4xMDEwOlx0XHRcdHJldCA9IGlycTtcbjEwMTE6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4xMDEyOlx0XHR9XG4xMDEzOlx0XG4xMDE0Olx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGQsIGlycSwgaGlwMDRfbWFjX2ludGVycnVwdCxcbjEwMTU6XHRcdFx0XHQgICAgICAgMCwgcGRldi1cdTAwM2VuYW1lLCBuZGV2KTtcbjEwMTY6XHRcdGlmIChyZXQpIHtcbjEwMTc6XHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtkZXZtX3JlcXVlc3RfaXJxIGZhaWxlZFxcblwmIzM0Oyk7XG4xMDE4Olx0XHRcdGdvdG8gaW5pdF9mYWlsO1xuMTAxOTpcdFx0fVxuMTAyMDpcdFxuMTAyMTpcdFx0cHJpdi1cdTAwM2VwaHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgXCYjMzQ7cGh5LWhhbmRsZVwmIzM0OywgMCk7XG4xMDIyOlx0XHRpZiAocHJpdi1cdTAwM2VwaHlfbm9kZSkge1xuMTAyMzpcdFx0XHRwcml2LVx1MDAzZXBoeSA9IG9mX3BoeV9jb25uZWN0KG5kZXYsIHByaXYtXHUwMDNlcGh5X25vZGUsXG4xMDI0Olx0XHRcdFx0XHRcdCAgIFx1MDAyNmhpcDA0X2FkanVzdF9saW5rLFxuMTAyNTpcdFx0XHRcdFx0XHQgICAwLCBwcml2LVx1MDAzZXBoeV9tb2RlKTtcbjEwMjY6XHRcdFx0aWYgKCFwcml2LVx1MDAzZXBoeSkge1xuMTAyNzpcdFx0XHRcdHJldCA9IC1FUFJPQkVfREVGRVI7XG4xMDI4Olx0XHRcdFx0Z290byBpbml0X2ZhaWw7XG4xMDI5Olx0XHRcdH1cbjEwMzA6XHRcdH1cbjEwMzE6XHRcbjEwMzI6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzaywgaGlwMDRfdHhfdGltZW91dF90YXNrKTtcbjEwMzM6XHRcbjEwMzQ6XHRcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmhpcDA0X25ldGRldl9vcHM7XG4xMDM1Olx0XHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2aGlwMDRfZXRodG9vbF9vcHM7XG4xMDM2Olx0XHRuZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcbjEwMzc6XHRcdG5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XG4xMDM4Olx0XHRuZGV2LVx1MDAzZWlycSA9IGlycTtcbjEwMzk6XHRcdG5ldGlmX25hcGlfYWRkKG5kZXYsIFx1MDAyNnByaXYtXHUwMDNlbmFwaSwgaGlwMDRfcnhfcG9sbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZnV6emFibGUgRHJpdmVyIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBpbnRvIHRoaXMgZHJpdmVyJiMzOTtzIHByb2JlIHNlcXVlbmNlLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHJlbHlpbmcgaGVhdmlseSBvbiBEZXZpY2UgVHJlZSBwcm9wZXJ0aWVzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZWAgYW5kIGBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJnc2AgdG8gZ2V0IGl0cyBjb25maWd1cmF0aW9uLiBNeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZW11bGF0ZSBvciBpbmplY3QgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGUgZHJpdmVyIHdvbiYjMzk7dCBldmVuICphdHRlbXB0KiB0byBwcm9iZSB3aXRob3V0IHRoZW0uCgpDb25zaWRlcmluZyB0aGlzLCBhbmQga25vd2luZyB0aGF0IFN5emthbGxlciwgd2hpY2ggSSYjMzk7bSByZWx5aW5nIG9uIGZvciBmdXp6aW5nLCBpc24mIzM5O3QgZ29pbmcgdG8gbWFnaWNhbGx5IGdlbmVyYXRlIGEgRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLi4uIHdlbGwsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0byBtZSB0aGF0IHRoaXMgZHJpdmVyIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGFuIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIE5vIHBvaW50IGluIHdhc3RpbmcgcmVzb3VyY2VzLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIHZpcnR1YWxpemVkIHNldHVwIEkmIzM5O20gdXNpbmcgZm9yIGZ1enppbmcuIEkgd2lsbCBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMgb25lLiBJdCYjMzk7cyBzaW1wbHkgbm90IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE2Ljg5MDU3NTY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTcyNzI2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhJUDA0IGV0aGVybmV0IGRyaXZlciAoaGlwMDRfZXRoLmMpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFuZCBJL08gbWVtb3J5IG1hcHBpbmcgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMToxNi44OTA2MDQxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQzNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZmZGI0OTU3ZGUyOGY0NjkwNWI2MWMxNjVmNGRkOGIyOGVmYjIzMjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTE6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXFxuaW5kZXggMTgzNzZiY2M3MThhMjAuLmYxMTcwOWU1MzZkMzVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRXFx0XFx0MHgwMjZDXFxuIFxcbkBAIC0yMzIsNiArMjMzLDcgQEAgc3RydWN0IGhpcDA0X3ByaXYge1xcbiBcXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xcbiBcXHRpbnQgdHhfY29hbGVzY2VfdXNlY3M7XFxuIFxcdHN0cnVjdCBocnRpbWVyIHR4X2NvYWxlc2NlX3RpbWVyO1xcbitcXHRib29sIGNsb3Npbmc7XFxuIFxcbiBcXHR1bnNpZ25lZCBjaGFyICpyeF9idWZbUlhfREVTQ19OVU1dO1xcbiBcXHRkbWFfYWRkcl90IHJ4X3BoeXNbUlhfREVTQ19OVU1dO1xcbkBAIC00OTcsNiArNDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV91c2VjcyAqIE5TRUNfUEVSX1VTRUMgLyAyO1xcbiBcXG4rXFx0LyogRG8gbm90IChyZS0pYXJtIHRoZSBUWCBjb2FsZXNjZSB0aW1lciBvbmNlIHRlYXJkb3duIGhhcyBiZWd1bi5cXG4rXFx0ICogQm90aCBhcm1pbmcgc2l0ZXMgKFRYIHhtaXQgYW5kIE5BUEkgcnggcG9sbCkgZ28gdGhyb3VnaCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnByaXYtXFx1MDAzZWNsb3NpbmcpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiBhbGxvdyB0aW1lciB0byBmaXJlIGFmdGVyIGhhbGYgdGhlIHRpbWUgYXQgdGhlIGVhcmxpZXN0ICovXFxuIFxcdGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCBuc190b19rdGltZShucyksXFxuIFxcdFxcdFxcdCAgICAgICBucywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuQEAgLTY0OSwxMiArNjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHByaXYtXFx1MDAzZXJlZ19pbnRlbiB8PSBSQ1ZfSU5UO1xcbiBcXHRcXHR3cml0ZWxfcmVsYXhlZChwcml2LVxcdTAwM2VyZWdfaW50ZW4sIHByaXYtXFx1MDAzZWJhc2UgKyBQUEVfSU5URU4pO1xcbiBcXHR9XFxuK1xcdC8qIEFybSB0aGUgY29hbGVzY2UgdGltZXIgQkVGT1JFIG5hcGlfY29tcGxldGVfZG9uZSgpOiBuYXBpX2Rpc2FibGUoKVxcbitcXHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXFxuK1xcdCAqIHRoZSBwb2xsIGZ1bmN0aW9uIHJldHVybnMsIHNvIGFybWluZyBhZnRlcndhcmRzIGNhbiBzbGlwIHBhc3QgdGhlXFxuK1xcdCAqIHN0b3AgcGF0aCdzIGhydGltZXJfY2FuY2VsKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAodHhfcmVtYWluaW5nKVxcbitcXHRcXHRoaXAwNF9zdGFydF90eF90aW1lcihwcml2KTtcXG4gXFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHJ4KTtcXG4gZG9uZTpcXG4tXFx0Lyogc3RhcnQgYSBuZXcgdGltZXIgaWYgbmVjZXNzYXJ5ICovXFxuLVxcdGlmIChyeCBcXHUwMDNjIGJ1ZGdldCBcXHUwMDI2XFx1MDAyNiB0eF9yZW1haW5pbmcpXFxuLVxcdFxcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xcbi1cXG4gXFx0cmV0dXJuIHJ4O1xcbiB9XFxuIFxcbkBAIC03MjksNiArNzQwLDExIEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHByaXYtXFx1MDAzZXJ4X2NudF9yZW1haW5pbmcgPSAwO1xcbiBcXHRwcml2LVxcdTAwM2V0eF9oZWFkID0gMDtcXG4gXFx0cHJpdi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdC8qIEEgcGxhaW4gd3JpdGUgaXMgc3VmZmljaWVudCBoZXJlOiBtYWNfb3BlbigpIHJ1bnMgdW5kZXIgUlROTCwgc28gaXRcXG4rXFx0ICogY2Fubm90IHJhY2UgbWFjX3N0b3AoKSdzIHN0b3JlLXJlbGVhc2UsIGFuZCBuYXBpX2VuYWJsZSgpIGJlbG93IG9yZGVyc1xcbitcXHQgKiB0aGlzIHJlc2V0IGJlZm9yZSBhbnkgVFgvTkFQSSB0cmFmZmljIGNhbiByZXN1bWUuXFxuK1xcdCAqL1xcbitcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWNsb3NpbmcsIGZhbHNlKTtcXG4gXFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJYX0RFU0NfTlVNOyBpKyspIHtcXG5AQCAtNzU5LDggKzc3NSwyNiBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdC8qIFN0b3AgbmV3IHRpbWVyIGFybXMgYmVmb3JlIGRyYWluaW5nOiBzZXQgdGhlIGNsb3NpbmcgZmxhZyAoY2hlY2tlZFxcbitcXHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxcbitcXHQgKiBUWCB0byBmaW5pc2gsIHRoZW4gY2FuY2VsIHRoZSB0aW1lci5cXG4rXFx0ICpcXG4rXFx0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcXG4rXFx0ICogZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBoaXAwNF90eF90aW1lb3V0X3Rhc2soKSwgbm90XFxuK1xcdCAqIG9ubHkgdmlhIC5uZG9fc3RvcCB3aGVyZSB0aGUgY29yZSBoYXMgYWxyZWFkeSBkZWFjdGl2YXRlZCBUWDtcXG4rXFx0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcXG4rXFx0ICogd2hpY2ggYXJtcyB0aGUgdGltZXIsIHRvIGZpbmlzaC5cXG4rXFx0ICpcXG4rXFx0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxcbitcXHQgKiBuYXBpX2Rpc2FibGUoKSByZXR1cm5pbmcgbWVhbnMgdGhhdCBhcm0gaGFzIGhhcHBlbmVkLCBzbyB0aGVcXG4rXFx0ICogaHJ0aW1lcl9jYW5jZWwoKSBiZWxvdyBjYW5ub3QgbWlzcyBpdC4gIFRoZSBzdG9yZS1yZWxlYXNlIHBhaXJzXFxuK1xcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZwcml2LVxcdTAwM2VjbG9zaW5nLCB0cnVlKTtcXG4rXFxuIFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuLVxcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XFxuK1xcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XFxuIFxcdGhpcDA0X21hY19kaXNhYmxlKG5kZXYpO1xcbiBcXHRoaXAwNF90eF9yZWNsYWltKG5kZXYsIHRydWUpO1xcbiBcXHRoaXAwNF9yZXNldF9wcGUocHJpdik7XFxuQEAgLTc5MSw4ICs4MjUsMjEgQEAgc3RhdGljIHZvaWQgaGlwMDRfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXY7XFxuIFxcbiBcXHRwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoaXAwNF9wcml2LCB0eF90aW1lb3V0X3Rhc2spO1xcbitcXG4rXFx0LyogQmFpbCBpZiB0aGUgZGV2aWNlIHdhcyB0YWtlbiBkb3duIChkZXZfY2xvc2UvdW5yZWdpc3RlcikuICBUaGVcXG4rXFx0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXFxuK1xcdCAqIF9fTElOS19TVEFURV9TVEFSVCwgc28gdGhpcyBndWFyZCBkb2VzIG5vdCBtYXRjaCB0aGUgcmVzdGFydCdzXFxuK1xcdCAqIG93biBzdG9wOyBpdCBleGlzdHMgb25seSB0byBhdm9pZCByZXN0YXJ0aW5nIGEgdG9ybi1kb3duIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcocHJpdi1cXHUwMDNlbmRldikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aGlwMDRfbWFjX3N0b3AocHJpdi1cXHUwMDNlbmRldik7XFxuLVxcdGhpcDA0X21hY19vcGVuKHByaXYtXFx1MDAzZW5kZXYpO1xcbitcXHRpZiAoaGlwMDRfbWFjX29wZW4ocHJpdi1cXHUwMDNlbmRldikpXFxuK1xcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlbmRldiwgXFxcInJlc3RhcnQgYWZ0ZXIgdHggdGltZW91dCBmYWlsZWRcXFxcblxcXCIpO1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGlwMDRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuQEAgLTEwMjYsMTMgKzEwNzMsMjQgQEAgc3RhdGljIHZvaWQgaGlwMDRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK1xcbitcXHQvKiBUaGUgSVJRIGlzIGRldm0tbWFuYWdlZCBhbmQgd291bGQgb3RoZXJ3aXNlIGJlIGZyZWVkIG9ubHkgYWZ0ZXJcXG4rXFx0ICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzXFxuK1xcdCAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXRcXG4rXFx0ICogYmVmb3JlIHRoZSBtYW51YWwgZnJlZV9uZXRkZXYoKSBiZWxvdywgc28gdGhhdCBoaXAwNF9tYWNfaW50ZXJydXB0KClcXG4rXFx0ICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzb1xcbitcXHQgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLlxcbitcXHQgKi9cXG4rXFx0ZGV2bV9mcmVlX2lycShkLCBuZGV2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwcml2LVxcdTAwM2V0eF90aW1lb3V0X3Rhc2spO1xcbitcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2cHJpdi1cXHUwMDNldHhfY29hbGVzY2VfdGltZXIpO1xcbitcXG4gXFx0aWYgKHByaXYtXFx1MDAzZXBoeSlcXG4gXFx0XFx0cGh5X2Rpc2Nvbm5lY3QocHJpdi1cXHUwMDNlcGh5KTtcXG4gXFxuIFxcdGhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTtcXG4tXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuIFxcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZXBoeV9ub2RlKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfdGltZW91dF90YXNrKTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE3LjQ0ODQ0MjM4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTQ4NTM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmZkYjQ5NTdkZTI4ZjQ2OTA1YjYxYzE2NWY0ZGQ4YjI4ZWZiMjMyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjExOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXG5pbmRleCAxODM3NmJjYzcxOGEyMC4uZjExNzA5ZTUzNmQzNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRXHRcdDB4MDI2Q1xuIFxuQEAgLTIzMiw2ICsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7XG4gXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xuIFx0aW50IHR4X2NvYWxlc2NlX3VzZWNzO1xuIFx0c3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7XG4rXHRib29sIGNsb3Npbmc7XG4gXG4gXHR1bnNpZ25lZCBjaGFyICpyeF9idWZbUlhfREVTQ19OVU1dO1xuIFx0ZG1hX2FkZHJfdCByeF9waHlzW1JYX0RFU0NfTlVNXTtcbkBAIC00OTcsNiArNDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3VzZWNzICogTlNFQ19QRVJfVVNFQyAvIDI7XG4gXG4rXHQvKiBEbyBub3QgKHJlLSlhcm0gdGhlIFRYIGNvYWxlc2NlIHRpbWVyIG9uY2UgdGVhcmRvd24gaGFzIGJlZ3VuLlxuK1x0ICogQm90aCBhcm1pbmcgc2l0ZXMgKFRYIHhtaXQgYW5kIE5BUEkgcnggcG9sbCkgZ28gdGhyb3VnaCBoZXJlLlxuK1x0ICovXG4rXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBhbGxvdyB0aW1lciB0byBmaXJlIGFmdGVyIGhhbGYgdGhlIHRpbWUgYXQgdGhlIGVhcmxpZXN0ICovXG4gXHRocnRpbWVyX3N0YXJ0X3JhbmdlX25zKFx1MDAyNnByaXYtXHUwMDNldHhfY29hbGVzY2VfdGltZXIsIG5zX3RvX2t0aW1lKG5zKSxcbiBcdFx0XHQgICAgICAgbnMsIEhSVElNRVJfTU9ERV9SRUwpO1xuQEAgLTY0OSwxMiArNjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHByaXYtXHUwMDNlcmVnX2ludGVuIHw9IFJDVl9JTlQ7XG4gXHRcdHdyaXRlbF9yZWxheGVkKHByaXYtXHUwMDNlcmVnX2ludGVuLCBwcml2LVx1MDAzZWJhc2UgKyBQUEVfSU5URU4pO1xuIFx0fVxuK1x0LyogQXJtIHRoZSBjb2FsZXNjZSB0aW1lciBCRUZPUkUgbmFwaV9jb21wbGV0ZV9kb25lKCk6IG5hcGlfZGlzYWJsZSgpXG4rXHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXG4rXHQgKiB0aGUgcG9sbCBmdW5jdGlvbiByZXR1cm5zLCBzbyBhcm1pbmcgYWZ0ZXJ3YXJkcyBjYW4gc2xpcCBwYXN0IHRoZVxuK1x0ICogc3RvcCBwYXRoJ3MgaHJ0aW1lcl9jYW5jZWwoKS5cbitcdCAqL1xuK1x0aWYgKHR4X3JlbWFpbmluZylcbitcdFx0aGlwMDRfc3RhcnRfdHhfdGltZXIocHJpdik7XG4gXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpO1xuIGRvbmU6XG4tXHQvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChyeCBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiB0eF9yZW1haW5pbmcpXG4tXHRcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xuLVxuIFx0cmV0dXJuIHJ4O1xuIH1cbiBcbkBAIC03MjksNiArNzQwLDExIEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRwcml2LVx1MDAzZXJ4X2NudF9yZW1haW5pbmcgPSAwO1xuIFx0cHJpdi1cdTAwM2V0eF9oZWFkID0gMDtcbiBcdHByaXYtXHUwMDNldHhfdGFpbCA9IDA7XG4rXHQvKiBBIHBsYWluIHdyaXRlIGlzIHN1ZmZpY2llbnQgaGVyZTogbWFjX29wZW4oKSBydW5zIHVuZGVyIFJUTkwsIHNvIGl0XG4rXHQgKiBjYW5ub3QgcmFjZSBtYWNfc3RvcCgpJ3Mgc3RvcmUtcmVsZWFzZSwgYW5kIG5hcGlfZW5hYmxlKCkgYmVsb3cgb3JkZXJzXG4rXHQgKiB0aGlzIHJlc2V0IGJlZm9yZSBhbnkgVFgvTkFQSSB0cmFmZmljIGNhbiByZXN1bWUuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VjbG9zaW5nLCBmYWxzZSk7XG4gXHRoaXAwNF9yZXNldF9wcGUocHJpdik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSWF9ERVNDX05VTTsgaSsrKSB7XG5AQCAtNzU5LDggKzc3NSwyNiBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBpO1xuIFxuK1x0LyogU3RvcCBuZXcgdGltZXIgYXJtcyBiZWZvcmUgZHJhaW5pbmc6IHNldCB0aGUgY2xvc2luZyBmbGFnIChjaGVja2VkXG4rXHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxuK1x0ICogVFggdG8gZmluaXNoLCB0aGVuIGNhbmNlbCB0aGUgdGltZXIuXG4rXHQgKlxuK1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcbitcdCAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gaGlwMDRfdHhfdGltZW91dF90YXNrKCksIG5vdFxuK1x0ICogb25seSB2aWEgLm5kb19zdG9wIHdoZXJlIHRoZSBjb3JlIGhhcyBhbHJlYWR5IGRlYWN0aXZhdGVkIFRYO1xuK1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcbitcdCAqIHdoaWNoIGFybXMgdGhlIHRpbWVyLCB0byBmaW5pc2guXG4rXHQgKlxuK1x0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxuK1x0ICogbmFwaV9kaXNhYmxlKCkgcmV0dXJuaW5nIG1lYW5zIHRoYXQgYXJtIGhhcyBoYXBwZW5lZCwgc28gdGhlXG4rXHQgKiBocnRpbWVyX2NhbmNlbCgpIGJlbG93IGNhbm5vdCBtaXNzIGl0LiAgVGhlIHN0b3JlLXJlbGVhc2UgcGFpcnNcbitcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cbitcdCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cHJpdi1cdTAwM2VjbG9zaW5nLCB0cnVlKTtcbitcbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XG4rXHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcbiBcdGhpcDA0X21hY19kaXNhYmxlKG5kZXYpO1xuIFx0aGlwMDRfdHhfcmVjbGFpbShuZGV2LCB0cnVlKTtcbiBcdGhpcDA0X3Jlc2V0X3BwZShwcml2KTtcbkBAIC03OTEsOCArODI1LDIxIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7XG4rXG4rXHQvKiBCYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIHRha2VuIGRvd24gKGRldl9jbG9zZS91bnJlZ2lzdGVyKS4gIFRoZVxuK1x0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXG4rXHQgKiBfX0xJTktfU1RBVEVfU1RBUlQsIHNvIHRoaXMgZ3VhcmQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3RhcnQnc1xuK1x0ICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLlxuK1x0ICovXG4rXHRydG5sX2xvY2soKTtcbitcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVx1MDAzZW5kZXYpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGhpcDA0X21hY19zdG9wKHByaXYtXHUwMDNlbmRldik7XG4tXHRoaXAwNF9tYWNfb3Blbihwcml2LVx1MDAzZW5kZXYpO1xuK1x0aWYgKGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldikpXG4rXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZGV2LCBcInJlc3RhcnQgYWZ0ZXIgdHggdGltZW91dCBmYWlsZWRcXG5cIik7XG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbiB9XG4gXG4gc3RhdGljIGludCBoaXAwNF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbkBAIC0xMDI2LDEzICsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcbitcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuK1xuK1x0LyogVGhlIElSUSBpcyBkZXZtLW1hbmFnZWQgYW5kIHdvdWxkIG90aGVyd2lzZSBiZSBmcmVlZCBvbmx5IGFmdGVyXG4rXHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBGcmVlIGl0IG5vdywgYWZ0ZXIgdW5yZWdpc3Rlcl9uZXRkZXYoKSBoYXNcbitcdCAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXRcbitcdCAqIGJlZm9yZSB0aGUgbWFudWFsIGZyZWVfbmV0ZGV2KCkgYmVsb3csIHNvIHRoYXQgaGlwMDRfbWFjX2ludGVycnVwdCgpXG4rXHQgKiAoZGV2X2lkID09IG5kZXYpIGNhbm5vdCBmaXJlIGFnYWluc3QgZnJlZWQgbWVtb3J5LiAgZnJlZV9pcnEoKSBhbHNvXG4rXHQgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLlxuK1x0ICovXG4rXHRkZXZtX2ZyZWVfaXJxKGQsIG5kZXYtXHUwMDNlaXJxLCBuZGV2KTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2V0eF90aW1lb3V0X3Rhc2spO1xuK1x0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG4rXG4gXHRpZiAocHJpdi1cdTAwM2VwaHkpXG4gXHRcdHBoeV9kaXNjb25uZWN0KHByaXYtXHUwMDNlcGh5KTtcbiBcbiBcdGhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTtcbi1cdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuIFx0b2Zfbm9kZV9wdXQocHJpdi1cdTAwM2VwaHlfbm9kZSk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNldHhfdGltZW91dF90YXNrKTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE3LjQ0ODQ0NTAzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzkyNDE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSGlzaWxpY29uIEhJUDA0IEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jYCBmaWxlLCB3aGljaCBpcyB0aGUgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgSGlzaWxpY29uIEhJUDA0LiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSByYWNlIGNvbmRpdGlvbnMgYW5kIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBkcml2ZXIncyB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgYHByaXYtXHUwMDNlY2xvc2luZ2AgZmxhZyB0byBtYW5hZ2UgdGltZXIgcmUtYXJtaW5nLCB0d2Vha2VkIHRoZSBSWCBwb2xsaW5nIGxvZ2ljIHRvIGhhbmRsZSB0aGUgdGltZXIgbW9yZSBjYXJlZnVsbHksIGFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIG9wZW4vc3RvcC90aW1lb3V0IGZ1bmN0aW9ucyB0byBwcm9wZXJseSBtYW5hZ2UgdGhlIGRyaXZlcidzIHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc2h1dGRvd24uIFRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGJlZW4gdXBkYXRlZCB0byBkbyBhIHByb3BlciBjbGVhbnVwLCBpbmNsdWRpbmcgdW5yZWdpc3RlcmluZyB0aGUgbmV0IGRldmljZSwgZnJlZWluZyBpbnRlcnJ1cHRzLCBhbmQgY2FuY2VsaW5nIGFueSBwZW5kaW5nIHdvcmsgb3IgdGltZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gSSBldmVuICpzZWUqIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1wiIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciwgbGlrZSBhIEhJUDA0LCBpdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IEknbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBlbXVsYXRvciBmb3IgdGhlIEhJUDA0IGhhcmR3YXJlLCBvciwgbGVzcyBsaWtlbHksIHNvbWUgY2xldmVyIHNvZnR3YXJlIGluc3RhbnRpYXRpb24gbWVjaGFuaXNtLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2Uga2luZHMgb2YgZHJpdmVycyBhcmUgdGllZCB2ZXJ5IGNsb3NlbHkgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB5ZXMsIHRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiB0YWtlcyBhIGBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2YCB3aGljaCBjb25maXJtcyBpdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSBwcm9iZSBpdCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHByb2JhYmx5IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIGRyaXZlciBoYXMuIE9yLCBtYXliZSBJIGNvdWxkIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYGhpcDA0X2V0aGAgaXMgZGVmaW5lZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGJyb3VnaHQgdXAgYW5kIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSBpdCBjb3VsZCBiZSBlbmFibGVkIGZvciB0ZXN0aW5nIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MjQuMDg3Njg5ODgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjkzNjgxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGlwMDRfZXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ISVg1SEQyX0dNQUMpICs9IGhpeDVoZDJfZ21hYy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hJUDA0X0VUSCkgKz0gaGlwMDRfZXRoLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGUtOC1vYmotJChDT05GSUdfSE5TX01ESU8pICs9IGhuc19tZGlvLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz04Nzc9c3RhdGljIHZvaWQgaGlwMDRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy04ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjg4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpcDA0X2V0aHRvb2xfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy04ODUtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1RYX1VTRUNTIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz05NDA9c3RhdGljIGludCBoaXAwNF9tYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy0xMDM0LVxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aGlwMDRfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6MTAzNTpcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZoaXAwNF9ldGh0b29sX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtMTAzNi1cXHRuZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjI2LjI1NzA2MzA4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Njk4NjY2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgYW4gRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgdGhlIEV0aGVybmV0IGRyaXZlciBpbiB1c2UgaXMgYENPTkZJR19ISVAwNF9FVEhgLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBleGFjdCBkZWZpbml0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQncyBhbiBFdGhlcm5ldCBkcml2ZXIsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZ2Agc2hvdWxkIGJlIHRoZSBtb3N0IHJlbGV2YW50IHNwb3QuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSBmb3IgYEhJUDA0X0VUSGAgdG8gY29uZmlybSBpdHMgb3JpZ2luLCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGluZmx1ZW5jZSwgYW5kIGp1c3QgZ2VuZXJhbGx5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGFpbHMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtZSB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhlIGFzc29jaWF0ZWQgZHJpdmVyIGNvZGUgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgdGhlIHNvdXJjZSBvZiBteSBjdXJyZW50IHRyb3VibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMToyOS4xMjY5MzE1OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMTUzMzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElQMDRfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTI4PWNvbmZpZyBISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo0MDpjb25maWcgSElQMDRfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctNDEtXFx0dHJpc3RhdGUgXFxcIkhJU0lMSUNPTiBQMDQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MzEuMzQ4NDcxNzIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMjIyOTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBISVAwNF9FVEhgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBISVAwNF9FVEhgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyBjb21wb25lbnQgc2l0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcG9uZW50cyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj9cblxuTXkgbWFpbiBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGNoYW5nZXMgdG8gYEhJUDA0X0VUSGAgbWlnaHQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEknbSBsb29raW5nIGZvciBhIGNsZWFyIG1hcCBvZiBpdHMgaW1tZWRpYXRlIGRlcGVuZGVudHMsIGFuZCBhbHNvIHBvdGVudGlhbGx5IGl0cyBpbmRpcmVjdCBkZXBlbmRlbnRzLCBpZiB0aGF0IGxldmVsIG9mIGRldGFpbCBpcyBpbW1lZGlhdGVseSBhY2Nlc3NpYmxlLiBUaGUgcXVhbGl0eSBvZiB0aGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIGRyaXZlIG15IGFiaWxpdHkgdG8gcXVpY2tseSB0cmlhZ2UgYW55IGlzc3Vlcy4gSSB3aWxsIHRyeSB0byBjb25zaWRlciB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBBUElzLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuSSdsbCBiZSBtaW5kZnVsIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZGVwZW5kZW5jaWVzOiBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgYmUgcHJlc2VudCBmb3IgYEhJUDA0X0VUSGAgdG8gZnVuY3Rpb24sIHZlcnN1cyBzb2Z0ZXIgZGVwZW5kZW5jaWVzIG9yIFwic3VnZ2VzdGVkXCIgY29tcG9uZW50cy4gSSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gd2hhdCdzIGFic29sdXRlbHkgY3JpdGljYWwgYW5kIHdoYXQncyBtZXJlbHkgcmVjb21tZW5kZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZXMuIE15IHByb2Nlc3Mgd2lsbCBkZXBlbmQgb24gdGhlIGRhdGEgYWNjZXNzLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZ2V0IGRhdGEgcXVpY2tseSwgYW5kIHRoZW4gdG8gY29uc2lkZXIgaG93IG11Y2ggZGV0YWlsIGlzIHJlcXVpcmVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MzQuODUwNzAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdGNvbmZpZyBISVAwNF9FVEhcXG4gIDQxOlxcdFxcdHRyaXN0YXRlIFxcXCJISVNJTElDT04gUDA0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcdCMgRm9yIE1GRF9TWVNDT05cXG4gIDQzOlxcdFxcdHNlbGVjdCBNQVJWRUxMX1BIWVxcbiAgNDQ6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gIDQ1OlxcdFxcdHNlbGVjdCBITlNfTURJT1xcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciBhIGhhcmR3YXJlIHdpdGggaGlzaWxpY29uIHAwNCBTb0MgYW5kXFxuICA0ODpcXHRcXHQgIHdhbnQgdG8gdXNlIHRoZSBpbnRlcm5hbCBldGhlcm5ldCB0aGVuIHlvdSBzaG91bGQgYW5zd2VyIFkgdG8gdGhpcy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEhJMTNYMV9HTUFDXFxuICA1MTpcXHRcXHRib29sIFxcXCJIaXNpbGljb24gSEkxM1gxIE5ldHdvcmsgRGV2aWNlIFN1cHBvcnRcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEhJUDA0X0VUSFxcbiAgNTM6XFx0XFx0aGVscFxcbiAgNTQ6XFx0XFx0ICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciBhIGhhcmR3YXJlIHdpdGggaGlzaWxpY29uIGhpMTN4MV9nYW1jXFxuICA1NTpcXHRcXHQgIHRoZW4geW91IHNob3VsZCBhbnN3ZXIgWSB0byB0aGlzLiBUaGlzIG1ha2VzIHRoaXMgZHJpdmVyIHN1aXRhYmxlIGZvciB1c2VcXG4gIDU2OlxcdFxcdCAgb24gY2VydGFpbiBib2FyZHMgc3VjaCBhcyB0aGUgSEkxM1gxLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTi5cXG4gIDU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMTozNC44NTA3NzU0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODM1MzA1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaGlwMDRfbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoaXAwNF9tYWNgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gLCB3aGljaCBzY3JlYW1zIFwicGxhdGZvcm0tc3BlY2lmaWNcIiB0byBtZS4gVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBIaXNpbGljb24gUDA0IFNvQywgYW5kIHRoYXQgbWVhbnMgaXQncyBwcmV0dHkgbXVjaCBndWFyYW50ZWVkIHRvIG5lZWQgKnZlcnkqIHNwZWNpZmljIGVtdWxhdGlvbiB0byB3b3JrLiBObyBnZW5lcmljIFFFTVUgZW52aXJvbm1lbnQgaXMgZ29pbmcgdG8gY3V0IGl0IGhlcmUgdW5sZXNzIHNvbWVvbmUgd2VudCB0byB0aGUgZWZmb3J0IG9mIGNyZWF0aW5nIGEgc3BlY2lmaWMgbWFjaGluZSBkZWZpbml0aW9uIGZvciB0aGF0IGV4YWN0IFNvQy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgc3VjaCBhbiBlbXVsYXRpb24gZXhpc3RzLCBidXQgSSdtIG5vdCBvcHRpbWlzdGljLiBRRU1VIGdlbmVyYWxseSBkb2Vzbid0IGdvIHRvIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IGZvciB3aGF0J3MgcHJvYmFibHkgYSByZWxhdGl2ZWx5IG5pY2hlIGV0aGVybmV0IGNvbnRyb2xsZXIuIENoYW5jZXMgYXJlIGl0IGlzIG5vdCBhIHdpZGVseSB1c2VkIGJvYXJkLlxuXG5UaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBUaGUgd2F5IHN5emthbGxlciB3b3JrcyBpcyB0aGF0IHVubGVzcyB0aGlzIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGl04oCZcyBub3QgZnV6emFibGUuIEV2ZW4gKmlmKiB3ZSBjb3VsZCBpbmplY3QgaXQsIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZCBwcm9wZXJseSwgdGhlIGRyaXZlciBpcyBnb2luZyB0byBpbW1lZGlhdGVseSBmYWlsIGR1cmluZyB0aGUgcHJvYmUgc2VxdWVuY2UuIFRoaW5ncyBsaWtlIEkvTyBtZW1vcnkgbWFwcGluZywgb3IgcmVnaXN0ZXIgY2hlY2tzIGFyZSBnb2luZyB0byBibG93IHVwLlxuXG5JJ2QgYmV0dGVyIGp1c3QgY2hlY2sgdGhlIHByb2JlIGZ1bmN0aW9uIChgaGlwMDRfbWFjX3Byb2JlYCkgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQncyB0cnlpbmcgdG8gZG8gZHVyaW5nIHRoZSBwcm9iaW5nIHBoYXNlLCBhbmQgd2hhdCBpdCdzIGV4cGVjdGluZyB0byBmaW5kLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBpZGVhIG9mIGhvdyBkaWZmaWN1bHQgaXQncyBnb2luZyB0byBiZSB0byBldmVuIGdldCB0aGlzIGRyaXZlciB0byAqbG9hZCosIGxldCBhbG9uZSBmdXp6IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6NDAuMjM0MzA4Mzg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHRzdGF0aWMgaW50IGhpcDA0X21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA5NDE6XFx0e1xcbiA5NDI6XFx0XFx0c3RydWN0IGRldmljZSAqZCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDk0MzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkLVxcdTAwM2VvZl9ub2RlO1xcbiA5NDQ6XFx0XFx0c3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmc7XFxuIDk0NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gOTQ2OlxcdFxcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2O1xcbiA5NDc6XFx0XFx0aW50IGlycTtcXG4gOTQ4OlxcdFxcdGludCByZXQ7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdG5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhpcDA0X3ByaXYpKTtcXG4gOTUxOlxcdFxcdGlmICghbmRldilcXG4gOTUyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTM6XFx0XFxuIDk1NDpcXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIDk1NTpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBkO1xcbiA5NTY6XFx0XFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuIDk1NzpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTtcXG4gOTU4OlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRwcml2LVxcdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA5NjE6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2ViYXNlKSkge1xcbiA5NjI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwcml2LVxcdTAwM2ViYXNlKTtcXG4gOTYzOlxcdFxcdFxcdGdvdG8gaW5pdF9mYWlsO1xcbiA5NjQ6XFx0XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHQjaWYgZGVmaW5lZChDT05GSUdfSEkxM1gxX0dNQUMpXFxuIDk2NzpcXHRcXHRwcml2LVxcdTAwM2VzeXNjdHJsX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XFxuIDk2ODpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXN5c2N0cmxfYmFzZSkpIHtcXG4gOTY5OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlc3lzY3RybF9iYXNlKTtcXG4gOTcwOlxcdFxcdFxcdGdvdG8gaW5pdF9mYWlsO1xcbiA5NzE6XFx0XFx0fVxcbiA5NzI6XFx0I2VuZGlmXFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzKG5vZGUsIFxcXCJwb3J0LWhhbmRsZVxcXCIsIDMsIDAsIFxcdTAwMjZhcmcpO1xcbiA5NzU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gOTc2OlxcdFxcdFxcdGRldl93YXJuKGQsIFxcXCJubyBwb3J0LWhhbmRsZVxcXFxuXFxcIik7XFxuIDk3NzpcXHRcXHRcXHRnb3RvIGluaXRfZmFpbDtcXG4gOTc4OlxcdFxcdH1cXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0cHJpdi1cXHUwMDNlcG9ydCA9IGFyZy5hcmdzWzBdO1xcbiA5ODE6XFx0XFx0cHJpdi1cXHUwMDNlY2hhbiA9IGFyZy5hcmdzWzFdICogUlhfREVTQ19OVU07XFxuIDk4MjpcXHRcXHRwcml2LVxcdTAwM2Vncm91cCA9IGFyZy5hcmdzWzJdO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHRcXHQvKiBCUUwgd2lsbCB0cnkgdG8ga2VlcCB0aGUgVFggcXVldWUgYXMgc2hvcnQgYXMgcG9zc2libGUsIGJ1dCBpdCBjYW4ndFxcbiA5ODU6XFx0XFx0ICogYmUgZmFzdGVyIHRoYW4gdHhfY29hbGVzY2VfdXNlY3MsIHNvIHdlIG5lZWQgYSBmYXN0IHRpbWVvdXQgaGVyZSxcXG4gOTg2OlxcdFxcdCAqIGJ1dCBhbHNvIGxvbmcgZW5vdWdoIHRvIGdhdGhlciB1cCBlbm91Z2ggZnJhbWVzIHRvIGVuc3VyZSB3ZSBkb24ndFxcbiA5ODc6XFx0XFx0ICogZ2V0IG1vcmUgaW50ZXJydXB0cyB0aGFuIG5lY2Vzc2FyeS5cXG4gOTg4OlxcdFxcdCAqIDIwMHVzIGlzIGVub3VnaCBmb3IgMTYgZnJhbWVzIG9mIDE1MDAgYnl0ZXMgYXQgZ2lnYWJpdCBldGhlcm5ldCByYXRlXFxuIDk4OTpcXHRcXHQgKi9cXG4gOTkwOlxcdFxcdHByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX2ZyYW1lcyA9IFRYX0RFU0NfTlVNICogMyAvIDQ7XFxuIDk5MTpcXHRcXHRwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV91c2VjcyA9IDIwMDtcXG4gOTkyOlxcdFxcdGhydGltZXJfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCB0eF9kb25lLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRwcml2LVxcdTAwM2VtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJnLm5wKTtcXG4gOTk1OlxcdFxcdG9mX25vZGVfcHV0KGFyZy5ucCk7XFxuIDk5NjpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZW1hcCkpIHtcXG4gOTk3OlxcdFxcdFxcdGRldl93YXJuKGQsIFxcXCJubyBzeXNjb24gaGlzaWxpY29uLGhpcDA0LXBwZVxcXFxuXFxcIik7XFxuIDk5ODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZW1hcCk7XFxuIDk5OTpcXHRcXHRcXHRnb3RvIGluaXRfZmFpbDtcXG4xMDAwOlxcdFxcdH1cXG4xMDAxOlxcdFxcbjEwMDI6XFx0XFx0cmV0ID0gb2ZfZ2V0X3BoeV9tb2RlKG5vZGUsIFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfbW9kZSk7XFxuMTAwMzpcXHRcXHRpZiAocmV0KSB7XFxuMTAwNDpcXHRcXHRcXHRkZXZfd2FybihkLCBcXFwibm90IGZpbmQgcGh5LW1vZGVcXFxcblxcXCIpO1xcbjEwMDU6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAwNjpcXHRcXHR9XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XFxuMTAwOTpcXHRcXHRpZiAoaXJxIFxcdTAwM2MgMCkge1xcbjEwMTA6XFx0XFx0XFx0cmV0ID0gaXJxO1xcbjEwMTE6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAxMjpcXHRcXHR9XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdHJldCA9IGRldm1fcmVxdWVzdF9pcnEoZCwgaXJxLCBoaXAwNF9tYWNfaW50ZXJydXB0LFxcbjEwMTU6XFx0XFx0XFx0XFx0ICAgICAgIDAsIHBkZXYtXFx1MDAzZW5hbWUsIG5kZXYpO1xcbjEwMTY6XFx0XFx0aWYgKHJldCkge1xcbjEwMTc6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZGV2bV9yZXF1ZXN0X2lycSBmYWlsZWRcXFxcblxcXCIpO1xcbjEwMTg6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAxOTpcXHRcXHR9XFxuMTAyMDpcXHRcXG4xMDIxOlxcdFxcdHByaXYtXFx1MDAzZXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCBcXFwicGh5LWhhbmRsZVxcXCIsIDApO1xcbjEwMjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBoeV9ub2RlKSB7XFxuMTAyMzpcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHkgPSBvZl9waHlfY29ubmVjdChuZGV2LCBwcml2LVxcdTAwM2VwaHlfbm9kZSxcXG4xMDI0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZoaXAwNF9hZGp1c3RfbGluayxcXG4xMDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIDAsIHByaXYtXFx1MDAzZXBoeV9tb2RlKTtcXG4xMDI2OlxcdFxcdFxcdGlmICghcHJpdi1cXHUwMDNlcGh5KSB7XFxuMTAyNzpcXHRcXHRcXHRcXHRyZXQgPSAtRVBST0JFX0RFRkVSO1xcbjEwMjg6XFx0XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfdGltZW91dF90YXNrLCBoaXAwNF90eF90aW1lb3V0X3Rhc2spO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmhpcDA0X25ldGRldl9vcHM7XFxuMTAzNTpcXHRcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZoaXAwNF9ldGh0b29sX29wcztcXG4xMDM2OlxcdFxcdG5kZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcXG4xMDM3OlxcdFxcdG5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xcbjEwMzg6XFx0XFx0bmRldi1cXHUwMDNlaXJxID0gaXJxO1xcbjEwMzk6XFx0XFx0bmV0aWZfbmFwaV9hZGQobmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZW5hcGksIGhpcDA0X3J4X3BvbGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMTo0MC4yMzQ0NTc1NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODgwODgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmZ1enphYmxlIERyaXZlciBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGludG8gdGhpcyBkcml2ZXIncyBwcm9iZSBzZXF1ZW5jZSwgYW5kIEkndmUgc3BvdHRlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0J3MgcmVseWluZyBoZWF2aWx5IG9uIERldmljZSBUcmVlIHByb3BlcnRpZXMsIHNwZWNpZmljYWxseSB1c2luZyBgZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlYCBhbmQgYG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzYCB0byBnZXQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHRvIGVtdWxhdGUgb3IgaW5qZWN0IHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciB3b24ndCBldmVuICphdHRlbXB0KiB0byBwcm9iZSB3aXRob3V0IHRoZW0uXG5cbkNvbnNpZGVyaW5nIHRoaXMsIGFuZCBrbm93aW5nIHRoYXQgU3l6a2FsbGVyLCB3aGljaCBJJ20gcmVseWluZyBvbiBmb3IgZnV6emluZywgaXNuJ3QgZ29pbmcgdG8gbWFnaWNhbGx5IGdlbmVyYXRlIGEgRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLi4uIHdlbGwsIGl0J3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBkcml2ZXIgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gTm8gcG9pbnQgaW4gd2FzdGluZyByZXNvdXJjZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIHZpcnR1YWxpemVkIHNldHVwIEknbSB1c2luZyBmb3IgZnV6emluZy4gSSB3aWxsIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhpcyBvbmUuIEl0J3Mgc2ltcGx5IG5vdCBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI3LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjQ0Ljg2MzI2ODg2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv52dw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 22:47:32 +0000 UTC FinishedAt: 2026-07-10 23:11:46 +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+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBmZmRiNDk1N2RlMjhmNDY5MDViNjFjMTY1ZjRkZDhiMjhlZmIyMzI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTE6MTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXG5pbmRleCAxODM3NmJjYzcxOGEyMC4uZjExNzA5ZTUzNmQzNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xuQEAgLTE1LDYgJiM0MzsxNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbmV0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tZmQvc3lzY29uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yZWdtYXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuIFxuICNkZWZpbmUgU0NfUFBFX1JFU0VUX0RSRVFcdFx0MHgwMjZDXG4gXG5AQCAtMjMyLDYgJiM0MzsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7XG4gXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xuIFx0aW50IHR4X2NvYWxlc2NlX3VzZWNzO1xuIFx0c3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7XG4mIzQzO1x0Ym9vbCBjbG9zaW5nO1xuIFxuIFx0dW5zaWduZWQgY2hhciAqcnhfYnVmW1JYX0RFU0NfTlVNXTtcbiBcdGRtYV9hZGRyX3QgcnhfcGh5c1tSWF9ERVNDX05VTV07XG5AQCAtNDk3LDYgJiM0Mzs0OTksMTIgQEAgc3RhdGljIHZvaWQgaGlwMDRfc3RhcnRfdHhfdGltZXIoc3RydWN0IGhpcDA0X3ByaXYgKnByaXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucyA9IHByaXYtXHUwMDNldHhfY29hbGVzY2VfdXNlY3MgKiBOU0VDX1BFUl9VU0VDIC8gMjtcbiBcbiYjNDM7XHQvKiBEbyBub3QgKHJlLSlhcm0gdGhlIFRYIGNvYWxlc2NlIHRpbWVyIG9uY2UgdGVhcmRvd24gaGFzIGJlZ3VuLlxuJiM0MztcdCAqIEJvdGggYXJtaW5nIHNpdGVzIChUWCB4bWl0IGFuZCBOQVBJIHJ4IHBvbGwpIGdvIHRocm91Z2ggaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdC8qIGFsbG93IHRpbWVyIHRvIGZpcmUgYWZ0ZXIgaGFsZiB0aGUgdGltZSBhdCB0aGUgZWFybGllc3QgKi9cbiBcdGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lciwgbnNfdG9fa3RpbWUobnMpLFxuIFx0XHRcdCAgICAgICBucywgSFJUSU1FUl9NT0RFX1JFTCk7XG5AQCAtNjQ5LDEyICYjNDM7NjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHByaXYtXHUwMDNlcmVnX2ludGVuIHw9IFJDVl9JTlQ7XG4gXHRcdHdyaXRlbF9yZWxheGVkKHByaXYtXHUwMDNlcmVnX2ludGVuLCBwcml2LVx1MDAzZWJhc2UgJiM0MzsgUFBFX0lOVEVOKTtcbiBcdH1cbiYjNDM7XHQvKiBBcm0gdGhlIGNvYWxlc2NlIHRpbWVyIEJFRk9SRSBuYXBpX2NvbXBsZXRlX2RvbmUoKTogbmFwaV9kaXNhYmxlKClcbiYjNDM7XHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXG4mIzQzO1x0ICogdGhlIHBvbGwgZnVuY3Rpb24gcmV0dXJucywgc28gYXJtaW5nIGFmdGVyd2FyZHMgY2FuIHNsaXAgcGFzdCB0aGVcbiYjNDM7XHQgKiBzdG9wIHBhdGgmIzM5O3MgaHJ0aW1lcl9jYW5jZWwoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAodHhfcmVtYWluaW5nKVxuJiM0MztcdFx0aGlwMDRfc3RhcnRfdHhfdGltZXIocHJpdik7XG4gXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpO1xuIGRvbmU6XG4tXHQvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChyeCBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiB0eF9yZW1haW5pbmcpXG4tXHRcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xuLVxuIFx0cmV0dXJuIHJ4O1xuIH1cbiBcbkBAIC03MjksNiAmIzQzOzc0MCwxMSBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0cHJpdi1cdTAwM2VyeF9jbnRfcmVtYWluaW5nID0gMDtcbiBcdHByaXYtXHUwMDNldHhfaGVhZCA9IDA7XG4gXHRwcml2LVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdC8qIEEgcGxhaW4gd3JpdGUgaXMgc3VmZmljaWVudCBoZXJlOiBtYWNfb3BlbigpIHJ1bnMgdW5kZXIgUlROTCwgc28gaXRcbiYjNDM7XHQgKiBjYW5ub3QgcmFjZSBtYWNfc3RvcCgpJiMzOTtzIHN0b3JlLXJlbGVhc2UsIGFuZCBuYXBpX2VuYWJsZSgpIGJlbG93IG9yZGVyc1xuJiM0MztcdCAqIHRoaXMgcmVzZXQgYmVmb3JlIGFueSBUWC9OQVBJIHRyYWZmaWMgY2FuIHJlc3VtZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKHByaXYtXHUwMDNlY2xvc2luZywgZmFsc2UpO1xuIFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlhfREVTQ19OVU07IGkmIzQzOyYjNDM7KSB7XG5AQCAtNzU5LDggJiM0Mzs3NzUsMjYgQEAgc3RhdGljIGludCBoaXAwNF9tYWNfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbiBcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXHRpbnQgaTtcbiBcbiYjNDM7XHQvKiBTdG9wIG5ldyB0aW1lciBhcm1zIGJlZm9yZSBkcmFpbmluZzogc2V0IHRoZSBjbG9zaW5nIGZsYWcgKGNoZWNrZWRcbiYjNDM7XHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxuJiM0MztcdCAqIFRYIHRvIGZpbmlzaCwgdGhlbiBjYW5jZWwgdGhlIHRpbWVyLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcbiYjNDM7XHQgKiBmdW5jdGlvbiBpcyBhbHNvIGNhbGxlZCBkaXJlY3RseSBmcm9tIGhpcDA0X3R4X3RpbWVvdXRfdGFzaygpLCBub3RcbiYjNDM7XHQgKiBvbmx5IHZpYSAubmRvX3N0b3Agd2hlcmUgdGhlIGNvcmUgaGFzIGFscmVhZHkgZGVhY3RpdmF0ZWQgVFg7XG4mIzQzO1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcbiYjNDM7XHQgKiB3aGljaCBhcm1zIHRoZSB0aW1lciwgdG8gZmluaXNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxuJiM0MztcdCAqIG5hcGlfZGlzYWJsZSgpIHJldHVybmluZyBtZWFucyB0aGF0IGFybSBoYXMgaGFwcGVuZWQsIHNvIHRoZVxuJiM0MztcdCAqIGhydGltZXJfY2FuY2VsKCkgYmVsb3cgY2Fubm90IG1pc3MgaXQuICBUaGUgc3RvcmUtcmVsZWFzZSBwYWlyc1xuJiM0MztcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzbXBfc3RvcmVfcmVsZWFzZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcsIHRydWUpO1xuJiM0MztcbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbiYjNDM7XHRuZXRpZl90eF9kaXNhYmxlKG5kZXYpO1xuJiM0MztcdGhydGltZXJfY2FuY2VsKFx1MDAyNnByaXYtXHUwMDNldHhfY29hbGVzY2VfdGltZXIpO1xuIFx0aGlwMDRfbWFjX2Rpc2FibGUobmRldik7XG4gXHRoaXAwNF90eF9yZWNsYWltKG5kZXYsIHRydWUpO1xuIFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xuQEAgLTc5MSw4ICYjNDM7ODI1LDIxIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7XG4mIzQzO1xuJiM0MztcdC8qIEJhaWwgaWYgdGhlIGRldmljZSB3YXMgdGFrZW4gZG93biAoZGV2X2Nsb3NlL3VucmVnaXN0ZXIpLiAgVGhlXG4mIzQzO1x0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXG4mIzQzO1x0ICogX19MSU5LX1NUQVRFX1NUQVJULCBzbyB0aGlzIGd1YXJkIGRvZXMgbm90IG1hdGNoIHRoZSByZXN0YXJ0JiMzOTtzXG4mIzQzO1x0ICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJ0bmxfbG9jaygpO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVx1MDAzZW5kZXYpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0aGlwMDRfbWFjX3N0b3AocHJpdi1cdTAwM2VuZGV2KTtcbi1cdGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldik7XG4mIzQzO1x0aWYgKGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldikpXG4mIzQzO1x0XHRuZXRkZXZfZXJyKHByaXYtXHUwMDNlbmRldiwgXCYjMzQ7cmVzdGFydCBhZnRlciB0eCB0aW1lb3V0IGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO291dDpcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuIH1cbiBcbiBzdGF0aWMgaW50IGhpcDA0X2dldF9jb2FsZXNjZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuQEAgLTEwMjYsMTMgJiM0MzsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcbiYjNDM7XHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIElSUSBpcyBkZXZtLW1hbmFnZWQgYW5kIHdvdWxkIG90aGVyd2lzZSBiZSBmcmVlZCBvbmx5IGFmdGVyXG4mIzQzO1x0ICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzXG4mIzQzO1x0ICogcnVuIC5uZG9fc3RvcCB0byBzdG9wIHRoZSBkZXZpY2UgYW5kIG1hc2sgaXRzIGludGVycnVwdCBzb3VyY2UsIGJ1dFxuJiM0MztcdCAqIGJlZm9yZSB0aGUgbWFudWFsIGZyZWVfbmV0ZGV2KCkgYmVsb3csIHNvIHRoYXQgaGlwMDRfbWFjX2ludGVycnVwdCgpXG4mIzQzO1x0ICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzb1xuJiM0MztcdCAqIGRyYWlucyBhbnkgaW4tZmxpZ2h0IGhhbmRsZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2bV9mcmVlX2lycShkLCBuZGV2LVx1MDAzZWlycSwgbmRldik7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzayk7XG4mIzQzO1x0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG4mIzQzO1xuIFx0aWYgKHByaXYtXHUwMDNlcGh5KVxuIFx0XHRwaHlfZGlzY29ubmVjdChwcml2LVx1MDAzZXBoeSk7XG4gXG4gXHRoaXAwNF9mcmVlX3JpbmcobmRldiwgZCk7XG4tXHR1bnJlZ2lzdGVyX25ldGRldihuZGV2KTtcbiBcdG9mX25vZGVfcHV0KHByaXYtXHUwMDNlcGh5X25vZGUpO1xuLVx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzayk7XG4gXHRmcmVlX25ldGRldihuZGV2KTtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZmZkYjQ5NTdkZTI4ZjQ2OTA1YjYxYzE2NWY0ZGQ4YjI4ZWZiMjMyNApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgSnVsIDEwIDIzOjExOjE1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jCmluZGV4IDE4Mzc2YmNjNzE4YTIwLi5mMTE3MDllNTM2ZDM1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9vZl9uZXQuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9tZmQvc3lzY29uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcmVnbWFwLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3J0bmV0bGluay5oJmd0OwogCiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRCQkweDAyNkMKIApAQCAtMjMyLDYgJiM0MzsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7CiAJaW50IHR4X2NvYWxlc2NlX2ZyYW1lczsKIAlpbnQgdHhfY29hbGVzY2VfdXNlY3M7CiAJc3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7CiYjNDM7CWJvb2wgY2xvc2luZzsKIAogCXVuc2lnbmVkIGNoYXIgKnJ4X2J1ZltSWF9ERVNDX05VTV07CiAJZG1hX2FkZHJfdCByeF9waHlzW1JYX0RFU0NfTlVNXTsKQEAgLTQ5Nyw2ICYjNDM7NDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KQogewogCXVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LSZndDt0eF9jb2FsZXNjZV91c2VjcyAqIE5TRUNfUEVSX1VTRUMgLyAyOwogCiYjNDM7CS8qIERvIG5vdCAocmUtKWFybSB0aGUgVFggY29hbGVzY2UgdGltZXIgb25jZSB0ZWFyZG93biBoYXMgYmVndW4uCiYjNDM7CSAqIEJvdGggYXJtaW5nIHNpdGVzIChUWCB4bWl0IGFuZCBOQVBJIHJ4IHBvbGwpIGdvIHRocm91Z2ggaGVyZS4KJiM0MzsJICovCiYjNDM7CWlmIChzbXBfbG9hZF9hY3F1aXJlKCZhbXA7cHJpdi0mZ3Q7Y2xvc2luZykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJLyogYWxsb3cgdGltZXIgdG8gZmlyZSBhZnRlciBoYWxmIHRoZSB0aW1lIGF0IHRoZSBlYXJsaWVzdCAqLwogCWhydGltZXJfc3RhcnRfcmFuZ2VfbnMoJmFtcDtwcml2LSZndDt0eF9jb2FsZXNjZV90aW1lciwgbnNfdG9fa3RpbWUobnMpLAogCQkJICAgICAgIG5zLCBIUlRJTUVSX01PREVfUkVMKTsKQEAgLTY0OSwxMiAmIzQzOzY1NywxNSBAQCBzdGF0aWMgaW50IGhpcDA0X3J4X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCQlwcml2LSZndDtyZWdfaW50ZW4gfD0gUkNWX0lOVDsKIAkJd3JpdGVsX3JlbGF4ZWQocHJpdi0mZ3Q7cmVnX2ludGVuLCBwcml2LSZndDtiYXNlICYjNDM7IFBQRV9JTlRFTik7CiAJfQomIzQzOwkvKiBBcm0gdGhlIGNvYWxlc2NlIHRpbWVyIEJFRk9SRSBuYXBpX2NvbXBsZXRlX2RvbmUoKTogbmFwaV9kaXNhYmxlKCkKJiM0MzsJICogaW4gaGlwMDRfbWFjX3N0b3AoKSByZXR1cm5zIG9uY2UgU0NIRUQgaXMgY2xlYXJlZCBoZXJlLCBub3Qgd2hlbgomIzQzOwkgKiB0aGUgcG9sbCBmdW5jdGlvbiByZXR1cm5zLCBzbyBhcm1pbmcgYWZ0ZXJ3YXJkcyBjYW4gc2xpcCBwYXN0IHRoZQomIzQzOwkgKiBzdG9wIHBhdGgmIzM5O3MgaHJ0aW1lcl9jYW5jZWwoKS4KJiM0MzsJICovCiYjNDM7CWlmICh0eF9yZW1haW5pbmcpCiYjNDM7CQloaXAwNF9zdGFydF90eF90aW1lcihwcml2KTsKIAluYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpOwogZG9uZToKLQkvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi8KLQlpZiAocnggJmx0OyBidWRnZXQgJmFtcDsmYW1wOyB0eF9yZW1haW5pbmcpCi0JCWhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpOwotCiAJcmV0dXJuIHJ4OwogfQogCkBAIC03MjksNiAmIzQzOzc0MCwxMSBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQogCXByaXYtJmd0O3J4X2NudF9yZW1haW5pbmcgPSAwOwogCXByaXYtJmd0O3R4X2hlYWQgPSAwOwogCXByaXYtJmd0O3R4X3RhaWwgPSAwOwomIzQzOwkvKiBBIHBsYWluIHdyaXRlIGlzIHN1ZmZpY2llbnQgaGVyZTogbWFjX29wZW4oKSBydW5zIHVuZGVyIFJUTkwsIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCByYWNlIG1hY19zdG9wKCkmIzM5O3Mgc3RvcmUtcmVsZWFzZSwgYW5kIG5hcGlfZW5hYmxlKCkgYmVsb3cgb3JkZXJzCiYjNDM7CSAqIHRoaXMgcmVzZXQgYmVmb3JlIGFueSBUWC9OQVBJIHRyYWZmaWMgY2FuIHJlc3VtZS4KJiM0MzsJICovCiYjNDM7CVdSSVRFX09OQ0UocHJpdi0mZ3Q7Y2xvc2luZywgZmFsc2UpOwogCWhpcDA0X3Jlc2V0X3BwZShwcml2KTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBSWF9ERVNDX05VTTsgaSYjNDM7JiM0MzspIHsKQEAgLTc1OSw4ICYjNDM7Nzc1LDI2IEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCiAJc3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTsKIAlpbnQgaTsKIAomIzQzOwkvKiBTdG9wIG5ldyB0aW1lciBhcm1zIGJlZm9yZSBkcmFpbmluZzogc2V0IHRoZSBjbG9zaW5nIGZsYWcgKGNoZWNrZWQKJiM0MzsJICogYXQgdGhlIHNpbmdsZSBhcm1pbmcgc2l0ZSksIHdhaXQgZm9yIHRoZSBOQVBJIHBvbGwgYW5kIGFueSBpbi1mbGlnaHQKJiM0MzsJICogVFggdG8gZmluaXNoLCB0aGVuIGNhbmNlbCB0aGUgdGltZXIuCiYjNDM7CSAqCiYjNDM7CSAqIG5ldGlmX3R4X2Rpc2FibGUoKSAobm90IG5ldGlmX3N0b3BfcXVldWUoKSkgaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGlzCiYjNDM7CSAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gaGlwMDRfdHhfdGltZW91dF90YXNrKCksIG5vdAomIzQzOwkgKiBvbmx5IHZpYSAubmRvX3N0b3Agd2hlcmUgdGhlIGNvcmUgaGFzIGFscmVhZHkgZGVhY3RpdmF0ZWQgVFg7CiYjNDM7CSAqIG5ldGlmX3R4X2Rpc2FibGUoKSB3YWl0cyBmb3IgYW4gaW4tZmxpZ2h0IGhpcDA0X21hY19zdGFydF94bWl0KCksCiYjNDM7CSAqIHdoaWNoIGFybXMgdGhlIHRpbWVyLCB0byBmaW5pc2guCiYjNDM7CSAqCiYjNDM7CSAqIEJlY2F1c2UgaGlwMDRfcnhfcG9sbCgpIGFybXMgdGhlIHRpbWVyIGJlZm9yZSBuYXBpX2NvbXBsZXRlX2RvbmUoKSwKJiM0MzsJICogbmFwaV9kaXNhYmxlKCkgcmV0dXJuaW5nIG1lYW5zIHRoYXQgYXJtIGhhcyBoYXBwZW5lZCwgc28gdGhlCiYjNDM7CSAqIGhydGltZXJfY2FuY2VsKCkgYmVsb3cgY2Fubm90IG1pc3MgaXQuICBUaGUgc3RvcmUtcmVsZWFzZSBwYWlycwomIzQzOwkgKiB3aXRoIHRoZSBsb2FkIGluIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKCkuCiYjNDM7CSAqLwomIzQzOwlzbXBfc3RvcmVfcmVsZWFzZSgmYW1wO3ByaXYtJmd0O2Nsb3NpbmcsIHRydWUpOwomIzQzOwogCW5hcGlfZGlzYWJsZSgmYW1wO3ByaXYtJmd0O25hcGkpOwotCW5ldGlmX3N0b3BfcXVldWUobmRldik7CiYjNDM7CW5ldGlmX3R4X2Rpc2FibGUobmRldik7CiYjNDM7CWhydGltZXJfY2FuY2VsKCZhbXA7cHJpdi0mZ3Q7dHhfY29hbGVzY2VfdGltZXIpOwogCWhpcDA0X21hY19kaXNhYmxlKG5kZXYpOwogCWhpcDA0X3R4X3JlY2xhaW0obmRldiwgdHJ1ZSk7CiAJaGlwMDRfcmVzZXRfcHBlKHByaXYpOwpAQCAtNzkxLDggJiM0Mzs4MjUsMjEgQEAgc3RhdGljIHZvaWQgaGlwMDRfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAlzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjsKIAogCXByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7CiYjNDM7CiYjNDM7CS8qIEJhaWwgaWYgdGhlIGRldmljZSB3YXMgdGFrZW4gZG93biAoZGV2X2Nsb3NlL3VucmVnaXN0ZXIpLiAgVGhlCiYjNDM7CSAqIG1hY19zdG9wKCkgYmVsb3cgaXMgY2FsbGVkIGRpcmVjdGx5IGFuZCBkb2VzIG5vdCBjbGVhcgomIzQzOwkgKiBfX0xJTktfU1RBVEVfU1RBUlQsIHNvIHRoaXMgZ3VhcmQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3RhcnQmIzM5O3MKJiM0MzsJICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhwcml2LSZndDtuZGV2KSkKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwogCWhpcDA0X21hY19zdG9wKHByaXYtJmd0O25kZXYpOwotCWhpcDA0X21hY19vcGVuKHByaXYtJmd0O25kZXYpOwomIzQzOwlpZiAoaGlwMDRfbWFjX29wZW4ocHJpdi0mZ3Q7bmRldikpCiYjNDM7CQluZXRkZXZfZXJyKHByaXYtJmd0O25kZXYsICYjMzQ7cmVzdGFydCBhZnRlciB0eCB0aW1lb3V0IGZhaWxlZFxuJiMzNDspOwomIzQzO291dDoKJiM0MzsJcnRubF91bmxvY2soKTsKIH0KIAogc3RhdGljIGludCBoaXAwNF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKQEAgLTEwMjYsMTMgJiM0MzsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQogCXN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7CiAJc3RydWN0IGRldmljZSAqZCA9ICZhbXA7cGRldi0mZ3Q7ZGV2OwogCiYjNDM7CXVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpOwomIzQzOwomIzQzOwkvKiBUaGUgSVJRIGlzIGRldm0tbWFuYWdlZCBhbmQgd291bGQgb3RoZXJ3aXNlIGJlIGZyZWVkIG9ubHkgYWZ0ZXIKJiM0MzsJICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzCiYjNDM7CSAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXQKJiM0MzsJICogYmVmb3JlIHRoZSBtYW51YWwgZnJlZV9uZXRkZXYoKSBiZWxvdywgc28gdGhhdCBoaXAwNF9tYWNfaW50ZXJydXB0KCkKJiM0MzsJICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzbwomIzQzOwkgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLgomIzQzOwkgKi8KJiM0MzsJZGV2bV9mcmVlX2lycShkLCBuZGV2LSZndDtpcnEsIG5kZXYpOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7dHhfdGltZW91dF90YXNrKTsKJiM0MzsJaHJ0aW1lcl9jYW5jZWwoJmFtcDtwcml2LSZndDt0eF9jb2FsZXNjZV90aW1lcik7CiYjNDM7CiAJaWYgKHByaXYtJmd0O3BoeSkKIAkJcGh5X2Rpc2Nvbm5lY3QocHJpdi0mZ3Q7cGh5KTsKIAogCWhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTsKLQl1bnJlZ2lzdGVyX25ldGRldihuZGV2KTsKIAlvZl9ub2RlX3B1dChwcml2LSZndDtwaHlfbm9kZSk7Ci0JY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3R4X3RpbWVvdXRfdGFzayk7CiAJZnJlZV9uZXRkZXYobmRldik7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMjM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzY1NQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDM3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBIaXNpbGljb24gSElQMDQgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY2AgZmlsZSwgd2hpY2ggaXMgdGhlIGV0aGVybmV0IGRyaXZlciBmb3IgdGhlIEhpc2lsaWNvbiBISVAwNC4gRnJvbSB0aGUgZGVzY3JpcHRpb24sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgYWRkcmVzc2luZyBzb21lIHJhY2UgY29uZGl0aW9ucyBhbmQgaXNzdWVzIHJlbGF0ZWQgdG8gdGhlIGRyaXZlciYjMzk7cyB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTt2ZSBhZGRlZCBhIGBwcml2LSZndDtjbG9zaW5nYCBmbGFnIHRvIG1hbmFnZSB0aW1lciByZS1hcm1pbmcsIHR3ZWFrZWQgdGhlIFJYIHBvbGxpbmcgbG9naWMgdG8gaGFuZGxlIHRoZSB0aW1lciBtb3JlIGNhcmVmdWxseSwgYW5kIG1hZGUgY2hhbmdlcyB0byB0aGUgb3Blbi9zdG9wL3RpbWVvdXQgZnVuY3Rpb25zIHRvIHByb3Blcmx5IG1hbmFnZSB0aGUgZHJpdmVyJiMzOTtzIHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc2h1dGRvd24uIFRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGJlZW4gdXBkYXRlZCB0byBkbyBhIHByb3BlciBjbGVhbnVwLCBpbmNsdWRpbmcgdW5yZWdpc3RlcmluZyB0aGUgbmV0IGRldmljZSwgZnJlZWluZyBpbnRlcnJ1cHRzLCBhbmQgY2FuY2VsaW5nIGFueSBwZW5kaW5nIHdvcmsgb3IgdGltZXJzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIEkgZXZlbiAqc2VlKiB0aGlzIGluIGEgdHlwaWNhbCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8mIzM0OyBHaXZlbiB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIsIGxpa2UgYSBISVAwNCwgaXQmIzM5O3MgaGlnaGx5IHVubGlrZWx5IHRoYXQgSSYjMzk7bGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHRoZXJlJiMzOTtzIGEgc3BlY2lmaWMgZW11bGF0b3IgZm9yIHRoZSBISVAwNCBoYXJkd2FyZSwgb3IsIGxlc3MgbGlrZWx5LCBzb21lIGNsZXZlciBzb2Z0d2FyZSBpbnN0YW50aWF0aW9uIG1lY2hhbmlzbS4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHRoZXNlIGtpbmRzIG9mIGRyaXZlcnMgYXJlIHRpZWQgdmVyeSBjbG9zZWx5IHRvIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLgoKVGhlIG5leHQgdGhpbmcgSSBuZWVkIHRvIGRvIGlzIGNvbmZpcm0gaWYgdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlci4gQWgsIHllcywgdGhlIGBoaXAwNF9yZW1vdmVgIGZ1bmN0aW9uIHRha2VzIGEgYHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXZgIHdoaWNoIGNvbmZpcm1zIGl0LiBOb3csIHRoZSBrZXkgcXVlc3Rpb24gaXMsIGNhbiBJIHByb2JlIGl0IGluIFFFTVU/IEkgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZywgcHJvYmFibHkgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnYCBvciBzb21ldGhpbmcgc2ltaWxhciwgdG8gc2VlIHdoYXQgZGVwZW5kZW5jaWVzIHRoaXMgZHJpdmVyIGhhcy4gT3IsIG1heWJlIEkgY291bGQgdXNlIGBncmVwcGVyYCB0byBmaW5kIG91dCB3aGVyZSBgaGlwMDRfZXRoYCBpcyBkZWZpbmVkLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBkcml2ZXIgaXMgYnJvdWdodCB1cCBhbmQgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBpdCBjb3VsZCBiZSBlbmFibGVkIGZvciB0ZXN0aW5nIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hpcDA0X2V0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGU9Nj1vYmotJChDT05GSUdfSElYNUhEMl9HTUFDKSAmIzQzOz0gaGl4NWhkMl9nbWFjLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9NYWtlZmlsZTo3Om9iai0kKENPTkZJR19ISVAwNF9FVEgpICYjNDM7PSBoaXAwNF9ldGgub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL01ha2VmaWxlLTgtb2JqLSQoQ09ORklHX0hOU19NRElPKSAmIzQzOz0gaG5zX21kaW8ub1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz04Nzc9c3RhdGljIHZvaWQgaGlwMDRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtODgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjg4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpcDA0X2V0aHRvb2xfb3BzID0ge1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTg4NS1cdC5zdXBwb3J0ZWRfY29hbGVzY2VfcGFyYW1zID0gRVRIVE9PTF9DT0FMRVNDRV9UWF9VU0VDUyB8XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jPTk0MD1zdGF0aWMgaW50IGhpcDA0X21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy0xMDM0LVx0bmRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2aGlwMDRfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYzoxMDM1Olx0bmRldi1cdTAwM2VldGh0b29sX29wcyA9IFx1MDAyNmhpcDA0X2V0aHRvb2xfb3BzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jLTEwMzYtXHRuZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTUxCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEZWJ1Z2dpbmcgYW4gRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHRoZSBzeXN0ZW0mIzM5O3MgdGVsbGluZyBtZSB0aGUgRXRoZXJuZXQgZHJpdmVyIGluIHVzZSBpcyBgQ09ORklHX0hJUDA0X0VUSGAuIFRoYXQgbmFtZSByaW5ncyBhIGJlbGwsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSB2ZXJpZnkgaXRzIGV4YWN0IGRlZmluaXRpb24gYW5kIGFueSBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IGluc3RpbmN0LCBiYXNlZCBvbiB0aGUgbmFtaW5nIGNvbnZlbnRpb24sIGlzIHRvIGp1bXAgc3RyYWlnaHQgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQmIzM5O3MgYW4gRXRoZXJuZXQgZHJpdmVyLCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWdgIHNob3VsZCBiZSB0aGUgbW9zdCByZWxldmFudCBzcG90LiBJJiMzOTttIGdvaW5nIHRvIHNjYW4gdGhhdCBmaWxlIGZvciBgSElQMDRfRVRIYCB0byBjb25maXJtIGl0cyBvcmlnaW4sIHNlZSB3aGF0IG90aGVyIG9wdGlvbnMgaXQgbWlnaHQgaW5mbHVlbmNlLCBhbmQganVzdCBnZW5lcmFsbHkgcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUgZGV0YWlscy4gVGhpcyBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIG1lIHRvIGRlbHZlIGZ1cnRoZXIgaW50byB0aGUgYXNzb2NpYXRlZCBkcml2ZXIgY29kZSBpZiB0aGlzIHR1cm5zIG91dCB0byBiZSB0aGUgc291cmNlIG9mIG15IGN1cnJlbnQgdHJvdWJsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSElQMDRfRVRIJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTI4PWNvbmZpZyBISVNJX0ZFTUFDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctMzktXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo0MDpjb25maWcgSElQMDRfRVRIXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy00MS1cdHRyaXN0YXRlIFwmIzM0O0hJU0lMSUNPTiBQMDQgRXRoZXJuZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqRGVjb25zdHJ1Y3RpbmcgYEhJUDA0X0VUSGAgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBISVAwNF9FVEhgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyBjb21wb25lbnQgc2l0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcG9uZW50cyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj8KCk15IG1haW4gZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBjaGFuZ2VzIHRvIGBISVAwNF9FVEhgIG1pZ2h0IHJpcHBsZSB0aHJvdWdob3V0IHRoZSBlbnRpcmUgc3lzdGVtLiBJJiMzOTttIGxvb2tpbmcgZm9yIGEgY2xlYXIgbWFwIG9mIGl0cyBpbW1lZGlhdGUgZGVwZW5kZW50cywgYW5kIGFsc28gcG90ZW50aWFsbHkgaXRzIGluZGlyZWN0IGRlcGVuZGVudHMsIGlmIHRoYXQgbGV2ZWwgb2YgZGV0YWlsIGlzIGltbWVkaWF0ZWx5IGFjY2Vzc2libGUuIFRoZSBxdWFsaXR5IG9mIHRoaXMgaW5pdGlhbCBpbnZlc3RpZ2F0aW9uIHdpbGwgZHJpdmUgbXkgYWJpbGl0eSB0byBxdWlja2x5IHRyaWFnZSBhbnkgaXNzdWVzLiBJIHdpbGwgdHJ5IHRvIGNvbnNpZGVyIHRoZSBkYXRhIHN0cnVjdHVyZXMsIEFQSXMsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgoKSSYjMzk7bGwgYmUgbWluZGZ1bCBvZiB0aGUgZGlmZmVyZW50IHR5cGVzIG9mIGRlcGVuZGVuY2llczogaGFyZCBkZXBlbmRlbmNpZXMgdGhhdCBtdXN0IGJlIHByZXNlbnQgZm9yIGBISVAwNF9FVEhgIHRvIGZ1bmN0aW9uLCB2ZXJzdXMgc29mdGVyIGRlcGVuZGVuY2llcyBvciAmIzM0O3N1Z2dlc3RlZCYjMzQ7IGNvbXBvbmVudHMuIEkgbmVlZCB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIHdoYXQmIzM5O3MgYWJzb2x1dGVseSBjcml0aWNhbCBhbmQgd2hhdCYjMzk7cyBtZXJlbHkgcmVjb21tZW5kZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZXMuIE15IHByb2Nlc3Mgd2lsbCBkZXBlbmQgb24gdGhlIGRhdGEgYWNjZXNzLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZ2V0IGRhdGEgcXVpY2tseSwgYW5kIHRoZW4gdG8gY29uc2lkZXIgaG93IG11Y2ggZGV0YWlsIGlzIHJlcXVpcmVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDQwOlx0Y29uZmlnIEhJUDA0X0VUSFxuICA0MTpcdFx0dHJpc3RhdGUgXCYjMzQ7SElTSUxJQ09OIFAwNCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDQyOlx0XHRkZXBlbmRzIG9uIEhBU19JT01FTVx0IyBGb3IgTUZEX1NZU0NPTlxuICA0MzpcdFx0c2VsZWN0IE1BUlZFTExfUEhZXG4gIDQ0Olx0XHRzZWxlY3QgTUZEX1NZU0NPTlxuICA0NTpcdFx0c2VsZWN0IEhOU19NRElPXG4gIDQ2Olx0XHRoZWxwXG4gIDQ3Olx0XHQgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIGEgaGFyZHdhcmUgd2l0aCBoaXNpbGljb24gcDA0IFNvQyBhbmRcbiAgNDg6XHRcdCAgd2FudCB0byB1c2UgdGhlIGludGVybmFsIGV0aGVybmV0IHRoZW4geW91IHNob3VsZCBhbnN3ZXIgWSB0byB0aGlzLlxuICA0OTpcdFxuICA1MDpcdGNvbmZpZyBISTEzWDFfR01BQ1xuICA1MTpcdFx0Ym9vbCBcJiMzNDtIaXNpbGljb24gSEkxM1gxIE5ldHdvcmsgRGV2aWNlIFN1cHBvcnRcJiMzNDtcbiAgNTI6XHRcdGRlcGVuZHMgb24gSElQMDRfRVRIXG4gIDUzOlx0XHRoZWxwXG4gIDU0Olx0XHQgIElmIHlvdSB3aXNoIHRvIGNvbXBpbGUgYSBrZXJuZWwgZm9yIGEgaGFyZHdhcmUgd2l0aCBoaXNpbGljb24gaGkxM3gxX2dhbWNcbiAgNTU6XHRcdCAgdGhlbiB5b3Ugc2hvdWxkIGFuc3dlciBZIHRvIHRoaXMuIFRoaXMgbWFrZXMgdGhpcyBkcml2ZXIgc3VpdGFibGUgZm9yIHVzZVxuICA1NjpcdFx0ICBvbiBjZXJ0YWluIGJvYXJkcyBzdWNoIGFzIHRoZSBISTEzWDEuXG4gIDU3Olx0XG4gIDU4Olx0XHQgIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTi5cbiAgNTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTU5CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMTg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGhpcDA0X21hY2AgRHJpdmVyIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBoaXAwNF9tYWNgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gLCB3aGljaCBzY3JlYW1zICYjMzQ7cGxhdGZvcm0tc3BlY2lmaWMmIzM0OyB0byBtZS4gVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBIaXNpbGljb24gUDA0IFNvQywgYW5kIHRoYXQgbWVhbnMgaXQmIzM5O3MgcHJldHR5IG11Y2ggZ3VhcmFudGVlZCB0byBuZWVkICp2ZXJ5KiBzcGVjaWZpYyBlbXVsYXRpb24gdG8gd29yay4gTm8gZ2VuZXJpYyBRRU1VIGVudmlyb25tZW50IGlzIGdvaW5nIHRvIGN1dCBpdCBoZXJlIHVubGVzcyBzb21lb25lIHdlbnQgdG8gdGhlIGVmZm9ydCBvZiBjcmVhdGluZyBhIHNwZWNpZmljIG1hY2hpbmUgZGVmaW5pdGlvbiBmb3IgdGhhdCBleGFjdCBTb0MuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayBpZiBzdWNoIGFuIGVtdWxhdGlvbiBleGlzdHMsIGJ1dCBJJiMzOTttIG5vdCBvcHRpbWlzdGljLiBRRU1VIGdlbmVyYWxseSBkb2VzbiYjMzk7dCBnbyB0byB0aGF0IGxldmVsIG9mIGRldGFpbCwgZXNwZWNpYWxseSBmb3Igd2hhdCYjMzk7cyBwcm9iYWJseSBhIHJlbGF0aXZlbHkgbmljaGUgZXRoZXJuZXQgY29udHJvbGxlci4gQ2hhbmNlcyBhcmUgaXQgaXMgbm90IGEgd2lkZWx5IHVzZWQgYm9hcmQuCgpUaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBUaGUgd2F5IHN5emthbGxlciB3b3JrcyBpcyB0aGF0IHVubGVzcyB0aGlzIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGl04oCZcyBub3QgZnV6emFibGUuIEV2ZW4gKmlmKiB3ZSBjb3VsZCBpbmplY3QgaXQsIGlmIHRoZSBoYXJkd2FyZSBpc24mIzM5O3QgZW11bGF0ZWQgcHJvcGVybHksIHRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gaW1tZWRpYXRlbHkgZmFpbCBkdXJpbmcgdGhlIHByb2JlIHNlcXVlbmNlLiBUaGluZ3MgbGlrZSBJL08gbWVtb3J5IG1hcHBpbmcsIG9yIHJlZ2lzdGVyIGNoZWNrcyBhcmUgZ29pbmcgdG8gYmxvdyB1cC4KCkkmIzM5O2QgYmV0dGVyIGp1c3QgY2hlY2sgdGhlIHByb2JlIGZ1bmN0aW9uIChgaGlwMDRfbWFjX3Byb2JlYCkgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQmIzM5O3MgdHJ5aW5nIHRvIGRvIGR1cmluZyB0aGUgcHJvYmluZyBwaGFzZSwgYW5kIHdoYXQgaXQmIzM5O3MgZXhwZWN0aW5nIHRvIGZpbmQuIFRoYXQgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIGlkZWEgb2YgaG93IGRpZmZpY3VsdCBpdCYjMzk7cyBnb2luZyB0byBiZSB0byBldmVuIGdldCB0aGlzIGRyaXZlciB0byAqbG9hZCosIGxldCBhbG9uZSBmdXp6IGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAyMzoxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDk0MDpcdHN0YXRpYyBpbnQgaGlwMDRfbWFjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gOTQxOlx0e1xuIDk0MjpcdFx0c3RydWN0IGRldmljZSAqZCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuIDk0MzpcdFx0c3RydWN0IGRldmljZV9ub2RlICpub2RlID0gZC1cdTAwM2VvZl9ub2RlO1xuIDk0NDpcdFx0c3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmc7XG4gOTQ1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcbiA5NDY6XHRcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2O1xuIDk0NzpcdFx0aW50IGlycTtcbiA5NDg6XHRcdGludCByZXQ7XG4gOTQ5Olx0XG4gOTUwOlx0XHRuZGV2ID0gYWxsb2NfZXRoZXJkZXYoc2l6ZW9mKHN0cnVjdCBoaXAwNF9wcml2KSk7XG4gOTUxOlx0XHRpZiAoIW5kZXYpXG4gOTUyOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDk1MzpcdFxuIDk1NDpcdFx0cHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xuIDk1NTpcdFx0cHJpdi1cdTAwM2VkZXYgPSBkO1xuIDk1NjpcdFx0cHJpdi1cdTAwM2VuZGV2ID0gbmRldjtcbiA5NTc6XHRcdHBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIG5kZXYpO1xuIDk1ODpcdFx0U0VUX05FVERFVl9ERVYobmRldiwgXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIDk1OTpcdFxuIDk2MDpcdFx0cHJpdi1cdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xuIDk2MTpcdFx0aWYgKElTX0VSUihwcml2LVx1MDAzZWJhc2UpKSB7XG4gOTYyOlx0XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2ViYXNlKTtcbiA5NjM6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4gOTY0Olx0XHR9XG4gOTY1Olx0XG4gOTY2Olx0I2lmIGRlZmluZWQoQ09ORklHX0hJMTNYMV9HTUFDKVxuIDk2NzpcdFx0cHJpdi1cdTAwM2VzeXNjdHJsX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XG4gOTY4Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlc3lzY3RybF9iYXNlKSkge1xuIDk2OTpcdFx0XHRyZXQgPSBQVFJfRVJSKHByaXYtXHUwMDNlc3lzY3RybF9iYXNlKTtcbiA5NzA6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4gOTcxOlx0XHR9XG4gOTcyOlx0I2VuZGlmXG4gOTczOlx0XG4gOTc0Olx0XHRyZXQgPSBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJncyhub2RlLCBcJiMzNDtwb3J0LWhhbmRsZVwmIzM0OywgMywgMCwgXHUwMDI2YXJnKTtcbiA5NzU6XHRcdGlmIChyZXQgXHUwMDNjIDApIHtcbiA5NzY6XHRcdFx0ZGV2X3dhcm4oZCwgXCYjMzQ7bm8gcG9ydC1oYW5kbGVcXG5cJiMzNDspO1xuIDk3NzpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbiA5Nzg6XHRcdH1cbiA5Nzk6XHRcbiA5ODA6XHRcdHByaXYtXHUwMDNlcG9ydCA9IGFyZy5hcmdzWzBdO1xuIDk4MTpcdFx0cHJpdi1cdTAwM2VjaGFuID0gYXJnLmFyZ3NbMV0gKiBSWF9ERVNDX05VTTtcbiA5ODI6XHRcdHByaXYtXHUwMDNlZ3JvdXAgPSBhcmcuYXJnc1syXTtcbiA5ODM6XHRcbiA5ODQ6XHRcdC8qIEJRTCB3aWxsIHRyeSB0byBrZWVwIHRoZSBUWCBxdWV1ZSBhcyBzaG9ydCBhcyBwb3NzaWJsZSwgYnV0IGl0IGNhbiYjMzk7dFxuIDk4NTpcdFx0ICogYmUgZmFzdGVyIHRoYW4gdHhfY29hbGVzY2VfdXNlY3MsIHNvIHdlIG5lZWQgYSBmYXN0IHRpbWVvdXQgaGVyZSxcbiA5ODY6XHRcdCAqIGJ1dCBhbHNvIGxvbmcgZW5vdWdoIHRvIGdhdGhlciB1cCBlbm91Z2ggZnJhbWVzIHRvIGVuc3VyZSB3ZSBkb24mIzM5O3RcbiA5ODc6XHRcdCAqIGdldCBtb3JlIGludGVycnVwdHMgdGhhbiBuZWNlc3NhcnkuXG4gOTg4Olx0XHQgKiAyMDB1cyBpcyBlbm91Z2ggZm9yIDE2IGZyYW1lcyBvZiAxNTAwIGJ5dGVzIGF0IGdpZ2FiaXQgZXRoZXJuZXQgcmF0ZVxuIDk4OTpcdFx0ICovXG4gOTkwOlx0XHRwcml2LVx1MDAzZXR4X2NvYWxlc2NlX2ZyYW1lcyA9IFRYX0RFU0NfTlVNICogMyAvIDQ7XG4gOTkxOlx0XHRwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3VzZWNzID0gMjAwO1xuIDk5MjpcdFx0aHJ0aW1lcl9zZXR1cChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCB0eF9kb25lLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuIDk5MzpcdFxuIDk5NDpcdFx0cHJpdi1cdTAwM2VtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJnLm5wKTtcbiA5OTU6XHRcdG9mX25vZGVfcHV0KGFyZy5ucCk7XG4gOTk2Olx0XHRpZiAoSVNfRVJSKHByaXYtXHUwMDNlbWFwKSkge1xuIDk5NzpcdFx0XHRkZXZfd2FybihkLCBcJiMzNDtubyBzeXNjb24gaGlzaWxpY29uLGhpcDA0LXBwZVxcblwmIzM0Oyk7XG4gOTk4Olx0XHRcdHJldCA9IFBUUl9FUlIocHJpdi1cdTAwM2VtYXApO1xuIDk5OTpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbjEwMDA6XHRcdH1cbjEwMDE6XHRcbjEwMDI6XHRcdHJldCA9IG9mX2dldF9waHlfbW9kZShub2RlLCBcdTAwMjZwcml2LVx1MDAzZXBoeV9tb2RlKTtcbjEwMDM6XHRcdGlmIChyZXQpIHtcbjEwMDQ6XHRcdFx0ZGV2X3dhcm4oZCwgXCYjMzQ7bm90IGZpbmQgcGh5LW1vZGVcXG5cJiMzNDspO1xuMTAwNTpcdFx0XHRnb3RvIGluaXRfZmFpbDtcbjEwMDY6XHRcdH1cbjEwMDc6XHRcbjEwMDg6XHRcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XG4xMDA5Olx0XHRpZiAoaXJxIFx1MDAzYyAwKSB7XG4xMDEwOlx0XHRcdHJldCA9IGlycTtcbjEwMTE6XHRcdFx0Z290byBpbml0X2ZhaWw7XG4xMDEyOlx0XHR9XG4xMDEzOlx0XG4xMDE0Olx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKGQsIGlycSwgaGlwMDRfbWFjX2ludGVycnVwdCxcbjEwMTU6XHRcdFx0XHQgICAgICAgMCwgcGRldi1cdTAwM2VuYW1lLCBuZGV2KTtcbjEwMTY6XHRcdGlmIChyZXQpIHtcbjEwMTc6XHRcdFx0bmV0ZGV2X2VycihuZGV2LCBcJiMzNDtkZXZtX3JlcXVlc3RfaXJxIGZhaWxlZFxcblwmIzM0Oyk7XG4xMDE4Olx0XHRcdGdvdG8gaW5pdF9mYWlsO1xuMTAxOTpcdFx0fVxuMTAyMDpcdFxuMTAyMTpcdFx0cHJpdi1cdTAwM2VwaHlfbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobm9kZSwgXCYjMzQ7cGh5LWhhbmRsZVwmIzM0OywgMCk7XG4xMDIyOlx0XHRpZiAocHJpdi1cdTAwM2VwaHlfbm9kZSkge1xuMTAyMzpcdFx0XHRwcml2LVx1MDAzZXBoeSA9IG9mX3BoeV9jb25uZWN0KG5kZXYsIHByaXYtXHUwMDNlcGh5X25vZGUsXG4xMDI0Olx0XHRcdFx0XHRcdCAgIFx1MDAyNmhpcDA0X2FkanVzdF9saW5rLFxuMTAyNTpcdFx0XHRcdFx0XHQgICAwLCBwcml2LVx1MDAzZXBoeV9tb2RlKTtcbjEwMjY6XHRcdFx0aWYgKCFwcml2LVx1MDAzZXBoeSkge1xuMTAyNzpcdFx0XHRcdHJldCA9IC1FUFJPQkVfREVGRVI7XG4xMDI4Olx0XHRcdFx0Z290byBpbml0X2ZhaWw7XG4xMDI5Olx0XHRcdH1cbjEwMzA6XHRcdH1cbjEwMzE6XHRcbjEwMzI6XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXR4X3RpbWVvdXRfdGFzaywgaGlwMDRfdHhfdGltZW91dF90YXNrKTtcbjEwMzM6XHRcbjEwMzQ6XHRcdG5kZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmhpcDA0X25ldGRldl9vcHM7XG4xMDM1Olx0XHRuZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2aGlwMDRfZXRodG9vbF9vcHM7XG4xMDM2Olx0XHRuZGV2LVx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcbjEwMzc6XHRcdG5kZXYtXHUwMDNlcHJpdl9mbGFncyB8PSBJRkZfVU5JQ0FTVF9GTFQ7XG4xMDM4Olx0XHRuZGV2LVx1MDAzZWlycSA9IGlycTtcbjEwMzk6XHRcdG5ldGlmX25hcGlfYWRkKG5kZXYsIFx1MDAyNnByaXYtXHUwMDNlbmFwaSwgaGlwMDRfcnhfcG9sbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyMjcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlVuZnV6emFibGUgRHJpdmVyIElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGxvb2tlZCBpbnRvIHRoaXMgZHJpdmVyJiMzOTtzIHByb2JlIHNlcXVlbmNlLCBhbmQgSSYjMzk7dmUgc3BvdHRlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0JiMzOTtzIHJlbHlpbmcgaGVhdmlseSBvbiBEZXZpY2UgVHJlZSBwcm9wZXJ0aWVzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZWAgYW5kIGBvZl9wYXJzZV9waGFuZGxlX3dpdGhfZml4ZWRfYXJnc2AgdG8gZ2V0IGl0cyBjb25maWd1cmF0aW9uLiBNeSBjb25jZXJuIGhlcmUgaXMgdGhhdCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZW11bGF0ZSBvciBpbmplY3QgdGhlc2UgZGV2aWNlIHRyZWUgbm9kZXMgaW4gYSB2aXJ0dWFsaXplZCBzZXR0aW5nLiBUaGUgZHJpdmVyIHdvbiYjMzk7dCBldmVuICphdHRlbXB0KiB0byBwcm9iZSB3aXRob3V0IHRoZW0uCgpDb25zaWRlcmluZyB0aGlzLCBhbmQga25vd2luZyB0aGF0IFN5emthbGxlciwgd2hpY2ggSSYjMzk7bSByZWx5aW5nIG9uIGZvciBmdXp6aW5nLCBpc24mIzM5O3QgZ29pbmcgdG8gbWFnaWNhbGx5IGdlbmVyYXRlIGEgRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLi4uIHdlbGwsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0byBtZSB0aGF0IHRoaXMgZHJpdmVyIGlzIGVzc2VudGlhbGx5IHVucmVhY2hhYmxlIGluIGFuIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBHb29nbGUgQ29tcHV0ZSBFbmdpbmUuIE5vIHBvaW50IGluIHdhc3RpbmcgcmVzb3VyY2VzLgoKVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0JiMzOTtzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIHZpcnR1YWxpemVkIHNldHVwIEkmIzM5O20gdXNpbmcgZm9yIGZ1enppbmcuIEkgd2lsbCBjb25maWRlbnRseSByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgZm9yIHRoaXMgb25lLiBJdCYjMzk7cyBzaW1wbHkgbm90IGFjY2Vzc2libGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDIzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEhpc2lsaWNvbiBISVAwNCBldGhlcm5ldCBkcml2ZXIgKGhpcDA0X2V0aC5jKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlbGllcyBvbiBzcGVjaWZpYyBkZXZpY2UgdHJlZSBub2RlcyBhbmQgSS9PIG1lbW9yeSBtYXBwaW5nIHRvIHByb2JlIHN1Y2Nlc3NmdWxseS4gSXQgY2Fubm90IGJlIGluc3RhbnRpYXRlZCBvciByZWFjaGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE2Ljg5MDU3NTY0OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3OTcyNzI2MDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSGlzaWxpY29uIEhJUDA0IGV0aGVybmV0IGRyaXZlciAoaGlwMDRfZXRoLmMpLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVsaWVzIG9uIHNwZWNpZmljIGRldmljZSB0cmVlIG5vZGVzIGFuZCBJL08gbWVtb3J5IG1hcHBpbmcgdG8gcHJvYmUgc3VjY2Vzc2Z1bGx5LiBJdCBjYW5ub3QgYmUgaW5zdGFudGlhdGVkIG9yIHJlYWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMToxNi44OTA2MDQxNjlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NjQzNjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGZmZGI0OTU3ZGUyOGY0NjkwNWI2MWMxNjVmNGRkOGIyOGVmYjIzMjRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMjM6MTE6MTUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXFxuaW5kZXggMTgzNzZiY2M3MThhMjAuLmYxMTcwOWU1MzZkMzVkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xcbkBAIC0xNSw2ICsxNSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3JlZ21hcC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRXFx0XFx0MHgwMjZDXFxuIFxcbkBAIC0yMzIsNiArMjMzLDcgQEAgc3RydWN0IGhpcDA0X3ByaXYge1xcbiBcXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xcbiBcXHRpbnQgdHhfY29hbGVzY2VfdXNlY3M7XFxuIFxcdHN0cnVjdCBocnRpbWVyIHR4X2NvYWxlc2NlX3RpbWVyO1xcbitcXHRib29sIGNsb3Npbmc7XFxuIFxcbiBcXHR1bnNpZ25lZCBjaGFyICpyeF9idWZbUlhfREVTQ19OVU1dO1xcbiBcXHRkbWFfYWRkcl90IHJ4X3BoeXNbUlhfREVTQ19OVU1dO1xcbkBAIC00OTcsNiArNDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdHVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV91c2VjcyAqIE5TRUNfUEVSX1VTRUMgLyAyO1xcbiBcXG4rXFx0LyogRG8gbm90IChyZS0pYXJtIHRoZSBUWCBjb2FsZXNjZSB0aW1lciBvbmNlIHRlYXJkb3duIGhhcyBiZWd1bi5cXG4rXFx0ICogQm90aCBhcm1pbmcgc2l0ZXMgKFRYIHhtaXQgYW5kIE5BUEkgcnggcG9sbCkgZ28gdGhyb3VnaCBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNtcF9sb2FkX2FjcXVpcmUoXFx1MDAyNnByaXYtXFx1MDAzZWNsb3NpbmcpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbiBcXHQvKiBhbGxvdyB0aW1lciB0byBmaXJlIGFmdGVyIGhhbGYgdGhlIHRpbWUgYXQgdGhlIGVhcmxpZXN0ICovXFxuIFxcdGhydGltZXJfc3RhcnRfcmFuZ2VfbnMoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCBuc190b19rdGltZShucyksXFxuIFxcdFxcdFxcdCAgICAgICBucywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuQEAgLTY0OSwxMiArNjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXFxuIFxcdFxcdHByaXYtXFx1MDAzZXJlZ19pbnRlbiB8PSBSQ1ZfSU5UO1xcbiBcXHRcXHR3cml0ZWxfcmVsYXhlZChwcml2LVxcdTAwM2VyZWdfaW50ZW4sIHByaXYtXFx1MDAzZWJhc2UgKyBQUEVfSU5URU4pO1xcbiBcXHR9XFxuK1xcdC8qIEFybSB0aGUgY29hbGVzY2UgdGltZXIgQkVGT1JFIG5hcGlfY29tcGxldGVfZG9uZSgpOiBuYXBpX2Rpc2FibGUoKVxcbitcXHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXFxuK1xcdCAqIHRoZSBwb2xsIGZ1bmN0aW9uIHJldHVybnMsIHNvIGFybWluZyBhZnRlcndhcmRzIGNhbiBzbGlwIHBhc3QgdGhlXFxuK1xcdCAqIHN0b3AgcGF0aCdzIGhydGltZXJfY2FuY2VsKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAodHhfcmVtYWluaW5nKVxcbitcXHRcXHRoaXAwNF9zdGFydF90eF90aW1lcihwcml2KTtcXG4gXFx0bmFwaV9jb21wbGV0ZV9kb25lKG5hcGksIHJ4KTtcXG4gZG9uZTpcXG4tXFx0Lyogc3RhcnQgYSBuZXcgdGltZXIgaWYgbmVjZXNzYXJ5ICovXFxuLVxcdGlmIChyeCBcXHUwMDNjIGJ1ZGdldCBcXHUwMDI2XFx1MDAyNiB0eF9yZW1haW5pbmcpXFxuLVxcdFxcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xcbi1cXG4gXFx0cmV0dXJuIHJ4O1xcbiB9XFxuIFxcbkBAIC03MjksNiArNzQwLDExIEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXFxuIFxcdHByaXYtXFx1MDAzZXJ4X2NudF9yZW1haW5pbmcgPSAwO1xcbiBcXHRwcml2LVxcdTAwM2V0eF9oZWFkID0gMDtcXG4gXFx0cHJpdi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdC8qIEEgcGxhaW4gd3JpdGUgaXMgc3VmZmljaWVudCBoZXJlOiBtYWNfb3BlbigpIHJ1bnMgdW5kZXIgUlROTCwgc28gaXRcXG4rXFx0ICogY2Fubm90IHJhY2UgbWFjX3N0b3AoKSdzIHN0b3JlLXJlbGVhc2UsIGFuZCBuYXBpX2VuYWJsZSgpIGJlbG93IG9yZGVyc1xcbitcXHQgKiB0aGlzIHJlc2V0IGJlZm9yZSBhbnkgVFgvTkFQSSB0cmFmZmljIGNhbiByZXN1bWUuXFxuK1xcdCAqL1xcbitcXHRXUklURV9PTkNFKHByaXYtXFx1MDAzZWNsb3NpbmcsIGZhbHNlKTtcXG4gXFx0aGlwMDRfcmVzZXRfcHBlKHByaXYpO1xcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJYX0RFU0NfTlVNOyBpKyspIHtcXG5AQCAtNzU5LDggKzc3NSwyNiBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxcbiBcXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdiA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuK1xcdC8qIFN0b3AgbmV3IHRpbWVyIGFybXMgYmVmb3JlIGRyYWluaW5nOiBzZXQgdGhlIGNsb3NpbmcgZmxhZyAoY2hlY2tlZFxcbitcXHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxcbitcXHQgKiBUWCB0byBmaW5pc2gsIHRoZW4gY2FuY2VsIHRoZSB0aW1lci5cXG4rXFx0ICpcXG4rXFx0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcXG4rXFx0ICogZnVuY3Rpb24gaXMgYWxzbyBjYWxsZWQgZGlyZWN0bHkgZnJvbSBoaXAwNF90eF90aW1lb3V0X3Rhc2soKSwgbm90XFxuK1xcdCAqIG9ubHkgdmlhIC5uZG9fc3RvcCB3aGVyZSB0aGUgY29yZSBoYXMgYWxyZWFkeSBkZWFjdGl2YXRlZCBUWDtcXG4rXFx0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcXG4rXFx0ICogd2hpY2ggYXJtcyB0aGUgdGltZXIsIHRvIGZpbmlzaC5cXG4rXFx0ICpcXG4rXFx0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxcbitcXHQgKiBuYXBpX2Rpc2FibGUoKSByZXR1cm5pbmcgbWVhbnMgdGhhdCBhcm0gaGFzIGhhcHBlbmVkLCBzbyB0aGVcXG4rXFx0ICogaHJ0aW1lcl9jYW5jZWwoKSBiZWxvdyBjYW5ub3QgbWlzcyBpdC4gIFRoZSBzdG9yZS1yZWxlYXNlIHBhaXJzXFxuK1xcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cXG4rXFx0ICovXFxuK1xcdHNtcF9zdG9yZV9yZWxlYXNlKFxcdTAwMjZwcml2LVxcdTAwM2VjbG9zaW5nLCB0cnVlKTtcXG4rXFxuIFxcdG5hcGlfZGlzYWJsZShcXHUwMDI2cHJpdi1cXHUwMDNlbmFwaSk7XFxuLVxcdG5ldGlmX3N0b3BfcXVldWUobmRldik7XFxuK1xcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XFxuK1xcdGhydGltZXJfY2FuY2VsKFxcdTAwMjZwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XFxuIFxcdGhpcDA0X21hY19kaXNhYmxlKG5kZXYpO1xcbiBcXHRoaXAwNF90eF9yZWNsYWltKG5kZXYsIHRydWUpO1xcbiBcXHRoaXAwNF9yZXNldF9wcGUocHJpdik7XFxuQEAgLTc5MSw4ICs4MjUsMjEgQEAgc3RhdGljIHZvaWQgaGlwMDRfdHhfdGltZW91dF90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXY7XFxuIFxcbiBcXHRwcml2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBoaXAwNF9wcml2LCB0eF90aW1lb3V0X3Rhc2spO1xcbitcXG4rXFx0LyogQmFpbCBpZiB0aGUgZGV2aWNlIHdhcyB0YWtlbiBkb3duIChkZXZfY2xvc2UvdW5yZWdpc3RlcikuICBUaGVcXG4rXFx0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXFxuK1xcdCAqIF9fTElOS19TVEFURV9TVEFSVCwgc28gdGhpcyBndWFyZCBkb2VzIG5vdCBtYXRjaCB0aGUgcmVzdGFydCdzXFxuK1xcdCAqIG93biBzdG9wOyBpdCBleGlzdHMgb25seSB0byBhdm9pZCByZXN0YXJ0aW5nIGEgdG9ybi1kb3duIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcocHJpdi1cXHUwMDNlbmRldikpXFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXG4gXFx0aGlwMDRfbWFjX3N0b3AocHJpdi1cXHUwMDNlbmRldik7XFxuLVxcdGhpcDA0X21hY19vcGVuKHByaXYtXFx1MDAzZW5kZXYpO1xcbitcXHRpZiAoaGlwMDRfbWFjX29wZW4ocHJpdi1cXHUwMDNlbmRldikpXFxuK1xcdFxcdG5ldGRldl9lcnIocHJpdi1cXHUwMDNlbmRldiwgXFxcInJlc3RhcnQgYWZ0ZXIgdHggdGltZW91dCBmYWlsZWRcXFxcblxcXCIpO1xcbitvdXQ6XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgaGlwMDRfZ2V0X2NvYWxlc2NlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuQEAgLTEwMjYsMTMgKzEwNzMsMjQgQEAgc3RhdGljIHZvaWQgaGlwMDRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuIFxcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmQgPSBcXHUwMDI2cGRldi1cXHUwMDNlZGV2O1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuK1xcbitcXHQvKiBUaGUgSVJRIGlzIGRldm0tbWFuYWdlZCBhbmQgd291bGQgb3RoZXJ3aXNlIGJlIGZyZWVkIG9ubHkgYWZ0ZXJcXG4rXFx0ICogdGhpcyBmdW5jdGlvbiByZXR1cm5zLiAgRnJlZSBpdCBub3csIGFmdGVyIHVucmVnaXN0ZXJfbmV0ZGV2KCkgaGFzXFxuK1xcdCAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXRcXG4rXFx0ICogYmVmb3JlIHRoZSBtYW51YWwgZnJlZV9uZXRkZXYoKSBiZWxvdywgc28gdGhhdCBoaXAwNF9tYWNfaW50ZXJydXB0KClcXG4rXFx0ICogKGRldl9pZCA9PSBuZGV2KSBjYW5ub3QgZmlyZSBhZ2FpbnN0IGZyZWVkIG1lbW9yeS4gIGZyZWVfaXJxKCkgYWxzb1xcbitcXHQgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLlxcbitcXHQgKi9cXG4rXFx0ZGV2bV9mcmVlX2lycShkLCBuZGV2LVxcdTAwM2VpcnEsIG5kZXYpO1xcbitcXHRjYW5jZWxfd29ya19zeW5jKFxcdTAwMjZwcml2LVxcdTAwM2V0eF90aW1lb3V0X3Rhc2spO1xcbitcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2cHJpdi1cXHUwMDNldHhfY29hbGVzY2VfdGltZXIpO1xcbitcXG4gXFx0aWYgKHByaXYtXFx1MDAzZXBoeSlcXG4gXFx0XFx0cGh5X2Rpc2Nvbm5lY3QocHJpdi1cXHUwMDNlcGh5KTtcXG4gXFxuIFxcdGhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTtcXG4tXFx0dW5yZWdpc3Rlcl9uZXRkZXYobmRldik7XFxuIFxcdG9mX25vZGVfcHV0KHByaXYtXFx1MDAzZXBoeV9ub2RlKTtcXG4tXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfdGltZW91dF90YXNrKTtcXG4gXFx0ZnJlZV9uZXRkZXYobmRldik7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE3LjQ0ODQ0MjM4OFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc0MTQ4NTM1MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZmZkYjQ5NTdkZTI4ZjQ2OTA1YjYxYzE2NWY0ZGQ4YjI4ZWZiMjMyNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDEwIDIzOjExOjE1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jXG5pbmRleCAxODM3NmJjYzcxOGEyMC4uZjExNzA5ZTUzNmQzNWQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21mZC9zeXNjb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JlZ21hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFNDX1BQRV9SRVNFVF9EUkVRXHRcdDB4MDI2Q1xuIFxuQEAgLTIzMiw2ICsyMzMsNyBAQCBzdHJ1Y3QgaGlwMDRfcHJpdiB7XG4gXHRpbnQgdHhfY29hbGVzY2VfZnJhbWVzO1xuIFx0aW50IHR4X2NvYWxlc2NlX3VzZWNzO1xuIFx0c3RydWN0IGhydGltZXIgdHhfY29hbGVzY2VfdGltZXI7XG4rXHRib29sIGNsb3Npbmc7XG4gXG4gXHR1bnNpZ25lZCBjaGFyICpyeF9idWZbUlhfREVTQ19OVU1dO1xuIFx0ZG1hX2FkZHJfdCByeF9waHlzW1JYX0RFU0NfTlVNXTtcbkBAIC00OTcsNiArNDk5LDEyIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHN0cnVjdCBoaXAwNF9wcml2ICpwcml2KVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnMgPSBwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3VzZWNzICogTlNFQ19QRVJfVVNFQyAvIDI7XG4gXG4rXHQvKiBEbyBub3QgKHJlLSlhcm0gdGhlIFRYIGNvYWxlc2NlIHRpbWVyIG9uY2UgdGVhcmRvd24gaGFzIGJlZ3VuLlxuK1x0ICogQm90aCBhcm1pbmcgc2l0ZXMgKFRYIHhtaXQgYW5kIE5BUEkgcnggcG9sbCkgZ28gdGhyb3VnaCBoZXJlLlxuK1x0ICovXG4rXHRpZiAoc21wX2xvYWRfYWNxdWlyZShcdTAwMjZwcml2LVx1MDAzZWNsb3NpbmcpKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBhbGxvdyB0aW1lciB0byBmaXJlIGFmdGVyIGhhbGYgdGhlIHRpbWUgYXQgdGhlIGVhcmxpZXN0ICovXG4gXHRocnRpbWVyX3N0YXJ0X3JhbmdlX25zKFx1MDAyNnByaXYtXHUwMDNldHhfY29hbGVzY2VfdGltZXIsIG5zX3RvX2t0aW1lKG5zKSxcbiBcdFx0XHQgICAgICAgbnMsIEhSVElNRVJfTU9ERV9SRUwpO1xuQEAgLTY0OSwxMiArNjU3LDE1IEBAIHN0YXRpYyBpbnQgaGlwMDRfcnhfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXHRcdHByaXYtXHUwMDNlcmVnX2ludGVuIHw9IFJDVl9JTlQ7XG4gXHRcdHdyaXRlbF9yZWxheGVkKHByaXYtXHUwMDNlcmVnX2ludGVuLCBwcml2LVx1MDAzZWJhc2UgKyBQUEVfSU5URU4pO1xuIFx0fVxuK1x0LyogQXJtIHRoZSBjb2FsZXNjZSB0aW1lciBCRUZPUkUgbmFwaV9jb21wbGV0ZV9kb25lKCk6IG5hcGlfZGlzYWJsZSgpXG4rXHQgKiBpbiBoaXAwNF9tYWNfc3RvcCgpIHJldHVybnMgb25jZSBTQ0hFRCBpcyBjbGVhcmVkIGhlcmUsIG5vdCB3aGVuXG4rXHQgKiB0aGUgcG9sbCBmdW5jdGlvbiByZXR1cm5zLCBzbyBhcm1pbmcgYWZ0ZXJ3YXJkcyBjYW4gc2xpcCBwYXN0IHRoZVxuK1x0ICogc3RvcCBwYXRoJ3MgaHJ0aW1lcl9jYW5jZWwoKS5cbitcdCAqL1xuK1x0aWYgKHR4X3JlbWFpbmluZylcbitcdFx0aGlwMDRfc3RhcnRfdHhfdGltZXIocHJpdik7XG4gXHRuYXBpX2NvbXBsZXRlX2RvbmUobmFwaSwgcngpO1xuIGRvbmU6XG4tXHQvKiBzdGFydCBhIG5ldyB0aW1lciBpZiBuZWNlc3NhcnkgKi9cbi1cdGlmIChyeCBcdTAwM2MgYnVkZ2V0IFx1MDAyNlx1MDAyNiB0eF9yZW1haW5pbmcpXG4tXHRcdGhpcDA0X3N0YXJ0X3R4X3RpbWVyKHByaXYpO1xuLVxuIFx0cmV0dXJuIHJ4O1xuIH1cbiBcbkBAIC03MjksNiArNzQwLDExIEBAIHN0YXRpYyBpbnQgaGlwMDRfbWFjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4gXHRwcml2LVx1MDAzZXJ4X2NudF9yZW1haW5pbmcgPSAwO1xuIFx0cHJpdi1cdTAwM2V0eF9oZWFkID0gMDtcbiBcdHByaXYtXHUwMDNldHhfdGFpbCA9IDA7XG4rXHQvKiBBIHBsYWluIHdyaXRlIGlzIHN1ZmZpY2llbnQgaGVyZTogbWFjX29wZW4oKSBydW5zIHVuZGVyIFJUTkwsIHNvIGl0XG4rXHQgKiBjYW5ub3QgcmFjZSBtYWNfc3RvcCgpJ3Mgc3RvcmUtcmVsZWFzZSwgYW5kIG5hcGlfZW5hYmxlKCkgYmVsb3cgb3JkZXJzXG4rXHQgKiB0aGlzIHJlc2V0IGJlZm9yZSBhbnkgVFgvTkFQSSB0cmFmZmljIGNhbiByZXN1bWUuXG4rXHQgKi9cbitcdFdSSVRFX09OQ0UocHJpdi1cdTAwM2VjbG9zaW5nLCBmYWxzZSk7XG4gXHRoaXAwNF9yZXNldF9wcGUocHJpdik7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSWF9ERVNDX05VTTsgaSsrKSB7XG5AQCAtNzU5LDggKzc3NSwyNiBAQCBzdGF0aWMgaW50IGhpcDA0X21hY19zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdGludCBpO1xuIFxuK1x0LyogU3RvcCBuZXcgdGltZXIgYXJtcyBiZWZvcmUgZHJhaW5pbmc6IHNldCB0aGUgY2xvc2luZyBmbGFnIChjaGVja2VkXG4rXHQgKiBhdCB0aGUgc2luZ2xlIGFybWluZyBzaXRlKSwgd2FpdCBmb3IgdGhlIE5BUEkgcG9sbCBhbmQgYW55IGluLWZsaWdodFxuK1x0ICogVFggdG8gZmluaXNoLCB0aGVuIGNhbmNlbCB0aGUgdGltZXIuXG4rXHQgKlxuK1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIChub3QgbmV0aWZfc3RvcF9xdWV1ZSgpKSBpcyByZXF1aXJlZCBiZWNhdXNlIHRoaXNcbitcdCAqIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIGRpcmVjdGx5IGZyb20gaGlwMDRfdHhfdGltZW91dF90YXNrKCksIG5vdFxuK1x0ICogb25seSB2aWEgLm5kb19zdG9wIHdoZXJlIHRoZSBjb3JlIGhhcyBhbHJlYWR5IGRlYWN0aXZhdGVkIFRYO1xuK1x0ICogbmV0aWZfdHhfZGlzYWJsZSgpIHdhaXRzIGZvciBhbiBpbi1mbGlnaHQgaGlwMDRfbWFjX3N0YXJ0X3htaXQoKSxcbitcdCAqIHdoaWNoIGFybXMgdGhlIHRpbWVyLCB0byBmaW5pc2guXG4rXHQgKlxuK1x0ICogQmVjYXVzZSBoaXAwNF9yeF9wb2xsKCkgYXJtcyB0aGUgdGltZXIgYmVmb3JlIG5hcGlfY29tcGxldGVfZG9uZSgpLFxuK1x0ICogbmFwaV9kaXNhYmxlKCkgcmV0dXJuaW5nIG1lYW5zIHRoYXQgYXJtIGhhcyBoYXBwZW5lZCwgc28gdGhlXG4rXHQgKiBocnRpbWVyX2NhbmNlbCgpIGJlbG93IGNhbm5vdCBtaXNzIGl0LiAgVGhlIHN0b3JlLXJlbGVhc2UgcGFpcnNcbitcdCAqIHdpdGggdGhlIGxvYWQgaW4gaGlwMDRfc3RhcnRfdHhfdGltZXIoKS5cbitcdCAqL1xuK1x0c21wX3N0b3JlX3JlbGVhc2UoXHUwMDI2cHJpdi1cdTAwM2VjbG9zaW5nLCB0cnVlKTtcbitcbiBcdG5hcGlfZGlzYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuLVx0bmV0aWZfc3RvcF9xdWV1ZShuZGV2KTtcbitcdG5ldGlmX3R4X2Rpc2FibGUobmRldik7XG4rXHRocnRpbWVyX2NhbmNlbChcdTAwMjZwcml2LVx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyKTtcbiBcdGhpcDA0X21hY19kaXNhYmxlKG5kZXYpO1xuIFx0aGlwMDRfdHhfcmVjbGFpbShuZGV2LCB0cnVlKTtcbiBcdGhpcDA0X3Jlc2V0X3BwZShwcml2KTtcbkBAIC03OTEsOCArODI1LDIxIEBAIHN0YXRpYyB2b2lkIGhpcDA0X3R4X3RpbWVvdXRfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4gXHRzdHJ1Y3QgaGlwMDRfcHJpdiAqcHJpdjtcbiBcbiBcdHByaXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhpcDA0X3ByaXYsIHR4X3RpbWVvdXRfdGFzayk7XG4rXG4rXHQvKiBCYWlsIGlmIHRoZSBkZXZpY2Ugd2FzIHRha2VuIGRvd24gKGRldl9jbG9zZS91bnJlZ2lzdGVyKS4gIFRoZVxuK1x0ICogbWFjX3N0b3AoKSBiZWxvdyBpcyBjYWxsZWQgZGlyZWN0bHkgYW5kIGRvZXMgbm90IGNsZWFyXG4rXHQgKiBfX0xJTktfU1RBVEVfU1RBUlQsIHNvIHRoaXMgZ3VhcmQgZG9lcyBub3QgbWF0Y2ggdGhlIHJlc3RhcnQnc1xuK1x0ICogb3duIHN0b3A7IGl0IGV4aXN0cyBvbmx5IHRvIGF2b2lkIHJlc3RhcnRpbmcgYSB0b3JuLWRvd24gZGV2aWNlLlxuK1x0ICovXG4rXHRydG5sX2xvY2soKTtcbitcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVx1MDAzZW5kZXYpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGhpcDA0X21hY19zdG9wKHByaXYtXHUwMDNlbmRldik7XG4tXHRoaXAwNF9tYWNfb3Blbihwcml2LVx1MDAzZW5kZXYpO1xuK1x0aWYgKGhpcDA0X21hY19vcGVuKHByaXYtXHUwMDNlbmRldikpXG4rXHRcdG5ldGRldl9lcnIocHJpdi1cdTAwM2VuZGV2LCBcInJlc3RhcnQgYWZ0ZXIgdHggdGltZW91dCBmYWlsZWRcXG5cIik7XG4rb3V0OlxuK1x0cnRubF91bmxvY2soKTtcbiB9XG4gXG4gc3RhdGljIGludCBoaXAwNF9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbkBAIC0xMDI2LDEzICsxMDczLDI0IEBAIHN0YXRpYyB2b2lkIGhpcDA0X3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0c3RydWN0IGhpcDA0X3ByaXYgKnByaXYgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcdHN0cnVjdCBkZXZpY2UgKmQgPSBcdTAwMjZwZGV2LVx1MDAzZWRldjtcbiBcbitcdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuK1xuK1x0LyogVGhlIElSUSBpcyBkZXZtLW1hbmFnZWQgYW5kIHdvdWxkIG90aGVyd2lzZSBiZSBmcmVlZCBvbmx5IGFmdGVyXG4rXHQgKiB0aGlzIGZ1bmN0aW9uIHJldHVybnMuICBGcmVlIGl0IG5vdywgYWZ0ZXIgdW5yZWdpc3Rlcl9uZXRkZXYoKSBoYXNcbitcdCAqIHJ1biAubmRvX3N0b3AgdG8gc3RvcCB0aGUgZGV2aWNlIGFuZCBtYXNrIGl0cyBpbnRlcnJ1cHQgc291cmNlLCBidXRcbitcdCAqIGJlZm9yZSB0aGUgbWFudWFsIGZyZWVfbmV0ZGV2KCkgYmVsb3csIHNvIHRoYXQgaGlwMDRfbWFjX2ludGVycnVwdCgpXG4rXHQgKiAoZGV2X2lkID09IG5kZXYpIGNhbm5vdCBmaXJlIGFnYWluc3QgZnJlZWQgbWVtb3J5LiAgZnJlZV9pcnEoKSBhbHNvXG4rXHQgKiBkcmFpbnMgYW55IGluLWZsaWdodCBoYW5kbGVyLlxuK1x0ICovXG4rXHRkZXZtX2ZyZWVfaXJxKGQsIG5kZXYtXHUwMDNlaXJxLCBuZGV2KTtcbitcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2V0eF90aW1lb3V0X3Rhc2spO1xuK1x0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2cHJpdi1cdTAwM2V0eF9jb2FsZXNjZV90aW1lcik7XG4rXG4gXHRpZiAocHJpdi1cdTAwM2VwaHkpXG4gXHRcdHBoeV9kaXNjb25uZWN0KHByaXYtXHUwMDNlcGh5KTtcbiBcbiBcdGhpcDA0X2ZyZWVfcmluZyhuZGV2LCBkKTtcbi1cdHVucmVnaXN0ZXJfbmV0ZGV2KG5kZXYpO1xuIFx0b2Zfbm9kZV9wdXQocHJpdi1cdTAwM2VwaHlfbm9kZSk7XG4tXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNldHhfdGltZW91dF90YXNrKTtcbiBcdGZyZWVfbmV0ZGV2KG5kZXYpO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjE3LjQ0ODQ0NTAzOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2MzkyNDE5ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgSGlzaWxpY29uIEhJUDA0IEV0aGVybmV0IERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jYCBmaWxlLCB3aGljaCBpcyB0aGUgZXRoZXJuZXQgZHJpdmVyIGZvciB0aGUgSGlzaWxpY29uIEhJUDA0LiBGcm9tIHRoZSBkZXNjcmlwdGlvbiwgaXQgbG9va3MgbGlrZSBpdCdzIGFkZHJlc3Npbmcgc29tZSByYWNlIGNvbmRpdGlvbnMgYW5kIGlzc3VlcyByZWxhdGVkIHRvIHRoZSBkcml2ZXIncyB0ZWFyZG93biBzZXF1ZW5jZS4gU3BlY2lmaWNhbGx5LCB0aGV5J3ZlIGFkZGVkIGEgYHByaXYtXHUwMDNlY2xvc2luZ2AgZmxhZyB0byBtYW5hZ2UgdGltZXIgcmUtYXJtaW5nLCB0d2Vha2VkIHRoZSBSWCBwb2xsaW5nIGxvZ2ljIHRvIGhhbmRsZSB0aGUgdGltZXIgbW9yZSBjYXJlZnVsbHksIGFuZCBtYWRlIGNoYW5nZXMgdG8gdGhlIG9wZW4vc3RvcC90aW1lb3V0IGZ1bmN0aW9ucyB0byBwcm9wZXJseSBtYW5hZ2UgdGhlIGRyaXZlcidzIHN0YXRlIGR1cmluZyBpbml0aWFsaXphdGlvbiBhbmQgc2h1dGRvd24uIFRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGJlZW4gdXBkYXRlZCB0byBkbyBhIHByb3BlciBjbGVhbnVwLCBpbmNsdWRpbmcgdW5yZWdpc3RlcmluZyB0aGUgbmV0IGRldmljZSwgZnJlZWluZyBpbnRlcnJ1cHRzLCBhbmQgY2FuY2VsaW5nIGFueSBwZW5kaW5nIHdvcmsgb3IgdGltZXJzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgXCJDYW4gSSBldmVuICpzZWUqIHRoaXMgaW4gYSB0eXBpY2FsIHZpcnR1YWxpemVkIGVudmlyb25tZW50P1wiIEdpdmVuIHRoYXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlciwgbGlrZSBhIEhJUDA0LCBpdCdzIGhpZ2hseSB1bmxpa2VseSB0aGF0IEknbGwgYmUgYWJsZSB0byBkaXJlY3RseSBpbnRlcmFjdCB3aXRoIGl0IHdpdGhpbiBzb21ldGhpbmcgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZSwgdW5sZXNzIHRoZXJlJ3MgYSBzcGVjaWZpYyBlbXVsYXRvciBmb3IgdGhlIEhJUDA0IGhhcmR3YXJlLCBvciwgbGVzcyBsaWtlbHksIHNvbWUgY2xldmVyIHNvZnR3YXJlIGluc3RhbnRpYXRpb24gbWVjaGFuaXNtLiBNeSBleHBlcmllbmNlIHRlbGxzIG1lIHRoYXQgdGhlc2Uga2luZHMgb2YgZHJpdmVycyBhcmUgdGllZCB2ZXJ5IGNsb3NlbHkgdG8gdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUuXG5cblRoZSBuZXh0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIGlmIHRoaXMgaXMgYSBwbGF0Zm9ybSBkcml2ZXIuIEFoLCB5ZXMsIHRoZSBgaGlwMDRfcmVtb3ZlYCBmdW5jdGlvbiB0YWtlcyBhIGBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2YCB3aGljaCBjb25maXJtcyBpdC4gTm93LCB0aGUga2V5IHF1ZXN0aW9uIGlzLCBjYW4gSSBwcm9iZSBpdCBpbiBRRU1VPyBJIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcsIHByb2JhYmx5IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZ2Agb3Igc29tZXRoaW5nIHNpbWlsYXIsIHRvIHNlZSB3aGF0IGRlcGVuZGVuY2llcyB0aGlzIGRyaXZlciBoYXMuIE9yLCBtYXliZSBJIGNvdWxkIHVzZSBgZ3JlcHBlcmAgdG8gZmluZCBvdXQgd2hlcmUgYGhpcDA0X2V0aGAgaXMgZGVmaW5lZC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgZHJpdmVyIGlzIGJyb3VnaHQgdXAgYW5kIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSBpdCBjb3VsZCBiZSBlbmFibGVkIGZvciB0ZXN0aW5nIGluIGFuIGVtdWxhdGVkIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjU1LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzczLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MjQuMDg3Njg5ODgxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjkzNjgxMDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaGlwMDRfZXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9NYWtlZmlsZT02PW9iai0kKENPTkZJR19ISVg1SEQyX0dNQUMpICs9IGhpeDVoZDJfZ21hYy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL01ha2VmaWxlOjc6b2JqLSQoQ09ORklHX0hJUDA0X0VUSCkgKz0gaGlwMDRfZXRoLm9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vTWFrZWZpbGUtOC1vYmotJChDT05GSUdfSE5TX01ESU8pICs9IGhuc19tZGlvLm9cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz04Nzc9c3RhdGljIHZvaWQgaGlwMDRfZ2V0X2RydmluZm8oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy04ODMtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL2hpcDA0X2V0aC5jOjg4NDpzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIGhpcDA0X2V0aHRvb2xfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy04ODUtXFx0LnN1cHBvcnRlZF9jb2FsZXNjZV9wYXJhbXMgPSBFVEhUT09MX0NPQUxFU0NFX1RYX1VTRUNTIHxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYz05NDA9c3RhdGljIGludCBoaXAwNF9tYWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9oaXAwNF9ldGguYy0xMDM0LVxcdG5kZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2aGlwMDRfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmM6MTAzNTpcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZoaXAwNF9ldGh0b29sX29wcztcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmMtMTAzNi1cXHRuZGV2LVxcdTAwM2V3YXRjaGRvZ190aW1lbyA9IFRYX1RJTUVPVVQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjI2LjI1NzA2MzA4N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4Njk4NjY2MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEZWJ1Z2dpbmcgYW4gRXRoZXJuZXQgRHJpdmVyIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gdGhlIHN5c3RlbSdzIHRlbGxpbmcgbWUgdGhlIEV0aGVybmV0IGRyaXZlciBpbiB1c2UgaXMgYENPTkZJR19ISVAwNF9FVEhgLiBUaGF0IG5hbWUgcmluZ3MgYSBiZWxsLCBidXQgSSBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IGl0cyBleGFjdCBkZWZpbml0aW9uIGFuZCBhbnkgZGVwZW5kZW5jaWVzLiBNeSBmaXJzdCBpbnN0aW5jdCwgYmFzZWQgb24gdGhlIG5hbWluZyBjb252ZW50aW9uLCBpcyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIFNwZWNpZmljYWxseSwgc2luY2UgaXQncyBhbiBFdGhlcm5ldCBkcml2ZXIsIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZ2Agc2hvdWxkIGJlIHRoZSBtb3N0IHJlbGV2YW50IHNwb3QuIEknbSBnb2luZyB0byBzY2FuIHRoYXQgZmlsZSBmb3IgYEhJUDA0X0VUSGAgdG8gY29uZmlybSBpdHMgb3JpZ2luLCBzZWUgd2hhdCBvdGhlciBvcHRpb25zIGl0IG1pZ2h0IGluZmx1ZW5jZSwgYW5kIGp1c3QgZ2VuZXJhbGx5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlIGRldGFpbHMuIFRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBtZSB0byBkZWx2ZSBmdXJ0aGVyIGludG8gdGhlIGFzc29jaWF0ZWQgZHJpdmVyIGNvZGUgaWYgdGhpcyB0dXJucyBvdXQgdG8gYmUgdGhlIHNvdXJjZSBvZiBteSBjdXJyZW50IHRyb3VibGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5NTEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMToyOS4xMjY5MzE1OThaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyMTUzMzg4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSElQMDRfRVRIXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnPTI4PWNvbmZpZyBISVNJX0ZFTUFDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0zOS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzo0MDpjb25maWcgSElQMDRfRVRIXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWctNDEtXFx0dHJpc3RhdGUgXFxcIkhJU0lMSUNPTiBQMDQgRXRoZXJuZXQgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MzEuMzQ4NDcxNzIyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUwMjIyOTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIGBISVAwNF9FVEhgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXBzIHN1cnJvdW5kaW5nIGBISVAwNF9FVEhgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgdGhpcyBjb21wb25lbnQgc2l0IHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0/IFdoYXQgb3RoZXIgbW9kdWxlcywgbGlicmFyaWVzLCBvciBjb25maWd1cmF0aW9ucyByZWx5IG9uIGl0PyBBcmUgdGhlcmUgYW55IHVwc3RyZWFtIG9yIGRvd25zdHJlYW0gY29tcG9uZW50cyBJIHNob3VsZCBiZSBpbW1lZGlhdGVseSBhd2FyZSBvZj9cblxuTXkgbWFpbiBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGNoYW5nZXMgdG8gYEhJUDA0X0VUSGAgbWlnaHQgcmlwcGxlIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEknbSBsb29raW5nIGZvciBhIGNsZWFyIG1hcCBvZiBpdHMgaW1tZWRpYXRlIGRlcGVuZGVudHMsIGFuZCBhbHNvIHBvdGVudGlhbGx5IGl0cyBpbmRpcmVjdCBkZXBlbmRlbnRzLCBpZiB0aGF0IGxldmVsIG9mIGRldGFpbCBpcyBpbW1lZGlhdGVseSBhY2Nlc3NpYmxlLiBUaGUgcXVhbGl0eSBvZiB0aGlzIGluaXRpYWwgaW52ZXN0aWdhdGlvbiB3aWxsIGRyaXZlIG15IGFiaWxpdHkgdG8gcXVpY2tseSB0cmlhZ2UgYW55IGlzc3Vlcy4gSSB3aWxsIHRyeSB0byBjb25zaWRlciB0aGUgZGF0YSBzdHJ1Y3R1cmVzLCBBUElzLCBhbmQgY29uZmlndXJhdGlvbiBmaWxlcy5cblxuSSdsbCBiZSBtaW5kZnVsIG9mIHRoZSBkaWZmZXJlbnQgdHlwZXMgb2YgZGVwZW5kZW5jaWVzOiBoYXJkIGRlcGVuZGVuY2llcyB0aGF0IG11c3QgYmUgcHJlc2VudCBmb3IgYEhJUDA0X0VUSGAgdG8gZnVuY3Rpb24sIHZlcnN1cyBzb2Z0ZXIgZGVwZW5kZW5jaWVzIG9yIFwic3VnZ2VzdGVkXCIgY29tcG9uZW50cy4gSSBuZWVkIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gd2hhdCdzIGFic29sdXRlbHkgY3JpdGljYWwgYW5kIHdoYXQncyBtZXJlbHkgcmVjb21tZW5kZWQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2Ugb3IgZmVhdHVyZXMuIE15IHByb2Nlc3Mgd2lsbCBkZXBlbmQgb24gdGhlIGRhdGEgYWNjZXNzLCBhbmQgSSB3aWxsIGJlIGxvb2tpbmcgdG8gZ2V0IGRhdGEgcXVpY2tseSwgYW5kIHRoZW4gdG8gY29uc2lkZXIgaG93IG11Y2ggZGV0YWlsIGlzIHJlcXVpcmVkLCBhbmQgdGhlIGJlc3Qgd2F5IHRvIGRldGVybWluZSB0aGF0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzE5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6MzQuODUwNzAzOVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDQwOlxcdGNvbmZpZyBISVAwNF9FVEhcXG4gIDQxOlxcdFxcdHRyaXN0YXRlIFxcXCJISVNJTElDT04gUDA0IEV0aGVybmV0IHN1cHBvcnRcXFwiXFxuICA0MjpcXHRcXHRkZXBlbmRzIG9uIEhBU19JT01FTVxcdCMgRm9yIE1GRF9TWVNDT05cXG4gIDQzOlxcdFxcdHNlbGVjdCBNQVJWRUxMX1BIWVxcbiAgNDQ6XFx0XFx0c2VsZWN0IE1GRF9TWVNDT05cXG4gIDQ1OlxcdFxcdHNlbGVjdCBITlNfTURJT1xcbiAgNDY6XFx0XFx0aGVscFxcbiAgNDc6XFx0XFx0ICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciBhIGhhcmR3YXJlIHdpdGggaGlzaWxpY29uIHAwNCBTb0MgYW5kXFxuICA0ODpcXHRcXHQgIHdhbnQgdG8gdXNlIHRoZSBpbnRlcm5hbCBldGhlcm5ldCB0aGVuIHlvdSBzaG91bGQgYW5zd2VyIFkgdG8gdGhpcy5cXG4gIDQ5OlxcdFxcbiAgNTA6XFx0Y29uZmlnIEhJMTNYMV9HTUFDXFxuICA1MTpcXHRcXHRib29sIFxcXCJIaXNpbGljb24gSEkxM1gxIE5ldHdvcmsgRGV2aWNlIFN1cHBvcnRcXFwiXFxuICA1MjpcXHRcXHRkZXBlbmRzIG9uIEhJUDA0X0VUSFxcbiAgNTM6XFx0XFx0aGVscFxcbiAgNTQ6XFx0XFx0ICBJZiB5b3Ugd2lzaCB0byBjb21waWxlIGEga2VybmVsIGZvciBhIGhhcmR3YXJlIHdpdGggaGlzaWxpY29uIGhpMTN4MV9nYW1jXFxuICA1NTpcXHRcXHQgIHRoZW4geW91IHNob3VsZCBhbnN3ZXIgWSB0byB0aGlzLiBUaGlzIG1ha2VzIHRoaXMgZHJpdmVyIHN1aXRhYmxlIGZvciB1c2VcXG4gIDU2OlxcdFxcdCAgb24gY2VydGFpbiBib2FyZHMgc3VjaCBhcyB0aGUgSEkxM1gxLlxcbiAgNTc6XFx0XFxuICA1ODpcXHRcXHQgIElmIHlvdSBhcmUgdW5zdXJlLCBzYXkgTi5cXG4gIDU5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMTozNC44NTA3NzU0NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzODM1MzA1OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgaGlwMDRfbWFjYCBEcml2ZXIgZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBoaXAwNF9tYWNgIGRyaXZlciwgYW5kIGltbWVkaWF0ZWx5IG15IGV4cGVydCBzZW5zZXMgYXJlIHRpbmdsaW5nLiBJdCAqcmVhbGx5KiBkZXBlbmRzIG9uIGBIQVNfSU9NRU1gLCB3aGljaCBzY3JlYW1zIFwicGxhdGZvcm0tc3BlY2lmaWNcIiB0byBtZS4gVGhpcyBkcml2ZXIgaXMgZm9yIHRoZSBIaXNpbGljb24gUDA0IFNvQywgYW5kIHRoYXQgbWVhbnMgaXQncyBwcmV0dHkgbXVjaCBndWFyYW50ZWVkIHRvIG5lZWQgKnZlcnkqIHNwZWNpZmljIGVtdWxhdGlvbiB0byB3b3JrLiBObyBnZW5lcmljIFFFTVUgZW52aXJvbm1lbnQgaXMgZ29pbmcgdG8gY3V0IGl0IGhlcmUgdW5sZXNzIHNvbWVvbmUgd2VudCB0byB0aGUgZWZmb3J0IG9mIGNyZWF0aW5nIGEgc3BlY2lmaWMgbWFjaGluZSBkZWZpbml0aW9uIGZvciB0aGF0IGV4YWN0IFNvQy5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgaWYgc3VjaCBhbiBlbXVsYXRpb24gZXhpc3RzLCBidXQgSSdtIG5vdCBvcHRpbWlzdGljLiBRRU1VIGdlbmVyYWxseSBkb2Vzbid0IGdvIHRvIHRoYXQgbGV2ZWwgb2YgZGV0YWlsLCBlc3BlY2lhbGx5IGZvciB3aGF0J3MgcHJvYmFibHkgYSByZWxhdGl2ZWx5IG5pY2hlIGV0aGVybmV0IGNvbnRyb2xsZXIuIENoYW5jZXMgYXJlIGl0IGlzIG5vdCBhIHdpZGVseSB1c2VkIGJvYXJkLlxuXG5UaGVuIEkgcmVtZW1iZXIgc3l6a2FsbGVyLiBUaGUgd2F5IHN5emthbGxlciB3b3JrcyBpcyB0aGF0IHVubGVzcyB0aGlzIGRldmljZSBpcyBpbnN0YW50aWF0ZWQgdGhyb3VnaCBkZXZpY2UgdHJlZSBvdmVybGF5cywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGl04oCZcyBub3QgZnV6emFibGUuIEV2ZW4gKmlmKiB3ZSBjb3VsZCBpbmplY3QgaXQsIGlmIHRoZSBoYXJkd2FyZSBpc24ndCBlbXVsYXRlZCBwcm9wZXJseSwgdGhlIGRyaXZlciBpcyBnb2luZyB0byBpbW1lZGlhdGVseSBmYWlsIGR1cmluZyB0aGUgcHJvYmUgc2VxdWVuY2UuIFRoaW5ncyBsaWtlIEkvTyBtZW1vcnkgbWFwcGluZywgb3IgcmVnaXN0ZXIgY2hlY2tzIGFyZSBnb2luZyB0byBibG93IHVwLlxuXG5JJ2QgYmV0dGVyIGp1c3QgY2hlY2sgdGhlIHByb2JlIGZ1bmN0aW9uIChgaGlwMDRfbWFjX3Byb2JlYCkgYW5kIHNlZSBleGFjdGx5IHdoYXQgaXQncyB0cnlpbmcgdG8gZG8gZHVyaW5nIHRoZSBwcm9iaW5nIHBoYXNlLCBhbmQgd2hhdCBpdCdzIGV4cGVjdGluZyB0byBmaW5kLiBUaGF0IHdpbGwgZ2l2ZSBtZSBhIGJldHRlciBpZGVhIG9mIGhvdyBkaWZmaWN1bHQgaXQncyBnb2luZyB0byBiZSB0byBldmVuIGdldCB0aGlzIGRyaXZlciB0byAqbG9hZCosIGxldCBhbG9uZSBmdXp6IGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTU5LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMjM6MTE6NDAuMjM0MzA4Mzg5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vaGlwMDRfZXRoLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDk0MDpcXHRzdGF0aWMgaW50IGhpcDA0X21hY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiA5NDE6XFx0e1xcbiA5NDI6XFx0XFx0c3RydWN0IGRldmljZSAqZCA9IFxcdTAwMjZwZGV2LVxcdTAwM2VkZXY7XFxuIDk0MzpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUgPSBkLVxcdTAwM2VvZl9ub2RlO1xcbiA5NDQ6XFx0XFx0c3RydWN0IG9mX3BoYW5kbGVfYXJncyBhcmc7XFxuIDk0NTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmRldjtcXG4gOTQ2OlxcdFxcdHN0cnVjdCBoaXAwNF9wcml2ICpwcml2O1xcbiA5NDc6XFx0XFx0aW50IGlycTtcXG4gOTQ4OlxcdFxcdGludCByZXQ7XFxuIDk0OTpcXHRcXG4gOTUwOlxcdFxcdG5kZXYgPSBhbGxvY19ldGhlcmRldihzaXplb2Yoc3RydWN0IGhpcDA0X3ByaXYpKTtcXG4gOTUxOlxcdFxcdGlmICghbmRldilcXG4gOTUyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiA5NTM6XFx0XFxuIDk1NDpcXHRcXHRwcml2ID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIDk1NTpcXHRcXHRwcml2LVxcdTAwM2VkZXYgPSBkO1xcbiA5NTY6XFx0XFx0cHJpdi1cXHUwMDNlbmRldiA9IG5kZXY7XFxuIDk1NzpcXHRcXHRwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBuZGV2KTtcXG4gOTU4OlxcdFxcdFNFVF9ORVRERVZfREVWKG5kZXYsIFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiA5NTk6XFx0XFxuIDk2MDpcXHRcXHRwcml2LVxcdTAwM2ViYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbiA5NjE6XFx0XFx0aWYgKElTX0VSUihwcml2LVxcdTAwM2ViYXNlKSkge1xcbiA5NjI6XFx0XFx0XFx0cmV0ID0gUFRSX0VSUihwcml2LVxcdTAwM2ViYXNlKTtcXG4gOTYzOlxcdFxcdFxcdGdvdG8gaW5pdF9mYWlsO1xcbiA5NjQ6XFx0XFx0fVxcbiA5NjU6XFx0XFxuIDk2NjpcXHQjaWYgZGVmaW5lZChDT05GSUdfSEkxM1gxX0dNQUMpXFxuIDk2NzpcXHRcXHRwcml2LVxcdTAwM2VzeXNjdHJsX2Jhc2UgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2UocGRldiwgMSk7XFxuIDk2ODpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZXN5c2N0cmxfYmFzZSkpIHtcXG4gOTY5OlxcdFxcdFxcdHJldCA9IFBUUl9FUlIocHJpdi1cXHUwMDNlc3lzY3RybF9iYXNlKTtcXG4gOTcwOlxcdFxcdFxcdGdvdG8gaW5pdF9mYWlsO1xcbiA5NzE6XFx0XFx0fVxcbiA5NzI6XFx0I2VuZGlmXFxuIDk3MzpcXHRcXG4gOTc0OlxcdFxcdHJldCA9IG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzKG5vZGUsIFxcXCJwb3J0LWhhbmRsZVxcXCIsIDMsIDAsIFxcdTAwMjZhcmcpO1xcbiA5NzU6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4gOTc2OlxcdFxcdFxcdGRldl93YXJuKGQsIFxcXCJubyBwb3J0LWhhbmRsZVxcXFxuXFxcIik7XFxuIDk3NzpcXHRcXHRcXHRnb3RvIGluaXRfZmFpbDtcXG4gOTc4OlxcdFxcdH1cXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0cHJpdi1cXHUwMDNlcG9ydCA9IGFyZy5hcmdzWzBdO1xcbiA5ODE6XFx0XFx0cHJpdi1cXHUwMDNlY2hhbiA9IGFyZy5hcmdzWzFdICogUlhfREVTQ19OVU07XFxuIDk4MjpcXHRcXHRwcml2LVxcdTAwM2Vncm91cCA9IGFyZy5hcmdzWzJdO1xcbiA5ODM6XFx0XFxuIDk4NDpcXHRcXHQvKiBCUUwgd2lsbCB0cnkgdG8ga2VlcCB0aGUgVFggcXVldWUgYXMgc2hvcnQgYXMgcG9zc2libGUsIGJ1dCBpdCBjYW4ndFxcbiA5ODU6XFx0XFx0ICogYmUgZmFzdGVyIHRoYW4gdHhfY29hbGVzY2VfdXNlY3MsIHNvIHdlIG5lZWQgYSBmYXN0IHRpbWVvdXQgaGVyZSxcXG4gOTg2OlxcdFxcdCAqIGJ1dCBhbHNvIGxvbmcgZW5vdWdoIHRvIGdhdGhlciB1cCBlbm91Z2ggZnJhbWVzIHRvIGVuc3VyZSB3ZSBkb24ndFxcbiA5ODc6XFx0XFx0ICogZ2V0IG1vcmUgaW50ZXJydXB0cyB0aGFuIG5lY2Vzc2FyeS5cXG4gOTg4OlxcdFxcdCAqIDIwMHVzIGlzIGVub3VnaCBmb3IgMTYgZnJhbWVzIG9mIDE1MDAgYnl0ZXMgYXQgZ2lnYWJpdCBldGhlcm5ldCByYXRlXFxuIDk4OTpcXHRcXHQgKi9cXG4gOTkwOlxcdFxcdHByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX2ZyYW1lcyA9IFRYX0RFU0NfTlVNICogMyAvIDQ7XFxuIDk5MTpcXHRcXHRwcml2LVxcdTAwM2V0eF9jb2FsZXNjZV91c2VjcyA9IDIwMDtcXG4gOTkyOlxcdFxcdGhydGltZXJfc2V0dXAoXFx1MDAyNnByaXYtXFx1MDAzZXR4X2NvYWxlc2NlX3RpbWVyLCB0eF9kb25lLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xcbiA5OTM6XFx0XFxuIDk5NDpcXHRcXHRwcml2LVxcdTAwM2VtYXAgPSBzeXNjb25fbm9kZV90b19yZWdtYXAoYXJnLm5wKTtcXG4gOTk1OlxcdFxcdG9mX25vZGVfcHV0KGFyZy5ucCk7XFxuIDk5NjpcXHRcXHRpZiAoSVNfRVJSKHByaXYtXFx1MDAzZW1hcCkpIHtcXG4gOTk3OlxcdFxcdFxcdGRldl93YXJuKGQsIFxcXCJubyBzeXNjb24gaGlzaWxpY29uLGhpcDA0LXBwZVxcXFxuXFxcIik7XFxuIDk5ODpcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHByaXYtXFx1MDAzZW1hcCk7XFxuIDk5OTpcXHRcXHRcXHRnb3RvIGluaXRfZmFpbDtcXG4xMDAwOlxcdFxcdH1cXG4xMDAxOlxcdFxcbjEwMDI6XFx0XFx0cmV0ID0gb2ZfZ2V0X3BoeV9tb2RlKG5vZGUsIFxcdTAwMjZwcml2LVxcdTAwM2VwaHlfbW9kZSk7XFxuMTAwMzpcXHRcXHRpZiAocmV0KSB7XFxuMTAwNDpcXHRcXHRcXHRkZXZfd2FybihkLCBcXFwibm90IGZpbmQgcGh5LW1vZGVcXFxcblxcXCIpO1xcbjEwMDU6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAwNjpcXHRcXHR9XFxuMTAwNzpcXHRcXG4xMDA4OlxcdFxcdGlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7XFxuMTAwOTpcXHRcXHRpZiAoaXJxIFxcdTAwM2MgMCkge1xcbjEwMTA6XFx0XFx0XFx0cmV0ID0gaXJxO1xcbjEwMTE6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAxMjpcXHRcXHR9XFxuMTAxMzpcXHRcXG4xMDE0OlxcdFxcdHJldCA9IGRldm1fcmVxdWVzdF9pcnEoZCwgaXJxLCBoaXAwNF9tYWNfaW50ZXJydXB0LFxcbjEwMTU6XFx0XFx0XFx0XFx0ICAgICAgIDAsIHBkZXYtXFx1MDAzZW5hbWUsIG5kZXYpO1xcbjEwMTY6XFx0XFx0aWYgKHJldCkge1xcbjEwMTc6XFx0XFx0XFx0bmV0ZGV2X2VycihuZGV2LCBcXFwiZGV2bV9yZXF1ZXN0X2lycSBmYWlsZWRcXFxcblxcXCIpO1xcbjEwMTg6XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAxOTpcXHRcXHR9XFxuMTAyMDpcXHRcXG4xMDIxOlxcdFxcdHByaXYtXFx1MDAzZXBoeV9ub2RlID0gb2ZfcGFyc2VfcGhhbmRsZShub2RlLCBcXFwicGh5LWhhbmRsZVxcXCIsIDApO1xcbjEwMjI6XFx0XFx0aWYgKHByaXYtXFx1MDAzZXBoeV9ub2RlKSB7XFxuMTAyMzpcXHRcXHRcXHRwcml2LVxcdTAwM2VwaHkgPSBvZl9waHlfY29ubmVjdChuZGV2LCBwcml2LVxcdTAwM2VwaHlfbm9kZSxcXG4xMDI0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZoaXAwNF9hZGp1c3RfbGluayxcXG4xMDI1OlxcdFxcdFxcdFxcdFxcdFxcdCAgIDAsIHByaXYtXFx1MDAzZXBoeV9tb2RlKTtcXG4xMDI2OlxcdFxcdFxcdGlmICghcHJpdi1cXHUwMDNlcGh5KSB7XFxuMTAyNzpcXHRcXHRcXHRcXHRyZXQgPSAtRVBST0JFX0RFRkVSO1xcbjEwMjg6XFx0XFx0XFx0XFx0Z290byBpbml0X2ZhaWw7XFxuMTAyOTpcXHRcXHRcXHR9XFxuMTAzMDpcXHRcXHR9XFxuMTAzMTpcXHRcXG4xMDMyOlxcdFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNldHhfdGltZW91dF90YXNrLCBoaXAwNF90eF90aW1lb3V0X3Rhc2spO1xcbjEwMzM6XFx0XFxuMTAzNDpcXHRcXHRuZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmhpcDA0X25ldGRldl9vcHM7XFxuMTAzNTpcXHRcXHRuZGV2LVxcdTAwM2VldGh0b29sX29wcyA9IFxcdTAwMjZoaXAwNF9ldGh0b29sX29wcztcXG4xMDM2OlxcdFxcdG5kZXYtXFx1MDAzZXdhdGNoZG9nX3RpbWVvID0gVFhfVElNRU9VVDtcXG4xMDM3OlxcdFxcdG5kZXYtXFx1MDAzZXByaXZfZmxhZ3MgfD0gSUZGX1VOSUNBU1RfRkxUO1xcbjEwMzg6XFx0XFx0bmRldi1cXHUwMDNlaXJxID0gaXJxO1xcbjEwMzk6XFx0XFx0bmV0aWZfbmFwaV9hZGQobmRldiwgXFx1MDAyNnByaXYtXFx1MDAzZW5hcGksIGhpcDA0X3J4X3BvbGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQyMzoxMTo0MC4yMzQ0NTc1NTlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyODgwODgwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipVbmZ1enphYmxlIERyaXZlciBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIGludG8gdGhpcyBkcml2ZXIncyBwcm9iZSBzZXF1ZW5jZSwgYW5kIEkndmUgc3BvdHRlZCBzb21ldGhpbmcgaW50ZXJlc3RpbmcuIEl0J3MgcmVseWluZyBoZWF2aWx5IG9uIERldmljZSBUcmVlIHByb3BlcnRpZXMsIHNwZWNpZmljYWxseSB1c2luZyBgZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlYCBhbmQgYG9mX3BhcnNlX3BoYW5kbGVfd2l0aF9maXhlZF9hcmdzYCB0byBnZXQgaXRzIGNvbmZpZ3VyYXRpb24uIE15IGNvbmNlcm4gaGVyZSBpcyB0aGF0IHRoZXJlJ3Mgbm8gd2F5IHRvIGVtdWxhdGUgb3IgaW5qZWN0IHRoZXNlIGRldmljZSB0cmVlIG5vZGVzIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZy4gVGhlIGRyaXZlciB3b24ndCBldmVuICphdHRlbXB0KiB0byBwcm9iZSB3aXRob3V0IHRoZW0uXG5cbkNvbnNpZGVyaW5nIHRoaXMsIGFuZCBrbm93aW5nIHRoYXQgU3l6a2FsbGVyLCB3aGljaCBJJ20gcmVseWluZyBvbiBmb3IgZnV6emluZywgaXNuJ3QgZ29pbmcgdG8gbWFnaWNhbGx5IGdlbmVyYXRlIGEgRGV2aWNlIFRyZWUgbm9kZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBpZWNlIG9mIGhhcmR3YXJlLi4uIHdlbGwsIGl0J3MgcHJldHR5IGNsZWFyIHRvIG1lIHRoYXQgdGhpcyBkcml2ZXIgaXMgZXNzZW50aWFsbHkgdW5yZWFjaGFibGUgaW4gYW4gZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIEdvb2dsZSBDb21wdXRlIEVuZ2luZS4gTm8gcG9pbnQgaW4gd2FzdGluZyByZXNvdXJjZXMuXG5cblRoZXJlZm9yZSwgbXkgY29uY2x1c2lvbiBpcyB0aGF0IHRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIHZpcnR1YWxpemVkIHNldHVwIEknbSB1c2luZyBmb3IgZnV6emluZy4gSSB3aWxsIGNvbmZpZGVudGx5IHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCBmb3IgdGhpcyBvbmUuIEl0J3Mgc2ltcGx5IG5vdCBhY2Nlc3NpYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MjI3LCJPdXRwdXRUb2tlbnMiOjEwMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDIzOjExOjQ0Ljg2MzI2ODg2NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIaXNpbGljb24gSElQMDQgZXRoZXJuZXQgZHJpdmVyIChoaXAwNF9ldGguYykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZWxpZXMgb24gc3BlY2lmaWMgZGV2aWNlIHRyZWUgbm9kZXMgYW5kIEkvTyBtZW1vcnkgbWFwcGluZyB0byBwcm9iZSBzdWNjZXNzZnVsbHkuIEl0IGNhbm5vdCBiZSBpbnN0YW50aWF0ZWQgb3IgcmVhY2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowv52dw[1] Phase: Running StartedAt: 2026-07-10 23:11:56 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv52dw[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-10 23:11:56 +0000 UTC FinishedAt: 2026-07-10 23:12:01 +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,}