Name: series-workflow52zt5 Phase: Failed StartedAt: 2026-06-23 13:07:25 +0000 UTC FinishedAt: 2026-06-23 13:29:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52zt5[0] Phase: Succeeded StartedAt: 2026-06-23 13:07:25 +0000 UTC FinishedAt: 2026-06-23 13:26:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52zt5[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 13:07:25 +0000 UTC FinishedAt: 2026-06-23 13:26:58 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiOWRiMmFhZTI5YThlOTcwYjcwMDBiN2E4ZjQwNmUzNDA4M2U5MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxMzoyNjozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNmQ1NTNlZDNhYzIzYzUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksOTYgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgYXJnc19sb29wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXA7XG4mIzQzO1x0dm9pZCAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1x0aW50IHZhbHVlX3NpemU7XG4mIzQzO1x0dTY0ICpvdXRwdXQ7XG4mIzQzO1x0Ym9vbCAqZG9fb3V0cHV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcHJvY2Vzc19hcmdfY2IodTY0IGksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuJiM0MztcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7XHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7XHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4mIzQzO1x0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBhdWdtZW50ZWRfYXJnICphdWdtZW50ZWRfYXJnO1xuJiM0MztcdHN0cnVjdCBhcmdzX2xvb3BfY3R4ICpsb29wX2N0eDtcbiYjNDM7XHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xuJiM0MztcdGJvb2wgYXVnbWVudGVkO1xuJiM0MztcdHZvaWQgKmFyZztcbiYjNDM7XG4mIzQzO1x0LyogQm91bmRzIGNoZWNrIGZvciB0aGUgYmVsb3cgbWFwIGFjY2VzcyB0byBoZWxwIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSA2KVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGxvb3BfY3R4ID0gKHN0cnVjdCBhcmdzX2xvb3BfY3R4ICopY3R4O1xuJiM0MztcdGFyZyA9ICh2b2lkICopbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2ldO1xuJiM0MztcdGF1Z21lbnRlZCA9IGZhbHNlO1xuJiM0MztcdHNpemUgPSBsb29wX2N0eC1cdTAwM2ViZWF1dHlfbWFwW2ldO1xuJiM0MztcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbiYjNDM7XHRhdWdtZW50ZWRfYXJnID0gKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopbG9vcF9jdHgtXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4mIzQzO1x0XHRyZXR1cm4gMDsgLyogY29udGludWUgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbiYjNDM7XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoYXVnbWVudGVkX2FyZy1cdTAwM2V2YWx1ZSwgbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSwgYXJnKTtcbiYjNDM7XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbiYjNDM7XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuJiM0MztcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuJiM0MztcdFx0aW5kZXggPSAtKHNpemUgJiM0MzsgMSk7XG4mIzQzO1x0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbiYjNDM7XHRcdGluZGV4IFx1MDAyNj0gNztcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxuJiM0MztcdFx0YXVnX3NpemUgPSBsb29wX2N0eC1cdTAwM2VhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzO1x0XHRcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbiYjNDM7XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbiYjNDM7XHRpZiAoYXVnX3NpemUgXHUwMDNlIGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemUpXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuJiM0MztcdGlmIChhdWdtZW50ZWQpIHtcbiYjNDM7XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuJiM0MztcdFx0XHRyZXR1cm4gMTsgLyogYnJlYWsgKi9cbiYjNDM7XG4mIzQzO1x0XHRhdWdtZW50ZWRfYXJnLVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbiYjNDM7XHRcdCpsb29wX2N0eC1cdTAwM2VvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0XHRsb29wX2N0eC1cdTAwM2VwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdCpsb29wX2N0eC1cdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xuLVx0aW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuJiM0MztcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4mIzQzO1x0aW50IHplcm8gPSAwLCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0czY0IGF1Z19zaXplLCBzaXplO1xuIFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcbiBcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcbi1cdHZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0O1xuJiM0MztcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuJiM0MztcdGxvbmcgaXRlcnM7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDU3LDYzICYjNDM7NTM4LDE3IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuLVx0XHRhcmcgPSAodm9pZCAqKWFyZ3MtXHUwMDNlYXJnc1tpXTtcbi1cdFx0YXVnbWVudGVkID0gZmFsc2U7XG4tXHRcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuLVx0XHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXG4tXG4tXHRcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4tXHRcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuLVx0XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2MgMClcbi1cdFx0XHRcdGF1Z19zaXplID0gMDtcbi1cbi1cdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuLVx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuLVx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmICgoaW50KXNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbi1cdFx0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuLVx0XHRcdFx0cmV0dXJuIDE7XG4tXG4tXHRcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4tXHRcdFx0b3V0cHV0ICYjNDM7PSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICYjNDM7PSB3cml0dGVuO1xuLVx0XHRcdGRvX291dHB1dCA9IHRydWU7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgYXJnc19sb29wX2N0eCBsb29wX2N0eCA9IHtcbiYjNDM7XHRcdC5hcmdzID0gYXJncyxcbiYjNDM7XHRcdC5iZWF1dHlfbWFwID0gYmVhdXR5X21hcCxcbiYjNDM7XHRcdC5wYXlsb2FkX29mZnNldCA9IHBheWxvYWRfb2Zmc2V0LFxuJiM0MztcdFx0LnZhbHVlX3NpemUgPSB2YWx1ZV9zaXplLFxuJiM0MztcdFx0Lm91dHB1dCA9IFx1MDAyNm91dHB1dCxcbiYjNDM7XHRcdC5kb19vdXRwdXQgPSBcdTAwMjZkb19vdXRwdXRcbiYjNDM7XHR9O1xuJiM0MztcdGl0ZXJzID0gYnBmX2xvb3AoNiwgcHJvY2Vzc19hcmdfY2IsIFx1MDAyNmxvb3BfY3R4LCAwKTtcbiYjNDM7XHRpZiAoaXRlcnMgIT0gNilcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKCFkb19vdXRwdXQgfHwgKHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSAmIzQzOyBvdXRwdXQpIFx1MDAzZSBzaXplb2Yoc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyKSlcbiBcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChsb2NhdGVkIGluIGB0b29scy9wZXJmL2ApLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjlkYjJhYWUyOWE4ZTk3MGI3MDAwYjdhOGY0MDZlMzQwODNlOTIzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTM6MjY6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jCmluZGV4IDJhNmU2MTg2NGVlMDE1Li42ZDU1M2VkM2FjMjNjNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKQEAgLTQyOSwxNSAmIzQzOzQyOSw5NiBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZCkKIAlyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCAmYW1wO3BpZCkgIT0gTlVMTDsKIH0KIAomIzQzO3N0cnVjdCBhcmdzX2xvb3BfY3R4IHsKJiM0MzsJc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJnczsKJiM0MzsJdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwOwomIzQzOwl2b2lkICpwYXlsb2FkX29mZnNldDsKJiM0MzsJaW50IHZhbHVlX3NpemU7CiYjNDM7CXU2NCAqb3V0cHV0OwomIzQzOwlib29sICpkb19vdXRwdXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBwcm9jZXNzX2FyZ19jYih1NjQgaSwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZQomIzQzOwkgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCiYjNDM7CSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgomIzQzOwkgKgomIzQzOwkgKiBzdHJpbmc6IDEJCQkgICAgICAtJmd0OyBzaXplIG9mIHN0cmluZwomIzQzOwkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0CiYjNDM7CSAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLSZndDsgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqYXVnbWVudGVkX2FyZzsKJiM0MzsJc3RydWN0IGFyZ3NfbG9vcF9jdHggKmxvb3BfY3R4OwomIzQzOwlpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4OwomIzQzOwlib29sIGF1Z21lbnRlZDsKJiM0MzsJdm9pZCAqYXJnOwomIzQzOwomIzQzOwkvKiBCb3VuZHMgY2hlY2sgZm9yIHRoZSBiZWxvdyBtYXAgYWNjZXNzIHRvIGhlbHAgdGhlIHZlcmlmaWVyICovCiYjNDM7CWlmIChpICZsdDsgMCB8fCBpICZndDs9IDYpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbG9vcF9jdHggPSAoc3RydWN0IGFyZ3NfbG9vcF9jdHggKiljdHg7CiYjNDM7CWFyZyA9ICh2b2lkICopbG9vcF9jdHgtJmd0O2FyZ3MtJmd0O2FyZ3NbaV07CiYjNDM7CWF1Z21lbnRlZCA9IGZhbHNlOwomIzQzOwlzaXplID0gbG9vcF9jdHgtJmd0O2JlYXV0eV9tYXBbaV07CiYjNDM7CWF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi8KJiM0MzsJYXVnbWVudGVkX2FyZyA9IChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKWxvb3BfY3R4LSZndDtwYXlsb2FkX29mZnNldDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAwOyAvKiBjb250aW51ZSAqLwomIzQzOwomIzQzOwlpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqLwomIzQzOwkJYXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihhdWdtZW50ZWRfYXJnLSZndDt2YWx1ZSwgbG9vcF9jdHgtJmd0O3ZhbHVlX3NpemUsIGFyZyk7CiYjNDM7CQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmd0OyAwICZhbXA7JmFtcDsgc2l6ZSAmbHQ7PSBsb29wX2N0eC0mZ3Q7dmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KJiM0MzsJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKJiM0MzsJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmx0OyAwICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSAtNikgeyAvKiBidWZmZXIgKi8KJiM0MzsJCWluZGV4ID0gLShzaXplICYjNDM7IDEpOwomIzQzOwkJYmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSAmYW1wOz0gNyB0cmljay4KJiM0MzsJCWluZGV4ICZhbXA7PSA3OwkgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy4KJiM0MzsJCWF1Z19zaXplID0gbG9vcF9jdHgtJmd0O2FyZ3MtJmd0O2FyZ3NbaW5kZXhdOwomIzQzOwomIzQzOwkJaWYgKGF1Z19zaXplICZndDsgVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7CQkJYXVnX3NpemUgPSBUUkFDRV9BVUdfTUFYX0JVRjsKJiM0MzsKJiM0MzsJCWlmIChhdWdfc2l6ZSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoYXVnbWVudGVkX2FyZy0mZ3Q7dmFsdWUsIGF1Z19zaXplLCBhcmcpKQomIzQzOwkJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwomIzQzOwlpZiAoYXVnX3NpemUgJmd0OyBsb29wX2N0eC0mZ3Q7dmFsdWVfc2l6ZSkKJiM0MzsJCWF1Z19zaXplID0gbG9vcF9jdHgtJmd0O3ZhbHVlX3NpemU7CiYjNDM7CiYjNDM7CS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwomIzQzOwlpZiAoYXVnbWVudGVkKSB7CiYjNDM7CQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCiYjNDM7CQkJcmV0dXJuIDE7IC8qIGJyZWFrICovCiYjNDM7CiYjNDM7CQlhdWdtZW50ZWRfYXJnLSZndDtzaXplID0gYXVnX3NpemU7CiYjNDM7CQkqbG9vcF9jdHgtJmd0O291dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCWxvb3BfY3R4LSZndDtwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCSpsb29wX2N0eC0mZ3Q7ZG9fb3V0cHV0ID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncykKIHsKLQlib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7Ci0JaW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpOwomIzQzOwlib29sIGRvX291dHB1dCA9IGZhbHNlOwomIzQzOwlpbnQgemVybyA9IDAsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKIAl1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqLwotCXM2NCBhdWdfc2l6ZSwgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwOwogCXN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDsKLQl2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDsKJiM0MzsJdm9pZCAqcGF5bG9hZF9vZmZzZXQ7CiYjNDM7CWxvbmcgaXRlcnM7CiAKIAkvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi8KIAlpZiAoYXJncyA9PSBOVUxMKQpAQCAtNDU3LDYzICYjNDM7NTM4LDE3IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQkvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctJmd0O3VubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi8KLQkJaWYgKGF1Z19zaXplICZndDsgdmFsdWVfc2l6ZSkKLQkJCWF1Z19zaXplID0gdmFsdWVfc2l6ZTsKLQotCQkvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi8KLQkJaWYgKGF1Z21lbnRlZCkgewotCQkJaW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplOwotCi0JCQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCi0JCQkJcmV0dXJuIDE7Ci0KLQkJCSgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3NpemUgPSBhdWdfc2l6ZTsKLQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKLQkJCXBheWxvYWRfb2Zmc2V0ICYjNDM7PSB3cml0dGVuOwotCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKLQkJfQotCX0KJiM0MzsJc3RydWN0IGFyZ3NfbG9vcF9jdHggbG9vcF9jdHggPSB7CiYjNDM7CQkuYXJncyA9IGFyZ3MsCiYjNDM7CQkuYmVhdXR5X21hcCA9IGJlYXV0eV9tYXAsCiYjNDM7CQkucGF5bG9hZF9vZmZzZXQgPSBwYXlsb2FkX29mZnNldCwKJiM0MzsJCS52YWx1ZV9zaXplID0gdmFsdWVfc2l6ZSwKJiM0MzsJCS5vdXRwdXQgPSAmYW1wO291dHB1dCwKJiM0MzsJCS5kb19vdXRwdXQgPSAmYW1wO2RvX291dHB1dAomIzQzOwl9OwomIzQzOwlpdGVycyA9IGJwZl9sb29wKDYsIHByb2Nlc3NfYXJnX2NiLCAmYW1wO2xvb3BfY3R4LCAwKTsKJiM0MzsJaWYgKGl0ZXJzICE9IDYpCiYjNDM7CQlyZXR1cm4gMTsKIAogCWlmICghZG9fb3V0cHV0IHx8IChzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykgJiM0Mzsgb3V0cHV0KSAmZ3Q7IHNpemVvZihzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIpKQogCQlyZXR1cm4gMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MQoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDU4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBtb2RpZnlpbmcgYHRvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgbG9va3MgbGlrZSBCUEYgY29kZSwgYW5kIEJQRiBydW5zIGluIHRoZSBrZXJuZWwsIHNvIGNvdWxkIHRoaXMgYmUgYSBmdXp6aW5nIHRhcmdldCBmb3Igc3l6a2FsbGVyPyYjMzQ7IFdlJiMzOTtyZSByZXBsYWNpbmcgYSBgZm9yYCBsb29wIHdpdGggYGJwZl9sb29wYCBhbmQgYSBjYWxsYmFjaywgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24gd2l0aGluIEJQRiBwcm9ncmFtcyB1c2VkIGJ5IGBwZXJmYC4KCkJ1dCBob2xkIG9uLCB0aGlzIGNvZGUgaXNuJiMzOTt0ICpkaXJlY3RseSogcGFydCBvZiB0aGUga2VybmVsIGltYWdlLiBJdCYjMzk7cyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBCUEYgY29kZSB0aGF0IGdldHMgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBieSBgcGVyZmAuIFN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCwgYW5kIGl0IGNhbiBsb2FkIEJQRiBwcm9ncmFtcywgYnV0IGl0IGdlbmVyYXRlcyBpdHMgKm93biogQlBGIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCYjMzk7cyBzeXNjYWxsIGludGVyZmFjZS4gSXQgZG9lc24mIzM5O3QgdGFyZ2V0IGNvZGUgdGhhdCYjMzk7cyAqcGFydCogb2YgYSB1c2VyLXNwYWNlIHRvb2wgbGlrZSBgcGVyZmAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcuIFRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgaXMgdHlwaWNhbGx5IGEgc2lnbiBvZiB1c2VyLXNwYWNlIGNvZGUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBmdXp6IHRoZSBgcGVyZmAgdG9vbCBpdHNlbGY7IGl0IGZ1enplcyB0aGUga2VybmVsLiBTbywgdGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbGl2ZXMgaW4gYHRvb2xzL3BlcmYvYCBpcyBhIGtleSBpbmRpY2F0b3IuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBtb2RpZnkgdGhlIGtlcm5lbCBpbiBhIHdheSB0aGF0IHN5emthbGxlciB3b3VsZCBkaXJlY3RseSBmdXp6LiBUaGUgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGJ5IHRoZSBgcGVyZmAgdG9vbDsgaXQgaXMgbm90IGtlcm5lbCBjb2RlIGFzIHN1Y2guIEl0JiMzOTtzIGEgdG9vbC1zcGVjaWZpYyBCUEYgcHJvZ3JhbS4KCkkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGNvbmZpbmVkIHRvIHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIGFuZCBpdHMgQlBGIHByb2dyYW0sIG5vdCB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN5emthbGxlciB0YXJnZXRzLgoKSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUuIEkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGVyZSYjMzk7cyBub3RoaW5nIGVsc2UgdG8gY29uc2lkZXIuCgpJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGxvY2F0ZWQgaW4gYHRvb2xzL3BlcmYvYCkuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM0Ljk1MDUyODkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTczOTA4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGxvY2F0ZWQgaW4gYHRvb2xzL3BlcmYvYCkuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM0Ljk1MDUzODcxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0OTAzNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5ZGIyYWFlMjlhOGU5NzBiNzAwMGI3YThmNDA2ZTM0MDgzZTkyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMzoyNjozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXFxuaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjZkNTUzZWQzYWMyM2M1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5AQCAtNDI5LDE1ICs0MjksOTYgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXFxuIFxcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFxcdTAwMjZwaWQpICE9IE5VTEw7XFxuIH1cXG4gXFxuK3N0cnVjdCBhcmdzX2xvb3BfY3R4IHtcXG4rXFx0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcXG4rXFx0dW5zaWduZWQgaW50ICpiZWF1dHlfbWFwO1xcbitcXHR2b2lkICpwYXlsb2FkX29mZnNldDtcXG4rXFx0aW50IHZhbHVlX3NpemU7XFxuK1xcdHU2NCAqb3V0cHV0O1xcbitcXHRib29sICpkb19vdXRwdXQ7XFxuK307XFxuK1xcbitzdGF0aWMgbG9uZyBwcm9jZXNzX2FyZ19jYih1NjQgaSwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcXG4rXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xcbitcXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcXG4rXFx0ICpcXG4rXFx0ICogc3RyaW5nOiAxXFx0XFx0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcXG4rXFx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RydWN0XFxuK1xcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVxcdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqYXVnbWVudGVkX2FyZztcXG4rXFx0c3RydWN0IGFyZ3NfbG9vcF9jdHggKmxvb3BfY3R4O1xcbitcXHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xcbitcXHRib29sIGF1Z21lbnRlZDtcXG4rXFx0dm9pZCAqYXJnO1xcbitcXG4rXFx0LyogQm91bmRzIGNoZWNrIGZvciB0aGUgYmVsb3cgbWFwIGFjY2VzcyB0byBoZWxwIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAoaSBcXHUwMDNjIDAgfHwgaSBcXHUwMDNlPSA2KVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGxvb3BfY3R4ID0gKHN0cnVjdCBhcmdzX2xvb3BfY3R4ICopY3R4O1xcbitcXHRhcmcgPSAodm9pZCAqKWxvb3BfY3R4LVxcdTAwM2VhcmdzLVxcdTAwM2VhcmdzW2ldO1xcbitcXHRhdWdtZW50ZWQgPSBmYWxzZTtcXG4rXFx0c2l6ZSA9IGxvb3BfY3R4LVxcdTAwM2ViZWF1dHlfbWFwW2ldO1xcbitcXHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXFxuK1xcdGF1Z21lbnRlZF9hcmcgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilsb29wX2N0eC1cXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XFxuK1xcbitcXHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm4gMDsgLyogY29udGludWUgKi9cXG4rXFxuK1xcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuK1xcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoYXVnbWVudGVkX2FyZy1cXHUwMDNldmFsdWUsIGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplLCBhcmcpO1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gbG9vcF9jdHgtXFx1MDAzZXZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXFxuK1xcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4rXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbitcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuK1xcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuK1xcdFxcdGF1Z19zaXplID0gbG9vcF9jdHgtXFx1MDAzZWFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdO1xcbitcXG4rXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdFxcdFxcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuK1xcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVxcdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXFxuK1xcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplKVxcbitcXHRcXHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplO1xcbitcXG4rXFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXFxuK1xcdGlmIChhdWdtZW50ZWQpIHtcXG4rXFx0XFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XFxuK1xcbitcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDAgfHwgd3JpdHRlbiBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXFxuK1xcdFxcdFxcdHJldHVybiAxOyAvKiBicmVhayAqL1xcbitcXG4rXFx0XFx0YXVnbWVudGVkX2FyZy1cXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xcbitcXHRcXHQqbG9vcF9jdHgtXFx1MDAzZW91dHB1dCArPSB3cml0dGVuO1xcbitcXHRcXHRsb29wX2N0eC1cXHUwMDNlcGF5bG9hZF9vZmZzZXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0Kmxvb3BfY3R4LVxcdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xcbi1cXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XFxuK1xcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XFxuK1xcdGludCB6ZXJvID0gMCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xcbiBcXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcXG4gXFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xcbi1cXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcXG4rXFx0dm9pZCAqcGF5bG9hZF9vZmZzZXQ7XFxuK1xcdGxvbmcgaXRlcnM7XFxuIFxcbiBcXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cXG4gXFx0aWYgKGFyZ3MgPT0gTlVMTClcXG5AQCAtNDU3LDYzICs1MzgsMTcgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIFxcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xcbiBcXHRfX2J1aWx0aW5fbWVtY3B5KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2VhcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbi1cXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuLVxcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5Olxcbi1cXHQgKlxcbi1cXHQgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbi1cXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4tXFx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4tXFx0ICovXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgNjsgaSsrKSB7XFxuLVxcdFxcdGFyZyA9ICh2b2lkICopYXJncy1cXHUwMDNlYXJnc1tpXTtcXG4tXFx0XFx0YXVnbWVudGVkID0gZmFsc2U7XFxuLVxcdFxcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xcbi1cXHRcXHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXFxuLVxcbi1cXHRcXHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuLVxcdFxcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuLVxcdFxcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbi1cXHRcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuLVxcbi1cXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4tXFx0XFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxcbi1cXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cXG4tXFx0XFx0XFx0aW5kZXggPSAtKHNpemUgKyAxKTtcXG4tXFx0XFx0XFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcXHUwMDI2PSA3IHRyaWNrLlxcbi1cXHRcXHRcXHRpbmRleCBcXHUwMDI2PSA3O1xcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IGFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYgPyBUUkFDRV9BVUdfTUFYX0JVRiA6IGFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxcbi1cXHRcXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbi1cXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuLVxcbi1cXHRcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4tXFx0XFx0aWYgKGF1Z21lbnRlZCkge1xcbi1cXHRcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuLVxcdFxcdFxcdG91dHB1dCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRwYXlsb2FkX29mZnNldCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0c3RydWN0IGFyZ3NfbG9vcF9jdHggbG9vcF9jdHggPSB7XFxuK1xcdFxcdC5hcmdzID0gYXJncyxcXG4rXFx0XFx0LmJlYXV0eV9tYXAgPSBiZWF1dHlfbWFwLFxcbitcXHRcXHQucGF5bG9hZF9vZmZzZXQgPSBwYXlsb2FkX29mZnNldCxcXG4rXFx0XFx0LnZhbHVlX3NpemUgPSB2YWx1ZV9zaXplLFxcbitcXHRcXHQub3V0cHV0ID0gXFx1MDAyNm91dHB1dCxcXG4rXFx0XFx0LmRvX291dHB1dCA9IFxcdTAwMjZkb19vdXRwdXRcXG4rXFx0fTtcXG4rXFx0aXRlcnMgPSBicGZfbG9vcCg2LCBwcm9jZXNzX2FyZ19jYiwgXFx1MDAyNmxvb3BfY3R4LCAwKTtcXG4rXFx0aWYgKGl0ZXJzICE9IDYpXFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0aWYgKCFkb19vdXRwdXQgfHwgKHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSArIG91dHB1dCkgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM1LjUxNjQ3NDU1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDc5NTY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjlkYjJhYWUyOWE4ZTk3MGI3MDAwYjdhOGY0MDZlMzQwODNlOTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTM6MjY6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNmQ1NTNlZDNhYzIzYzUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgKzQyOSw5NiBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcbiBcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFx1MDAyNnBpZCkgIT0gTlVMTDtcbiB9XG4gXG4rc3RydWN0IGFyZ3NfbG9vcF9jdHgge1xuK1x0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcbitcdHVuc2lnbmVkIGludCAqYmVhdXR5X21hcDtcbitcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuK1x0aW50IHZhbHVlX3NpemU7XG4rXHR1NjQgKm91dHB1dDtcbitcdGJvb2wgKmRvX291dHB1dDtcbit9O1xuK1xuK3N0YXRpYyBsb25nIHByb2Nlc3NfYXJnX2NiKHU2NCBpLCB2b2lkICpjdHgpXG4re1xuK1x0LypcbitcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcbitcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbitcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxuK1x0ICpcbitcdCAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbitcdCAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3RcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcbitcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcbitcdCAqL1xuK1x0c3RydWN0IGF1Z21lbnRlZF9hcmcgKmF1Z21lbnRlZF9hcmc7XG4rXHRzdHJ1Y3QgYXJnc19sb29wX2N0eCAqbG9vcF9jdHg7XG4rXHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xuK1x0Ym9vbCBhdWdtZW50ZWQ7XG4rXHR2b2lkICphcmc7XG4rXG4rXHQvKiBCb3VuZHMgY2hlY2sgZm9yIHRoZSBiZWxvdyBtYXAgYWNjZXNzIHRvIGhlbHAgdGhlIHZlcmlmaWVyICovXG4rXHRpZiAoaSBcdTAwM2MgMCB8fCBpIFx1MDAzZT0gNilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRsb29wX2N0eCA9IChzdHJ1Y3QgYXJnc19sb29wX2N0eCAqKWN0eDtcbitcdGFyZyA9ICh2b2lkICopbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gbG9vcF9jdHgtXHUwMDNlYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcdGF1Z21lbnRlZF9hcmcgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilsb29wX2N0eC1cdTAwM2VwYXlsb2FkX29mZnNldDtcbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwOyAvKiBjb250aW51ZSAqL1xuK1xuK1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbitcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBsb29wX2N0eC1cdTAwM2V2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbitcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKGF1Z21lbnRlZF9hcmctXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4rXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuK1x0XHRpbmRleCA9IC0oc2l6ZSArIDEpO1xuK1x0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbitcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4rXHRcdGF1Z19zaXplID0gbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRilcbitcdFx0XHRhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGO1xuK1xuK1x0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoYXVnbWVudGVkX2FyZy1cdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXG4rXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuK1x0aWYgKGF1Z19zaXplIFx1MDAzZSBsb29wX2N0eC1cdTAwM2V2YWx1ZV9zaXplKVxuK1x0XHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemU7XG4rXG4rXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbitcdGlmIChhdWdtZW50ZWQpIHtcbitcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XG4rXG4rXHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHRcdFx0cmV0dXJuIDE7IC8qIGJyZWFrICovXG4rXG4rXHRcdGF1Z21lbnRlZF9hcmctXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuK1x0XHQqbG9vcF9jdHgtXHUwMDNlb3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdGxvb3BfY3R4LVx1MDAzZXBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4rXHRcdCpsb29wX2N0eC1cdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbitcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4rXHRpbnQgemVybyA9IDAsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJ3QgcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XG4gXHRzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQ7XG4tXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbitcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuK1x0bG9uZyBpdGVycztcbiBcbiBcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xuIFx0aWYgKGFyZ3MgPT0gTlVMTClcbkBAIC00NTcsNjMgKzUzOCwxNyBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSsrKSB7XG4tXHRcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuLVx0XHRhdWdtZW50ZWQgPSBmYWxzZTtcbi1cdFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4tXHRcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbi1cbi1cdFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbi1cdFx0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XG4tXHRcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuLVx0XHRcdFx0YXVnX3NpemUgPSAwO1xuLVxuLVx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4tXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4tXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuLVx0XHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbi1cdFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbi1cdFx0aWYgKGF1Z19zaXplIFx1MDAzZSB2YWx1ZV9zaXplKVxuLVx0XHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbi1cbi1cdFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4tXHRcdGlmIChhdWdtZW50ZWQpIHtcbi1cdFx0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuLVx0XHRcdFx0cmV0dXJuIDE7XG4tXG4tXHRcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4tXHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4tXHRcdFx0cGF5bG9hZF9vZmZzZXQgKz0gd3JpdHRlbjtcbi1cdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuLVx0XHR9XG4tXHR9XG4rXHRzdHJ1Y3QgYXJnc19sb29wX2N0eCBsb29wX2N0eCA9IHtcbitcdFx0LmFyZ3MgPSBhcmdzLFxuK1x0XHQuYmVhdXR5X21hcCA9IGJlYXV0eV9tYXAsXG4rXHRcdC5wYXlsb2FkX29mZnNldCA9IHBheWxvYWRfb2Zmc2V0LFxuK1x0XHQudmFsdWVfc2l6ZSA9IHZhbHVlX3NpemUsXG4rXHRcdC5vdXRwdXQgPSBcdTAwMjZvdXRwdXQsXG4rXHRcdC5kb19vdXRwdXQgPSBcdTAwMjZkb19vdXRwdXRcbitcdH07XG4rXHRpdGVycyA9IGJwZl9sb29wKDYsIHByb2Nlc3NfYXJnX2NiLCBcdTAwMjZsb29wX2N0eCwgMCk7XG4rXHRpZiAoaXRlcnMgIT0gNilcbitcdFx0cmV0dXJuIDE7XG4gXG4gXHRpZiAoIWRvX291dHB1dCB8fCAoc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpICsgb3V0cHV0KSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlcikpXG4gXHRcdHJldHVybiAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTM6MjY6MzUuNTE2NDc3MzA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDc5MjEwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGxvb2tzIGxpa2UgQlBGIGNvZGUsIGFuZCBCUEYgcnVucyBpbiB0aGUga2VybmVsLCBzbyBjb3VsZCB0aGlzIGJlIGEgZnV6emluZyB0YXJnZXQgZm9yIHN5emthbGxlcj9cIiBXZSdyZSByZXBsYWNpbmcgYSBgZm9yYCBsb29wIHdpdGggYGJwZl9sb29wYCBhbmQgYSBjYWxsYmFjaywgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24gd2l0aGluIEJQRiBwcm9ncmFtcyB1c2VkIGJ5IGBwZXJmYC5cblxuQnV0IGhvbGQgb24sIHRoaXMgY29kZSBpc24ndCAqZGlyZWN0bHkqIHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZS4gSXQncyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBCUEYgY29kZSB0aGF0IGdldHMgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBieSBgcGVyZmAuIFN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCwgYW5kIGl0IGNhbiBsb2FkIEJQRiBwcm9ncmFtcywgYnV0IGl0IGdlbmVyYXRlcyBpdHMgKm93biogQlBGIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCdzIHN5c2NhbGwgaW50ZXJmYWNlLiBJdCBkb2Vzbid0IHRhcmdldCBjb2RlIHRoYXQncyAqcGFydCogb2YgYSB1c2VyLXNwYWNlIHRvb2wgbGlrZSBgcGVyZmAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZy4gVGhlIGB0b29scy9gIGRpcmVjdG9yeSBpcyB0eXBpY2FsbHkgYSBzaWduIG9mIHVzZXItc3BhY2UgY29kZS4gU3l6a2FsbGVyIGRvZXNuJ3QgZnV6eiB0aGUgYHBlcmZgIHRvb2wgaXRzZWxmOyBpdCBmdXp6ZXMgdGhlIGtlcm5lbC4gU28sIHRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGxpdmVzIGluIGB0b29scy9wZXJmL2AgaXMgYSBrZXkgaW5kaWNhdG9yLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIG1vZGlmeSB0aGUga2VybmVsIGluIGEgd2F5IHRoYXQgc3l6a2FsbGVyIHdvdWxkIGRpcmVjdGx5IGZ1enouIFRoZSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQgYnkgdGhlIGBwZXJmYCB0b29sOyBpdCBpcyBub3Qga2VybmVsIGNvZGUgYXMgc3VjaC4gSXQncyBhIHRvb2wtc3BlY2lmaWMgQlBGIHByb2dyYW0uXG5cbkknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgY29uZmluZWQgdG8gdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgYW5kIGl0cyBCUEYgcHJvZ3JhbSwgbm90IHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3l6a2FsbGVyIHRhcmdldHMuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gbWFrZSBzdXJlLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGVyZSdzIG5vdGhpbmcgZWxzZSB0byBjb25zaWRlci5cblxuSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkxLCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTM6MjY6NDYuMTI0NDAxMzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChsb2NhdGVkIGluIGB0b29scy9wZXJmL2ApLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52zt5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 13:07:25 +0000 UTC FinishedAt: 2026-06-23 13:26:48 +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+CgkJCTx0ZD4yMDI2LzA2LzIzIDEzOjI2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMzoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGZiOWRiMmFhZTI5YThlOTcwYjcwMDBiN2E4ZjQwNmUzNDA4M2U5MjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxMzoyNjozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNmQ1NTNlZDNhYzIzYzUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgJiM0Mzs0MjksOTYgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXG4gXHRyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCBcdTAwMjZwaWQpICE9IE5VTEw7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgYXJnc19sb29wX2N0eCB7XG4mIzQzO1x0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcbiYjNDM7XHR1bnNpZ25lZCBpbnQgKmJlYXV0eV9tYXA7XG4mIzQzO1x0dm9pZCAqcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1x0aW50IHZhbHVlX3NpemU7XG4mIzQzO1x0dTY0ICpvdXRwdXQ7XG4mIzQzO1x0Ym9vbCAqZG9fb3V0cHV0O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGxvbmcgcHJvY2Vzc19hcmdfY2IodTY0IGksIHZvaWQgKmN0eClcbiYjNDM7e1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuJiM0MztcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbiYjNDM7XHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbiYjNDM7XHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4mIzQzO1x0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBhdWdtZW50ZWRfYXJnICphdWdtZW50ZWRfYXJnO1xuJiM0MztcdHN0cnVjdCBhcmdzX2xvb3BfY3R4ICpsb29wX2N0eDtcbiYjNDM7XHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xuJiM0MztcdGJvb2wgYXVnbWVudGVkO1xuJiM0MztcdHZvaWQgKmFyZztcbiYjNDM7XG4mIzQzO1x0LyogQm91bmRzIGNoZWNrIGZvciB0aGUgYmVsb3cgbWFwIGFjY2VzcyB0byBoZWxwIHRoZSB2ZXJpZmllciAqL1xuJiM0MztcdGlmIChpIFx1MDAzYyAwIHx8IGkgXHUwMDNlPSA2KVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1xuJiM0MztcdGxvb3BfY3R4ID0gKHN0cnVjdCBhcmdzX2xvb3BfY3R4ICopY3R4O1xuJiM0MztcdGFyZyA9ICh2b2lkICopbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2ldO1xuJiM0MztcdGF1Z21lbnRlZCA9IGZhbHNlO1xuJiM0MztcdHNpemUgPSBsb29wX2N0eC1cdTAwM2ViZWF1dHlfbWFwW2ldO1xuJiM0MztcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbiYjNDM7XHRhdWdtZW50ZWRfYXJnID0gKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopbG9vcF9jdHgtXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4mIzQzO1x0XHRyZXR1cm4gMDsgLyogY29udGludWUgKi9cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbiYjNDM7XHRcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoYXVnbWVudGVkX2FyZy1cdTAwM2V2YWx1ZSwgbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSwgYXJnKTtcbiYjNDM7XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4mIzQzO1x0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbiYjNDM7XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuJiM0MztcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuJiM0MztcdFx0aW5kZXggPSAtKHNpemUgJiM0MzsgMSk7XG4mIzQzO1x0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbiYjNDM7XHRcdGluZGV4IFx1MDAyNj0gNztcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxuJiM0MztcdFx0YXVnX3NpemUgPSBsb29wX2N0eC1cdTAwM2VhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuJiM0MztcbiYjNDM7XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXG4mIzQzO1x0XHRcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbiYjNDM7XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbiYjNDM7XHRpZiAoYXVnX3NpemUgXHUwMDNlIGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemUpXG4mIzQzO1x0XHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemU7XG4mIzQzO1xuJiM0MztcdC8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqL1xuJiM0MztcdGlmIChhdWdtZW50ZWQpIHtcbiYjNDM7XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuJiM0MztcdFx0XHRyZXR1cm4gMTsgLyogYnJlYWsgKi9cbiYjNDM7XG4mIzQzO1x0XHRhdWdtZW50ZWRfYXJnLVx1MDAzZXNpemUgPSBhdWdfc2l6ZTtcbiYjNDM7XHRcdCpsb29wX2N0eC1cdTAwM2VvdXRwdXQgJiM0Mzs9IHdyaXR0ZW47XG4mIzQzO1x0XHRsb29wX2N0eC1cdTAwM2VwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjtcbiYjNDM7XHRcdCpsb29wX2N0eC1cdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXG4ge1xuLVx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xuLVx0aW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xuJiM0MztcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4mIzQzO1x0aW50IHplcm8gPSAwLCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XG4gXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0czY0IGF1Z19zaXplLCBzaXplO1xuIFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcbiBcdHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDtcbi1cdHZvaWQgKmFyZywgKnBheWxvYWRfb2Zmc2V0O1xuJiM0MztcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuJiM0MztcdGxvbmcgaXRlcnM7XG4gXG4gXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cbiBcdGlmIChhcmdzID09IE5VTEwpXG5AQCAtNDU3LDYzICYjNDM7NTM4LDE3IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIFx0LyogY29weSB0aGUgc3lzX2VudGVyIGhlYWRlciwgd2hpY2ggaGFzIHRoZSBzeXNjYWxsX25yICovXG4gXHRfX2J1aWx0aW5fbWVtY3B5KFx1MDAyNnBheWxvYWQtXHUwMDNlYXJncywgYXJncywgc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpKTtcbiBcbi1cdC8qXG4tXHQgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXG4tXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcbi1cdCAqXG4tXHQgKiBzdHJpbmc6IDFcdFx0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RyaW5nXG4tXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XHQgICAgICAtXHUwMDNlIHNpemUgb2Ygc3RydWN0XG4tXHQgKiBidWZmZXI6IC0xICogKGluZGV4IG9mIHBhaXJlZCBsZW4pIC1cdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXG4tXHQgKi9cbi1cdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyA2OyBpJiM0MzsmIzQzOykge1xuLVx0XHRhcmcgPSAodm9pZCAqKWFyZ3MtXHUwMDNlYXJnc1tpXTtcbi1cdFx0YXVnbWVudGVkID0gZmFsc2U7XG4tXHRcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xuLVx0XHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXG4tXG4tXHRcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4tXHRcdFx0Y29udGludWU7XG4tXG4tXHRcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXG4tXHRcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpO1xuLVx0XHRcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2MgMClcbi1cdFx0XHRcdGF1Z19zaXplID0gMDtcbi1cbi1cdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKHNpemUgXHUwMDNlIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNjPSB2YWx1ZV9zaXplKSB7IC8qIHN0cnVjdCAqL1xuLVx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxuLVx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0fSBlbHNlIGlmICgoaW50KXNpemUgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cbi1cdFx0XHRpbmRleCA9IC0oc2l6ZSAmIzQzOyAxKTtcbi1cdFx0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbi1cdFx0XHRpbmRleCBcdTAwMjY9IDc7XHQgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy5cbi1cdFx0XHRhdWdfc2l6ZSA9IGFyZ3MtXHUwMDNlYXJnc1tpbmRleF0gXHUwMDNlIFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdO1xuLVxuLVx0XHRcdGlmIChhdWdfc2l6ZSBcdTAwM2UgMCkge1xuLVx0XHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxuLVx0XHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuLVx0XHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuLVx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIHZhbHVlX3NpemUpXG4tXHRcdFx0YXVnX3NpemUgPSB2YWx1ZV9zaXplO1xuLVxuLVx0XHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbi1cdFx0aWYgKGF1Z21lbnRlZCkge1xuLVx0XHRcdGludCB3cml0dGVuID0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKSAmIzQzOyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuLVx0XHRcdFx0cmV0dXJuIDE7XG4tXG4tXHRcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4tXHRcdFx0b3V0cHV0ICYjNDM7PSB3cml0dGVuO1xuLVx0XHRcdHBheWxvYWRfb2Zmc2V0ICYjNDM7PSB3cml0dGVuO1xuLVx0XHRcdGRvX291dHB1dCA9IHRydWU7XG4tXHRcdH1cbi1cdH1cbiYjNDM7XHRzdHJ1Y3QgYXJnc19sb29wX2N0eCBsb29wX2N0eCA9IHtcbiYjNDM7XHRcdC5hcmdzID0gYXJncyxcbiYjNDM7XHRcdC5iZWF1dHlfbWFwID0gYmVhdXR5X21hcCxcbiYjNDM7XHRcdC5wYXlsb2FkX29mZnNldCA9IHBheWxvYWRfb2Zmc2V0LFxuJiM0MztcdFx0LnZhbHVlX3NpemUgPSB2YWx1ZV9zaXplLFxuJiM0MztcdFx0Lm91dHB1dCA9IFx1MDAyNm91dHB1dCxcbiYjNDM7XHRcdC5kb19vdXRwdXQgPSBcdTAwMjZkb19vdXRwdXRcbiYjNDM7XHR9O1xuJiM0MztcdGl0ZXJzID0gYnBmX2xvb3AoNiwgcHJvY2Vzc19hcmdfY2IsIFx1MDAyNmxvb3BfY3R4LCAwKTtcbiYjNDM7XHRpZiAoaXRlcnMgIT0gNilcbiYjNDM7XHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKCFkb19vdXRwdXQgfHwgKHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSAmIzQzOyBvdXRwdXQpIFx1MDAzZSBzaXplb2Yoc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyKSlcbiBcdFx0cmV0dXJuIDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChsb2NhdGVkIGluIGB0b29scy9wZXJmL2ApLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIGZ1enplZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmYjlkYjJhYWUyOWE4ZTk3MGI3MDAwYjdhOGY0MDZlMzQwODNlOTIzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTM6MjY6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jCmluZGV4IDJhNmU2MTg2NGVlMDE1Li42ZDU1M2VkM2FjMjNjNSAxMDA2NDQKLS0tIGEvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmMKQEAgLTQyOSwxNSAmIzQzOzQyOSw5NiBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZCkKIAlyZXR1cm4gYnBmX21hcF9sb29rdXBfZWxlbShwaWRzLCAmYW1wO3BpZCkgIT0gTlVMTDsKIH0KIAomIzQzO3N0cnVjdCBhcmdzX2xvb3BfY3R4IHsKJiM0MzsJc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJnczsKJiM0MzsJdW5zaWduZWQgaW50ICpiZWF1dHlfbWFwOwomIzQzOwl2b2lkICpwYXlsb2FkX29mZnNldDsKJiM0MzsJaW50IHZhbHVlX3NpemU7CiYjNDM7CXU2NCAqb3V0cHV0OwomIzQzOwlib29sICpkb19vdXRwdXQ7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgbG9uZyBwcm9jZXNzX2FyZ19jYih1NjQgaSwgdm9pZCAqY3R4KQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZQomIzQzOwkgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nCiYjNDM7CSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgomIzQzOwkgKgomIzQzOwkgKiBzdHJpbmc6IDEJCQkgICAgICAtJmd0OyBzaXplIG9mIHN0cmluZwomIzQzOwkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0CiYjNDM7CSAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLSZndDsgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7CSAqLwomIzQzOwlzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqYXVnbWVudGVkX2FyZzsKJiM0MzsJc3RydWN0IGFyZ3NfbG9vcF9jdHggKmxvb3BfY3R4OwomIzQzOwlpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4OwomIzQzOwlib29sIGF1Z21lbnRlZDsKJiM0MzsJdm9pZCAqYXJnOwomIzQzOwomIzQzOwkvKiBCb3VuZHMgY2hlY2sgZm9yIHRoZSBiZWxvdyBtYXAgYWNjZXNzIHRvIGhlbHAgdGhlIHZlcmlmaWVyICovCiYjNDM7CWlmIChpICZsdDsgMCB8fCBpICZndDs9IDYpCiYjNDM7CQlyZXR1cm4gMTsKJiM0MzsKJiM0MzsJbG9vcF9jdHggPSAoc3RydWN0IGFyZ3NfbG9vcF9jdHggKiljdHg7CiYjNDM7CWFyZyA9ICh2b2lkICopbG9vcF9jdHgtJmd0O2FyZ3MtJmd0O2FyZ3NbaV07CiYjNDM7CWF1Z21lbnRlZCA9IGZhbHNlOwomIzQzOwlzaXplID0gbG9vcF9jdHgtJmd0O2JlYXV0eV9tYXBbaV07CiYjNDM7CWF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi8KJiM0MzsJYXVnbWVudGVkX2FyZyA9IChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKWxvb3BfY3R4LSZndDtwYXlsb2FkX29mZnNldDsKJiM0MzsKJiM0MzsJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKJiM0MzsJCXJldHVybiAwOyAvKiBjb250aW51ZSAqLwomIzQzOwomIzQzOwlpZiAoc2l6ZSA9PSAxKSB7IC8qIHN0cmluZyAqLwomIzQzOwkJYXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihhdWdtZW50ZWRfYXJnLSZndDt2YWx1ZSwgbG9vcF9jdHgtJmd0O3ZhbHVlX3NpemUsIGFyZyk7CiYjNDM7CQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmd0OyAwICZhbXA7JmFtcDsgc2l6ZSAmbHQ7PSBsb29wX2N0eC0mZ3Q7dmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KJiM0MzsJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKJiM0MzsJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwl9IGVsc2UgaWYgKHNpemUgJmx0OyAwICZhbXA7JmFtcDsgc2l6ZSAmZ3Q7PSAtNikgeyAvKiBidWZmZXIgKi8KJiM0MzsJCWluZGV4ID0gLShzaXplICYjNDM7IDEpOwomIzQzOwkJYmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSAmYW1wOz0gNyB0cmljay4KJiM0MzsJCWluZGV4ICZhbXA7PSA3OwkgICAgLy8gU2F0aXNmeSB0aGUgYm91bmRzIGNoZWNraW5nIHdpdGggdGhlIHZlcmlmaWVyIGluIHNvbWUga2VybmVscy4KJiM0MzsJCWF1Z19zaXplID0gbG9vcF9jdHgtJmd0O2FyZ3MtJmd0O2FyZ3NbaW5kZXhdOwomIzQzOwomIzQzOwkJaWYgKGF1Z19zaXplICZndDsgVFJBQ0VfQVVHX01BWF9CVUYpCiYjNDM7CQkJYXVnX3NpemUgPSBUUkFDRV9BVUdfTUFYX0JVRjsKJiM0MzsKJiM0MzsJCWlmIChhdWdfc2l6ZSAmZ3Q7IDApIHsKJiM0MzsJCQlpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoYXVnbWVudGVkX2FyZy0mZ3Q7dmFsdWUsIGF1Z19zaXplLCBhcmcpKQomIzQzOwkJCQlhdWdtZW50ZWQgPSB0cnVlOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy0mZ3Q7dW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqLwomIzQzOwlpZiAoYXVnX3NpemUgJmd0OyBsb29wX2N0eC0mZ3Q7dmFsdWVfc2l6ZSkKJiM0MzsJCWF1Z19zaXplID0gbG9vcF9jdHgtJmd0O3ZhbHVlX3NpemU7CiYjNDM7CiYjNDM7CS8qIHdyaXRlIGRhdGEgdG8gcGF5bG9hZCAqLwomIzQzOwlpZiAoYXVnbWVudGVkKSB7CiYjNDM7CQlpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgJiM0MzsgYXVnX3NpemU7CiYjNDM7CiYjNDM7CQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCiYjNDM7CQkJcmV0dXJuIDE7IC8qIGJyZWFrICovCiYjNDM7CiYjNDM7CQlhdWdtZW50ZWRfYXJnLSZndDtzaXplID0gYXVnX3NpemU7CiYjNDM7CQkqbG9vcF9jdHgtJmd0O291dHB1dCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCWxvb3BfY3R4LSZndDtwYXlsb2FkX29mZnNldCAmIzQzOz0gd3JpdHRlbjsKJiM0MzsJCSpsb29wX2N0eC0mZ3Q7ZG9fb3V0cHV0ID0gdHJ1ZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncykKIHsKLQlib29sIGF1Z21lbnRlZCwgZG9fb3V0cHV0ID0gZmFsc2U7Ci0JaW50IHplcm8gPSAwLCBpbmRleCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpOwomIzQzOwlib29sIGRvX291dHB1dCA9IGZhbHNlOwomIzQzOwlpbnQgemVybyA9IDAsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTsKIAl1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbiYjMzk7dCBwYXNzIHRoZSB2ZXJpZmllciAqLwotCXM2NCBhdWdfc2l6ZSwgc2l6ZTsKIAl1bnNpZ25lZCBpbnQgbnIsICpiZWF1dHlfbWFwOwogCXN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlciAqcGF5bG9hZDsKLQl2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDsKJiM0MzsJdm9pZCAqcGF5bG9hZF9vZmZzZXQ7CiYjNDM7CWxvbmcgaXRlcnM7CiAKIAkvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi8KIAlpZiAoYXJncyA9PSBOVUxMKQpAQCAtNDU3LDYzICYjNDM7NTM4LDE3IEBAIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKQogCS8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqLwogCV9fYnVpbHRpbl9tZW1jcHkoJmFtcDtwYXlsb2FkLSZndDthcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpOwogCi0JLyoKLQkgKiBEZXRlcm1pbmUgd2hhdCB0eXBlIG9mIGFyZ3VtZW50IGFuZCBob3cgbWFueSBieXRlcyB0byByZWFkIGZyb20gdXNlciBzcGFjZSwgdXNpbmcgdGhlCi0JICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZwotCSAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OgotCSAqCi0JICogc3RyaW5nOiAxCQkJICAgICAgLSZndDsgc2l6ZSBvZiBzdHJpbmcKLQkgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0CSAgICAgIC0mZ3Q7IHNpemUgb2Ygc3RydWN0Ci0JICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtJmd0OyB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRikKLQkgKi8KLQlmb3IgKGludCBpID0gMDsgaSAmbHQ7IDY7IGkmIzQzOyYjNDM7KSB7Ci0JCWFyZyA9ICh2b2lkICopYXJncy0mZ3Q7YXJnc1tpXTsKLQkJYXVnbWVudGVkID0gZmFsc2U7Ci0JCXNpemUgPSBiZWF1dHlfbWFwW2ldOwotCQlhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovCi0KLQkJaWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovCi0JCQlhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3ZhbHVlLCB2YWx1ZV9zaXplLCBhcmcpOwotCQkJLyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovCi0JCQlpZiAoYXVnX3NpemUgJmx0OyAwKQotCQkJCWF1Z19zaXplID0gMDsKLQotCQkJYXVnbWVudGVkID0gdHJ1ZTsKLQkJfSBlbHNlIGlmIChzaXplICZndDsgMCAmYW1wOyZhbXA7IHNpemUgJmx0Oz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi8KLQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgc2l6ZSwgYXJnKSkKLQkJCQlhdWdtZW50ZWQgPSB0cnVlOwotCQl9IGVsc2UgaWYgKChpbnQpc2l6ZSAmbHQ7IDAgJmFtcDsmYW1wOyBzaXplICZndDs9IC02KSB7IC8qIGJ1ZmZlciAqLwotCQkJaW5kZXggPSAtKHNpemUgJiM0MzsgMSk7Ci0JCQliYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlICZhbXA7PSA3IHRyaWNrLgotCQkJaW5kZXggJmFtcDs9IDc7CSAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLgotCQkJYXVnX3NpemUgPSBhcmdzLSZndDthcmdzW2luZGV4XSAmZ3Q7IFRSQUNFX0FVR19NQVhfQlVGID8gVFJBQ0VfQVVHX01BWF9CVUYgOiBhcmdzLSZndDthcmdzW2luZGV4XTsKLQotCQkJaWYgKGF1Z19zaXplICZndDsgMCkgewotCQkJCWlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLSZndDt2YWx1ZSwgYXVnX3NpemUsIGFyZykpCi0JCQkJCWF1Z21lbnRlZCA9IHRydWU7Ci0JCQl9Ci0JCX0KLQotCQkvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctJmd0O3VubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi8KLQkJaWYgKGF1Z19zaXplICZndDsgdmFsdWVfc2l6ZSkKLQkJCWF1Z19zaXplID0gdmFsdWVfc2l6ZTsKLQotCQkvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi8KLQkJaWYgKGF1Z21lbnRlZCkgewotCQkJaW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICYjNDM7IGF1Z19zaXplOwotCi0JCQlpZiAod3JpdHRlbiAmbHQ7IDAgfHwgd3JpdHRlbiAmZ3Q7IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpCi0JCQkJcmV0dXJuIDE7Ci0KLQkJCSgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktJmd0O3NpemUgPSBhdWdfc2l6ZTsKLQkJCW91dHB1dCAmIzQzOz0gd3JpdHRlbjsKLQkJCXBheWxvYWRfb2Zmc2V0ICYjNDM7PSB3cml0dGVuOwotCQkJZG9fb3V0cHV0ID0gdHJ1ZTsKLQkJfQotCX0KJiM0MzsJc3RydWN0IGFyZ3NfbG9vcF9jdHggbG9vcF9jdHggPSB7CiYjNDM7CQkuYXJncyA9IGFyZ3MsCiYjNDM7CQkuYmVhdXR5X21hcCA9IGJlYXV0eV9tYXAsCiYjNDM7CQkucGF5bG9hZF9vZmZzZXQgPSBwYXlsb2FkX29mZnNldCwKJiM0MzsJCS52YWx1ZV9zaXplID0gdmFsdWVfc2l6ZSwKJiM0MzsJCS5vdXRwdXQgPSAmYW1wO291dHB1dCwKJiM0MzsJCS5kb19vdXRwdXQgPSAmYW1wO2RvX291dHB1dAomIzQzOwl9OwomIzQzOwlpdGVycyA9IGJwZl9sb29wKDYsIHByb2Nlc3NfYXJnX2NiLCAmYW1wO2xvb3BfY3R4LCAwKTsKJiM0MzsJaWYgKGl0ZXJzICE9IDYpCiYjNDM7CQlyZXR1cm4gMTsKIAogCWlmICghZG9fb3V0cHV0IHx8IChzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykgJiM0Mzsgb3V0cHV0KSAmZ3Q7IHNpemVvZihzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIpKQogCQlyZXR1cm4gMTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MQoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDU4NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiB0aGUgUGF0Y2g6IFdvcnRoRnV6emluZz1mYWxzZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSBoYXZlIGEgcGF0Y2ggdGhhdCYjMzk7cyBtb2RpZnlpbmcgYHRvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoaXMgbG9va3MgbGlrZSBCUEYgY29kZSwgYW5kIEJQRiBydW5zIGluIHRoZSBrZXJuZWwsIHNvIGNvdWxkIHRoaXMgYmUgYSBmdXp6aW5nIHRhcmdldCBmb3Igc3l6a2FsbGVyPyYjMzQ7IFdlJiMzOTtyZSByZXBsYWNpbmcgYSBgZm9yYCBsb29wIHdpdGggYGJwZl9sb29wYCBhbmQgYSBjYWxsYmFjaywgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24gd2l0aGluIEJQRiBwcm9ncmFtcyB1c2VkIGJ5IGBwZXJmYC4KCkJ1dCBob2xkIG9uLCB0aGlzIGNvZGUgaXNuJiMzOTt0ICpkaXJlY3RseSogcGFydCBvZiB0aGUga2VybmVsIGltYWdlLiBJdCYjMzk7cyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBCUEYgY29kZSB0aGF0IGdldHMgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBieSBgcGVyZmAuIFN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCwgYW5kIGl0IGNhbiBsb2FkIEJQRiBwcm9ncmFtcywgYnV0IGl0IGdlbmVyYXRlcyBpdHMgKm93biogQlBGIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCYjMzk7cyBzeXNjYWxsIGludGVyZmFjZS4gSXQgZG9lc24mIzM5O3QgdGFyZ2V0IGNvZGUgdGhhdCYjMzk7cyAqcGFydCogb2YgYSB1c2VyLXNwYWNlIHRvb2wgbGlrZSBgcGVyZmAuCgpJIG5lZWQgdG8gY29uZmlybSB0aGlzIHVuZGVyc3RhbmRpbmcuIFRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgaXMgdHlwaWNhbGx5IGEgc2lnbiBvZiB1c2VyLXNwYWNlIGNvZGUuIFN5emthbGxlciBkb2VzbiYjMzk7dCBmdXp6IHRoZSBgcGVyZmAgdG9vbCBpdHNlbGY7IGl0IGZ1enplcyB0aGUga2VybmVsLiBTbywgdGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggbGl2ZXMgaW4gYHRvb2xzL3BlcmYvYCBpcyBhIGtleSBpbmRpY2F0b3IuCgpUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXNuJiMzOTt0KiBtb2RpZnkgdGhlIGtlcm5lbCBpbiBhIHdheSB0aGF0IHN5emthbGxlciB3b3VsZCBkaXJlY3RseSBmdXp6LiBUaGUgQlBGIHByb2dyYW0gaXMgbG9hZGVkIGJ5IHRoZSBgcGVyZmAgdG9vbDsgaXQgaXMgbm90IGtlcm5lbCBjb2RlIGFzIHN1Y2guIEl0JiMzOTtzIGEgdG9vbC1zcGVjaWZpYyBCUEYgcHJvZ3JhbS4KCkkmIzM5O20gY29uZmlkZW50IGluIHNheWluZyB0aGF0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGlzIGNvbmZpbmVkIHRvIHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIGFuZCBpdHMgQlBGIHByb2dyYW0sIG5vdCB0aGUgY29yZSBrZXJuZWwgY29tcG9uZW50cywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN5emthbGxlciB0YXJnZXRzLgoKSSBkb3VibGUtY2hlY2tlZCB0byBtYWtlIHN1cmUuIEkmIzM5O3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGVyZSYjMzk7cyBub3RoaW5nIGVsc2UgdG8gY29uc2lkZXIuCgpJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIHdpdGggYFdvcnRoRnV6emluZz1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTM6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGxvY2F0ZWQgaW4gYHRvb2xzL3BlcmYvYCkuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgZnV6emVkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM0Ljk1MDUyODkzOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTczOTA4ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBhIEJQRiBwcm9ncmFtIHVzZWQgYnkgdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgKGxvY2F0ZWQgaW4gYHRvb2xzL3BlcmYvYCkuIEl0IGRvZXMgbm90IG1vZGlmeSB0aGUgY29yZSBrZXJuZWwsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMgdGhhdCBhcmUgZnV6emVkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM0Ljk1MDUzODcxOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0OTAzNDE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZmI5ZGIyYWFlMjlhOGU5NzBiNzAwMGI3YThmNDA2ZTM0MDgzZTkyM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMzoyNjozMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXFxuaW5kZXggMmE2ZTYxODY0ZWUwMTUuLjZkNTUzZWQzYWMyM2M1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXFxuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcXG5AQCAtNDI5LDE1ICs0MjksOTYgQEAgc3RhdGljIGJvb2wgcGlkX2ZpbHRlcl9faGFzKHN0cnVjdCBwaWRzX2ZpbHRlcmVkICpwaWRzLCBwaWRfdCBwaWQpXFxuIFxcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFxcdTAwMjZwaWQpICE9IE5VTEw7XFxuIH1cXG4gXFxuK3N0cnVjdCBhcmdzX2xvb3BfY3R4IHtcXG4rXFx0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcXG4rXFx0dW5zaWduZWQgaW50ICpiZWF1dHlfbWFwO1xcbitcXHR2b2lkICpwYXlsb2FkX29mZnNldDtcXG4rXFx0aW50IHZhbHVlX3NpemU7XFxuK1xcdHU2NCAqb3V0cHV0O1xcbitcXHRib29sICpkb19vdXRwdXQ7XFxuK307XFxuK1xcbitzdGF0aWMgbG9uZyBwcm9jZXNzX2FyZ19jYih1NjQgaSwgdm9pZCAqY3R4KVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcXG4rXFx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xcbitcXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5IG1hcCwgYW5kIGhvdyBtYW55IGJ5dGVzIHdlIHJlYWQgZXZlbnR1YWxseTpcXG4rXFx0ICpcXG4rXFx0ICogc3RyaW5nOiAxXFx0XFx0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcXG4rXFx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFxcdCAgICAgIC1cXHUwMDNlIHNpemUgb2Ygc3RydWN0XFxuK1xcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVxcdTAwM2UgdmFsdWUgb2YgcGFpcmVkIGxlbiAobWF4aW11bTogVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqYXVnbWVudGVkX2FyZztcXG4rXFx0c3RydWN0IGFyZ3NfbG9vcF9jdHggKmxvb3BfY3R4O1xcbitcXHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xcbitcXHRib29sIGF1Z21lbnRlZDtcXG4rXFx0dm9pZCAqYXJnO1xcbitcXG4rXFx0LyogQm91bmRzIGNoZWNrIGZvciB0aGUgYmVsb3cgbWFwIGFjY2VzcyB0byBoZWxwIHRoZSB2ZXJpZmllciAqL1xcbitcXHRpZiAoaSBcXHUwMDNjIDAgfHwgaSBcXHUwMDNlPSA2KVxcbitcXHRcXHRyZXR1cm4gMTtcXG4rXFxuK1xcdGxvb3BfY3R4ID0gKHN0cnVjdCBhcmdzX2xvb3BfY3R4ICopY3R4O1xcbitcXHRhcmcgPSAodm9pZCAqKWxvb3BfY3R4LVxcdTAwM2VhcmdzLVxcdTAwM2VhcmdzW2ldO1xcbitcXHRhdWdtZW50ZWQgPSBmYWxzZTtcXG4rXFx0c2l6ZSA9IGxvb3BfY3R4LVxcdTAwM2ViZWF1dHlfbWFwW2ldO1xcbitcXHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXFxuK1xcdGF1Z21lbnRlZF9hcmcgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilsb29wX2N0eC1cXHUwMDNlcGF5bG9hZF9vZmZzZXQ7XFxuK1xcbitcXHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxcbitcXHRcXHRyZXR1cm4gMDsgLyogY29udGludWUgKi9cXG4rXFxuK1xcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuK1xcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoYXVnbWVudGVkX2FyZy1cXHUwMDNldmFsdWUsIGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplLCBhcmcpO1xcbitcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbitcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gbG9vcF9jdHgtXFx1MDAzZXZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXFxuK1xcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVxcdTAwM2V2YWx1ZSwgc2l6ZSwgYXJnKSlcXG4rXFx0XFx0XFx0YXVnbWVudGVkID0gdHJ1ZTtcXG4rXFx0fSBlbHNlIGlmIChzaXplIFxcdTAwM2MgMCBcXHUwMDI2XFx1MDAyNiBzaXplIFxcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xcbitcXHRcXHRpbmRleCA9IC0oc2l6ZSArIDEpO1xcbitcXHRcXHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFxcdTAwMjY9IDcgdHJpY2suXFxuK1xcdFxcdGluZGV4IFxcdTAwMjY9IDc7XFx0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXFxuK1xcdFxcdGF1Z19zaXplID0gbG9vcF9jdHgtXFx1MDAzZWFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdO1xcbitcXG4rXFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYpXFxuK1xcdFxcdFxcdGF1Z19zaXplID0gVFJBQ0VfQVVHX01BWF9CVUY7XFxuK1xcbitcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSAwKSB7XFxuK1xcdFxcdFxcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcihhdWdtZW50ZWRfYXJnLVxcdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXFxuK1xcdFxcdFxcdFxcdGF1Z21lbnRlZCA9IHRydWU7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVxcdTAwM2V1bm5hbWVkIHVuaW9uIHdpdGggdmFsdWUgZmllbGQpICovXFxuK1xcdGlmIChhdWdfc2l6ZSBcXHUwMDNlIGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplKVxcbitcXHRcXHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVxcdTAwM2V2YWx1ZV9zaXplO1xcbitcXG4rXFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXFxuK1xcdGlmIChhdWdtZW50ZWQpIHtcXG4rXFx0XFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XFxuK1xcbitcXHRcXHRpZiAod3JpdHRlbiBcXHUwMDNjIDAgfHwgd3JpdHRlbiBcXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXFxuK1xcdFxcdFxcdHJldHVybiAxOyAvKiBicmVhayAqL1xcbitcXG4rXFx0XFx0YXVnbWVudGVkX2FyZy1cXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xcbitcXHRcXHQqbG9vcF9jdHgtXFx1MDAzZW91dHB1dCArPSB3cml0dGVuO1xcbitcXHRcXHRsb29wX2N0eC1cXHUwMDNlcGF5bG9hZF9vZmZzZXQgKz0gd3JpdHRlbjtcXG4rXFx0XFx0Kmxvb3BfY3R4LVxcdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIHtcXG4tXFx0Ym9vbCBhdWdtZW50ZWQsIGRvX291dHB1dCA9IGZhbHNlO1xcbi1cXHRpbnQgemVybyA9IDAsIGluZGV4LCB2YWx1ZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSAtIG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSk7XFxuK1xcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XFxuK1xcdGludCB6ZXJvID0gMCwgdmFsdWVfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykgLSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpO1xcbiBcXHR1NjQgb3V0cHV0ID0gMDsgLyogaGFzIHRvIGJlIHU2NCwgb3RoZXJ3aXNlIGl0IHdvbid0IHBhc3MgdGhlIHZlcmlmaWVyICovXFxuLVxcdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcXG4gXFx0dW5zaWduZWQgaW50IG5yLCAqYmVhdXR5X21hcDtcXG4gXFx0c3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyICpwYXlsb2FkO1xcbi1cXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcXG4rXFx0dm9pZCAqcGF5bG9hZF9vZmZzZXQ7XFxuK1xcdGxvbmcgaXRlcnM7XFxuIFxcbiBcXHQvKiBmYWxsIGJhY2sgdG8gZG8gcHJlZGVmaW5lZCB0YWlsIGNhbGwgKi9cXG4gXFx0aWYgKGFyZ3MgPT0gTlVMTClcXG5AQCAtNDU3LDYzICs1MzgsMTcgQEAgc3RhdGljIGludCBhdWdtZW50X3N5c19lbnRlcih2b2lkICpjdHgsIHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MgKmFyZ3MpXFxuIFxcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xcbiBcXHRfX2J1aWx0aW5fbWVtY3B5KFxcdTAwMjZwYXlsb2FkLVxcdTAwM2VhcmdzLCBhcmdzLCBzaXplb2Yoc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncykpO1xcbiBcXG4tXFx0LypcXG4tXFx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxcbi1cXHQgKiB2YWx1ZSBpbiB0aGUgYmVhdXR5X21hcC4gVGhpcyBpcyB0aGUgcmVsYXRpb24gb2YgcGFyYW1ldGVyIHR5cGUgYW5kIGl0cyBjb3JyZXNwb25kaW5nXFxuLVxcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5Olxcbi1cXHQgKlxcbi1cXHQgKiBzdHJpbmc6IDFcXHRcXHRcXHQgICAgICAtXFx1MDAzZSBzaXplIG9mIHN0cmluZ1xcbi1cXHQgKiBzdHJ1Y3Q6IHNpemUgb2Ygc3RydWN0XFx0ICAgICAgLVxcdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcXG4tXFx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXFx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcXG4tXFx0ICovXFxuLVxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2MgNjsgaSsrKSB7XFxuLVxcdFxcdGFyZyA9ICh2b2lkICopYXJncy1cXHUwMDNlYXJnc1tpXTtcXG4tXFx0XFx0YXVnbWVudGVkID0gZmFsc2U7XFxuLVxcdFxcdHNpemUgPSBiZWF1dHlfbWFwW2ldO1xcbi1cXHRcXHRhdWdfc2l6ZSA9IHNpemU7IC8qIHNpemUgb2YgdGhlIGF1Z21lbnRlZCBkYXRhIHJlYWQgZnJvbSB1c2VyIHNwYWNlICovXFxuLVxcbi1cXHRcXHRpZiAoc2l6ZSA9PSAwIHx8IGFyZyA9PSBOVUxMKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdGlmIChzaXplID09IDEpIHsgLyogc3RyaW5nICovXFxuLVxcdFxcdFxcdGF1Z19zaXplID0gYnBmX3Byb2JlX3JlYWRfdXNlcl9zdHIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XFxuLVxcdFxcdFxcdC8qIG1pbmltdW0gb2YgMCB0byBwYXNzIHRoZSB2ZXJpZmllciAqL1xcbi1cXHRcXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzYyAwKVxcbi1cXHRcXHRcXHRcXHRhdWdfc2l6ZSA9IDA7XFxuLVxcbi1cXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHNpemUgXFx1MDAzZSAwIFxcdTAwMjZcXHUwMDI2IHNpemUgXFx1MDAzYz0gdmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cXG4tXFx0XFx0XFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXFx1MDAzZXZhbHVlLCBzaXplLCBhcmcpKVxcbi1cXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDNlPSAtNikgeyAvKiBidWZmZXIgKi9cXG4tXFx0XFx0XFx0aW5kZXggPSAtKHNpemUgKyAxKTtcXG4tXFx0XFx0XFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcXHUwMDI2PSA3IHRyaWNrLlxcbi1cXHRcXHRcXHRpbmRleCBcXHUwMDI2PSA3O1xcdCAgICAvLyBTYXRpc2Z5IHRoZSBib3VuZHMgY2hlY2tpbmcgd2l0aCB0aGUgdmVyaWZpZXIgaW4gc29tZSBrZXJuZWxzLlxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IGFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdIFxcdTAwM2UgVFJBQ0VfQVVHX01BWF9CVUYgPyBUUkFDRV9BVUdfTUFYX0JVRiA6IGFyZ3MtXFx1MDAzZWFyZ3NbaW5kZXhdO1xcbi1cXG4tXFx0XFx0XFx0aWYgKGF1Z19zaXplIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoKChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cXHUwMDNldmFsdWUsIGF1Z19zaXplLCBhcmcpKVxcbi1cXHRcXHRcXHRcXHRcXHRhdWdtZW50ZWQgPSB0cnVlO1xcbi1cXHRcXHRcXHR9XFxuLVxcdFxcdH1cXG4tXFxuLVxcdFxcdC8qIEF1Z21lbnRlZCBkYXRhIHNpemUgaXMgbGltaXRlZCB0byBzaXplb2YoYXVnbWVudGVkX2FyZy1cXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xcbi1cXHRcXHRpZiAoYXVnX3NpemUgXFx1MDAzZSB2YWx1ZV9zaXplKVxcbi1cXHRcXHRcXHRhdWdfc2l6ZSA9IHZhbHVlX3NpemU7XFxuLVxcbi1cXHRcXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cXG4tXFx0XFx0aWYgKGF1Z21lbnRlZCkge1xcbi1cXHRcXHRcXHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcXG4tXFxuLVxcdFxcdFxcdGlmICh3cml0dGVuIFxcdTAwM2MgMCB8fCB3cml0dGVuIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnKSlcXG4tXFx0XFx0XFx0XFx0cmV0dXJuIDE7XFxuLVxcbi1cXHRcXHRcXHQoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVxcdTAwM2VzaXplID0gYXVnX3NpemU7XFxuLVxcdFxcdFxcdG91dHB1dCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRwYXlsb2FkX29mZnNldCArPSB3cml0dGVuO1xcbi1cXHRcXHRcXHRkb19vdXRwdXQgPSB0cnVlO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0c3RydWN0IGFyZ3NfbG9vcF9jdHggbG9vcF9jdHggPSB7XFxuK1xcdFxcdC5hcmdzID0gYXJncyxcXG4rXFx0XFx0LmJlYXV0eV9tYXAgPSBiZWF1dHlfbWFwLFxcbitcXHRcXHQucGF5bG9hZF9vZmZzZXQgPSBwYXlsb2FkX29mZnNldCxcXG4rXFx0XFx0LnZhbHVlX3NpemUgPSB2YWx1ZV9zaXplLFxcbitcXHRcXHQub3V0cHV0ID0gXFx1MDAyNm91dHB1dCxcXG4rXFx0XFx0LmRvX291dHB1dCA9IFxcdTAwMjZkb19vdXRwdXRcXG4rXFx0fTtcXG4rXFx0aXRlcnMgPSBicGZfbG9vcCg2LCBwcm9jZXNzX2FyZ19jYiwgXFx1MDAyNmxvb3BfY3R4LCAwKTtcXG4rXFx0aWYgKGl0ZXJzICE9IDYpXFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4gXFx0aWYgKCFkb19vdXRwdXQgfHwgKHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSArIG91dHB1dCkgXFx1MDAzZSBzaXplb2Yoc3RydWN0IGJlYXV0eV9wYXlsb2FkX2VudGVyKSlcXG4gXFx0XFx0cmV0dXJuIDE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEzOjI2OjM1LjUxNjQ3NDU1NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDc5NTY3NDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmYjlkYjJhYWUyOWE4ZTk3MGI3MDAwYjdhOGY0MDZlMzQwODNlOTIzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMjMgMTM6MjY6MzMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuYyBiL3Rvb2xzL3BlcmYvdXRpbC9icGZfc2tlbC9hdWdtZW50ZWRfcmF3X3N5c2NhbGxzLmJwZi5jXG5pbmRleCAyYTZlNjE4NjRlZTAxNS4uNmQ1NTNlZDNhYzIzYzUgMTAwNjQ0XG4tLS0gYS90b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY1xuKysrIGIvdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNcbkBAIC00MjksMTUgKzQyOSw5NiBAQCBzdGF0aWMgYm9vbCBwaWRfZmlsdGVyX19oYXMoc3RydWN0IHBpZHNfZmlsdGVyZWQgKnBpZHMsIHBpZF90IHBpZClcbiBcdHJldHVybiBicGZfbWFwX2xvb2t1cF9lbGVtKHBpZHMsIFx1MDAyNnBpZCkgIT0gTlVMTDtcbiB9XG4gXG4rc3RydWN0IGFyZ3NfbG9vcF9jdHgge1xuK1x0c3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncztcbitcdHVuc2lnbmVkIGludCAqYmVhdXR5X21hcDtcbitcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuK1x0aW50IHZhbHVlX3NpemU7XG4rXHR1NjQgKm91dHB1dDtcbitcdGJvb2wgKmRvX291dHB1dDtcbit9O1xuK1xuK3N0YXRpYyBsb25nIHByb2Nlc3NfYXJnX2NiKHU2NCBpLCB2b2lkICpjdHgpXG4re1xuK1x0LypcbitcdCAqIERldGVybWluZSB3aGF0IHR5cGUgb2YgYXJndW1lbnQgYW5kIGhvdyBtYW55IGJ5dGVzIHRvIHJlYWQgZnJvbSB1c2VyIHNwYWNlLCB1c2luZyB0aGVcbitcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHlfbWFwLiBUaGlzIGlzIHRoZSByZWxhdGlvbiBvZiBwYXJhbWV0ZXIgdHlwZSBhbmQgaXRzIGNvcnJlc3BvbmRpbmdcbitcdCAqIHZhbHVlIGluIHRoZSBiZWF1dHkgbWFwLCBhbmQgaG93IG1hbnkgYnl0ZXMgd2UgcmVhZCBldmVudHVhbGx5OlxuK1x0ICpcbitcdCAqIHN0cmluZzogMVx0XHRcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJpbmdcbitcdCAqIHN0cnVjdDogc2l6ZSBvZiBzdHJ1Y3RcdCAgICAgIC1cdTAwM2Ugc2l6ZSBvZiBzdHJ1Y3RcbitcdCAqIGJ1ZmZlcjogLTEgKiAoaW5kZXggb2YgcGFpcmVkIGxlbikgLVx1MDAzZSB2YWx1ZSBvZiBwYWlyZWQgbGVuIChtYXhpbXVtOiBUUkFDRV9BVUdfTUFYX0JVRilcbitcdCAqL1xuK1x0c3RydWN0IGF1Z21lbnRlZF9hcmcgKmF1Z21lbnRlZF9hcmc7XG4rXHRzdHJ1Y3QgYXJnc19sb29wX2N0eCAqbG9vcF9jdHg7XG4rXHRpbnQgYXVnX3NpemUsIHNpemUsIGluZGV4O1xuK1x0Ym9vbCBhdWdtZW50ZWQ7XG4rXHR2b2lkICphcmc7XG4rXG4rXHQvKiBCb3VuZHMgY2hlY2sgZm9yIHRoZSBiZWxvdyBtYXAgYWNjZXNzIHRvIGhlbHAgdGhlIHZlcmlmaWVyICovXG4rXHRpZiAoaSBcdTAwM2MgMCB8fCBpIFx1MDAzZT0gNilcbitcdFx0cmV0dXJuIDE7XG4rXG4rXHRsb29wX2N0eCA9IChzdHJ1Y3QgYXJnc19sb29wX2N0eCAqKWN0eDtcbitcdGFyZyA9ICh2b2lkICopbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2ldO1xuK1x0YXVnbWVudGVkID0gZmFsc2U7XG4rXHRzaXplID0gbG9vcF9jdHgtXHUwMDNlYmVhdXR5X21hcFtpXTtcbitcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbitcdGF1Z21lbnRlZF9hcmcgPSAoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilsb29wX2N0eC1cdTAwM2VwYXlsb2FkX29mZnNldDtcbitcbitcdGlmIChzaXplID09IDAgfHwgYXJnID09IE5VTEwpXG4rXHRcdHJldHVybiAwOyAvKiBjb250aW51ZSAqL1xuK1xuK1x0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbitcdFx0YXVnX3NpemUgPSBicGZfcHJvYmVfcmVhZF91c2VyX3N0cihhdWdtZW50ZWRfYXJnLVx1MDAzZXZhbHVlLCBsb29wX2N0eC1cdTAwM2V2YWx1ZV9zaXplLCBhcmcpO1xuK1x0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0fSBlbHNlIGlmIChzaXplIFx1MDAzZSAwIFx1MDAyNlx1MDAyNiBzaXplIFx1MDAzYz0gbG9vcF9jdHgtXHUwMDNldmFsdWVfc2l6ZSkgeyAvKiBzdHJ1Y3QgKi9cbitcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKGF1Z21lbnRlZF9hcmctXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4rXHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbitcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuK1x0XHRpbmRleCA9IC0oc2l6ZSArIDEpO1xuK1x0XHRiYXJyaWVyX3ZhcihpbmRleCk7IC8vIFByZXZlbnQgY2xhbmcgKG5vdGljZWQgd2l0aCB2MTgpIGZyb20gcmVtb3ZpbmcgdGhlIFx1MDAyNj0gNyB0cmljay5cbitcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4rXHRcdGF1Z19zaXplID0gbG9vcF9jdHgtXHUwMDNlYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbitcbitcdFx0aWYgKGF1Z19zaXplIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRilcbitcdFx0XHRhdWdfc2l6ZSA9IFRSQUNFX0FVR19NQVhfQlVGO1xuK1xuK1x0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbitcdFx0XHRpZiAoIWJwZl9wcm9iZV9yZWFkX3VzZXIoYXVnbWVudGVkX2FyZy1cdTAwM2V2YWx1ZSwgYXVnX3NpemUsIGFyZykpXG4rXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBBdWdtZW50ZWQgZGF0YSBzaXplIGlzIGxpbWl0ZWQgdG8gc2l6ZW9mKGF1Z21lbnRlZF9hcmctXHUwMDNldW5uYW1lZCB1bmlvbiB3aXRoIHZhbHVlIGZpZWxkKSAqL1xuK1x0aWYgKGF1Z19zaXplIFx1MDAzZSBsb29wX2N0eC1cdTAwM2V2YWx1ZV9zaXplKVxuK1x0XHRhdWdfc2l6ZSA9IGxvb3BfY3R4LVx1MDAzZXZhbHVlX3NpemU7XG4rXG4rXHQvKiB3cml0ZSBkYXRhIHRvIHBheWxvYWQgKi9cbitcdGlmIChhdWdtZW50ZWQpIHtcbitcdFx0aW50IHdyaXR0ZW4gPSBvZmZzZXRvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZywgdmFsdWUpICsgYXVnX3NpemU7XG4rXG4rXHRcdGlmICh3cml0dGVuIFx1MDAzYyAwIHx8IHdyaXR0ZW4gXHUwMDNlIHNpemVvZihzdHJ1Y3QgYXVnbWVudGVkX2FyZykpXG4rXHRcdFx0cmV0dXJuIDE7IC8qIGJyZWFrICovXG4rXG4rXHRcdGF1Z21lbnRlZF9hcmctXHUwMDNlc2l6ZSA9IGF1Z19zaXplO1xuK1x0XHQqbG9vcF9jdHgtXHUwMDNlb3V0cHV0ICs9IHdyaXR0ZW47XG4rXHRcdGxvb3BfY3R4LVx1MDAzZXBheWxvYWRfb2Zmc2V0ICs9IHdyaXR0ZW47XG4rXHRcdCpsb29wX2N0eC1cdTAwM2Vkb19vdXRwdXQgPSB0cnVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYXVnbWVudF9zeXNfZW50ZXIodm9pZCAqY3R4LCBzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzICphcmdzKVxuIHtcbi1cdGJvb2wgYXVnbWVudGVkLCBkb19vdXRwdXQgPSBmYWxzZTtcbi1cdGludCB6ZXJvID0gMCwgaW5kZXgsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbitcdGJvb2wgZG9fb3V0cHV0ID0gZmFsc2U7XG4rXHRpbnQgemVybyA9IDAsIHZhbHVlX3NpemUgPSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpIC0gb2Zmc2V0b2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcsIHZhbHVlKTtcbiBcdHU2NCBvdXRwdXQgPSAwOyAvKiBoYXMgdG8gYmUgdTY0LCBvdGhlcndpc2UgaXQgd29uJ3QgcGFzcyB0aGUgdmVyaWZpZXIgKi9cbi1cdHM2NCBhdWdfc2l6ZSwgc2l6ZTtcbiBcdHVuc2lnbmVkIGludCBuciwgKmJlYXV0eV9tYXA7XG4gXHRzdHJ1Y3QgYmVhdXR5X3BheWxvYWRfZW50ZXIgKnBheWxvYWQ7XG4tXHR2b2lkICphcmcsICpwYXlsb2FkX29mZnNldDtcbitcdHZvaWQgKnBheWxvYWRfb2Zmc2V0O1xuK1x0bG9uZyBpdGVycztcbiBcbiBcdC8qIGZhbGwgYmFjayB0byBkbyBwcmVkZWZpbmVkIHRhaWwgY2FsbCAqL1xuIFx0aWYgKGFyZ3MgPT0gTlVMTClcbkBAIC00NTcsNjMgKzUzOCwxNyBAQCBzdGF0aWMgaW50IGF1Z21lbnRfc3lzX2VudGVyKHZvaWQgKmN0eCwgc3RydWN0IHN5c2NhbGxfZW50ZXJfYXJncyAqYXJncylcbiBcdC8qIGNvcHkgdGhlIHN5c19lbnRlciBoZWFkZXIsIHdoaWNoIGhhcyB0aGUgc3lzY2FsbF9uciAqL1xuIFx0X19idWlsdGluX21lbWNweShcdTAwMjZwYXlsb2FkLVx1MDAzZWFyZ3MsIGFyZ3MsIHNpemVvZihzdHJ1Y3Qgc3lzY2FsbF9lbnRlcl9hcmdzKSk7XG4gXG4tXHQvKlxuLVx0ICogRGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiBhcmd1bWVudCBhbmQgaG93IG1hbnkgYnl0ZXMgdG8gcmVhZCBmcm9tIHVzZXIgc3BhY2UsIHVzaW5nIHRoZVxuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eV9tYXAuIFRoaXMgaXMgdGhlIHJlbGF0aW9uIG9mIHBhcmFtZXRlciB0eXBlIGFuZCBpdHMgY29ycmVzcG9uZGluZ1xuLVx0ICogdmFsdWUgaW4gdGhlIGJlYXV0eSBtYXAsIGFuZCBob3cgbWFueSBieXRlcyB3ZSByZWFkIGV2ZW50dWFsbHk6XG4tXHQgKlxuLVx0ICogc3RyaW5nOiAxXHRcdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cmluZ1xuLVx0ICogc3RydWN0OiBzaXplIG9mIHN0cnVjdFx0ICAgICAgLVx1MDAzZSBzaXplIG9mIHN0cnVjdFxuLVx0ICogYnVmZmVyOiAtMSAqIChpbmRleCBvZiBwYWlyZWQgbGVuKSAtXHUwMDNlIHZhbHVlIG9mIHBhaXJlZCBsZW4gKG1heGltdW06IFRSQUNFX0FVR19NQVhfQlVGKVxuLVx0ICovXG4tXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2MgNjsgaSsrKSB7XG4tXHRcdGFyZyA9ICh2b2lkICopYXJncy1cdTAwM2VhcmdzW2ldO1xuLVx0XHRhdWdtZW50ZWQgPSBmYWxzZTtcbi1cdFx0c2l6ZSA9IGJlYXV0eV9tYXBbaV07XG4tXHRcdGF1Z19zaXplID0gc2l6ZTsgLyogc2l6ZSBvZiB0aGUgYXVnbWVudGVkIGRhdGEgcmVhZCBmcm9tIHVzZXIgc3BhY2UgKi9cbi1cbi1cdFx0aWYgKHNpemUgPT0gMCB8fCBhcmcgPT0gTlVMTClcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0aWYgKHNpemUgPT0gMSkgeyAvKiBzdHJpbmcgKi9cbi1cdFx0XHRhdWdfc2l6ZSA9IGJwZl9wcm9iZV9yZWFkX3VzZXJfc3RyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHZhbHVlX3NpemUsIGFyZyk7XG4tXHRcdFx0LyogbWluaW11bSBvZiAwIHRvIHBhc3MgdGhlIHZlcmlmaWVyICovXG4tXHRcdFx0aWYgKGF1Z19zaXplIFx1MDAzYyAwKVxuLVx0XHRcdFx0YXVnX3NpemUgPSAwO1xuLVxuLVx0XHRcdGF1Z21lbnRlZCA9IHRydWU7XG4tXHRcdH0gZWxzZSBpZiAoc2l6ZSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2M9IHZhbHVlX3NpemUpIHsgLyogc3RydWN0ICovXG4tXHRcdFx0aWYgKCFicGZfcHJvYmVfcmVhZF91c2VyKCgoc3RydWN0IGF1Z21lbnRlZF9hcmcgKilwYXlsb2FkX29mZnNldCktXHUwMDNldmFsdWUsIHNpemUsIGFyZykpXG4tXHRcdFx0XHRhdWdtZW50ZWQgPSB0cnVlO1xuLVx0XHR9IGVsc2UgaWYgKChpbnQpc2l6ZSBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwM2U9IC02KSB7IC8qIGJ1ZmZlciAqL1xuLVx0XHRcdGluZGV4ID0gLShzaXplICsgMSk7XG4tXHRcdFx0YmFycmllcl92YXIoaW5kZXgpOyAvLyBQcmV2ZW50IGNsYW5nIChub3RpY2VkIHdpdGggdjE4KSBmcm9tIHJlbW92aW5nIHRoZSBcdTAwMjY9IDcgdHJpY2suXG4tXHRcdFx0aW5kZXggXHUwMDI2PSA3O1x0ICAgIC8vIFNhdGlzZnkgdGhlIGJvdW5kcyBjaGVja2luZyB3aXRoIHRoZSB2ZXJpZmllciBpbiBzb21lIGtlcm5lbHMuXG4tXHRcdFx0YXVnX3NpemUgPSBhcmdzLVx1MDAzZWFyZ3NbaW5kZXhdIFx1MDAzZSBUUkFDRV9BVUdfTUFYX0JVRiA/IFRSQUNFX0FVR19NQVhfQlVGIDogYXJncy1cdTAwM2VhcmdzW2luZGV4XTtcbi1cbi1cdFx0XHRpZiAoYXVnX3NpemUgXHUwMDNlIDApIHtcbi1cdFx0XHRcdGlmICghYnBmX3Byb2JlX3JlYWRfdXNlcigoKHN0cnVjdCBhdWdtZW50ZWRfYXJnICopcGF5bG9hZF9vZmZzZXQpLVx1MDAzZXZhbHVlLCBhdWdfc2l6ZSwgYXJnKSlcbi1cdFx0XHRcdFx0YXVnbWVudGVkID0gdHJ1ZTtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbi1cdFx0LyogQXVnbWVudGVkIGRhdGEgc2l6ZSBpcyBsaW1pdGVkIHRvIHNpemVvZihhdWdtZW50ZWRfYXJnLVx1MDAzZXVubmFtZWQgdW5pb24gd2l0aCB2YWx1ZSBmaWVsZCkgKi9cbi1cdFx0aWYgKGF1Z19zaXplIFx1MDAzZSB2YWx1ZV9zaXplKVxuLVx0XHRcdGF1Z19zaXplID0gdmFsdWVfc2l6ZTtcbi1cbi1cdFx0Lyogd3JpdGUgZGF0YSB0byBwYXlsb2FkICovXG4tXHRcdGlmIChhdWdtZW50ZWQpIHtcbi1cdFx0XHRpbnQgd3JpdHRlbiA9IG9mZnNldG9mKHN0cnVjdCBhdWdtZW50ZWRfYXJnLCB2YWx1ZSkgKyBhdWdfc2l6ZTtcbi1cbi1cdFx0XHRpZiAod3JpdHRlbiBcdTAwM2MgMCB8fCB3cml0dGVuIFx1MDAzZSBzaXplb2Yoc3RydWN0IGF1Z21lbnRlZF9hcmcpKVxuLVx0XHRcdFx0cmV0dXJuIDE7XG4tXG4tXHRcdFx0KChzdHJ1Y3QgYXVnbWVudGVkX2FyZyAqKXBheWxvYWRfb2Zmc2V0KS1cdTAwM2VzaXplID0gYXVnX3NpemU7XG4tXHRcdFx0b3V0cHV0ICs9IHdyaXR0ZW47XG4tXHRcdFx0cGF5bG9hZF9vZmZzZXQgKz0gd3JpdHRlbjtcbi1cdFx0XHRkb19vdXRwdXQgPSB0cnVlO1xuLVx0XHR9XG4tXHR9XG4rXHRzdHJ1Y3QgYXJnc19sb29wX2N0eCBsb29wX2N0eCA9IHtcbitcdFx0LmFyZ3MgPSBhcmdzLFxuK1x0XHQuYmVhdXR5X21hcCA9IGJlYXV0eV9tYXAsXG4rXHRcdC5wYXlsb2FkX29mZnNldCA9IHBheWxvYWRfb2Zmc2V0LFxuK1x0XHQudmFsdWVfc2l6ZSA9IHZhbHVlX3NpemUsXG4rXHRcdC5vdXRwdXQgPSBcdTAwMjZvdXRwdXQsXG4rXHRcdC5kb19vdXRwdXQgPSBcdTAwMjZkb19vdXRwdXRcbitcdH07XG4rXHRpdGVycyA9IGJwZl9sb29wKDYsIHByb2Nlc3NfYXJnX2NiLCBcdTAwMjZsb29wX2N0eCwgMCk7XG4rXHRpZiAoaXRlcnMgIT0gNilcbitcdFx0cmV0dXJuIDE7XG4gXG4gXHRpZiAoIWRvX291dHB1dCB8fCAoc2l6ZW9mKHN0cnVjdCBzeXNjYWxsX2VudGVyX2FyZ3MpICsgb3V0cHV0KSBcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBiZWF1dHlfcGF5bG9hZF9lbnRlcikpXG4gXHRcdHJldHVybiAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTM6MjY6MzUuNTE2NDc3MzA1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA2MDc5MjEwMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBXb3J0aEZ1enppbmc9ZmFsc2UqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlIGhhdmUgYSBwYXRjaCB0aGF0J3MgbW9kaWZ5aW5nIGB0b29scy9wZXJmL3V0aWwvYnBmX3NrZWwvYXVnbWVudGVkX3Jhd19zeXNjYWxscy5icGYuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcywgXCJUaGlzIGxvb2tzIGxpa2UgQlBGIGNvZGUsIGFuZCBCUEYgcnVucyBpbiB0aGUga2VybmVsLCBzbyBjb3VsZCB0aGlzIGJlIGEgZnV6emluZyB0YXJnZXQgZm9yIHN5emthbGxlcj9cIiBXZSdyZSByZXBsYWNpbmcgYSBgZm9yYCBsb29wIHdpdGggYGJwZl9sb29wYCBhbmQgYSBjYWxsYmFjaywgYSBzdGFuZGFyZCBvcHRpbWl6YXRpb24gd2l0aGluIEJQRiBwcm9ncmFtcyB1c2VkIGJ5IGBwZXJmYC5cblxuQnV0IGhvbGQgb24sIHRoaXMgY29kZSBpc24ndCAqZGlyZWN0bHkqIHBhcnQgb2YgdGhlIGtlcm5lbCBpbWFnZS4gSXQncyB1c2VyLXNwYWNlIGNvZGUgd2l0aGluIHRoZSBgcGVyZmAgdG9vbCwgZXZlbiB0aG91Z2ggaXQgKmlzKiBCUEYgY29kZSB0aGF0IGdldHMgbG9hZGVkIGludG8gdGhlIGtlcm5lbCBieSBgcGVyZmAuIFN5emthbGxlciBmdXp6ZXMgdGhlIGtlcm5lbCwgYW5kIGl0IGNhbiBsb2FkIEJQRiBwcm9ncmFtcywgYnV0IGl0IGdlbmVyYXRlcyBpdHMgKm93biogQlBGIHByb2dyYW1zIHRvIHRlc3QgdGhlIGtlcm5lbCdzIHN5c2NhbGwgaW50ZXJmYWNlLiBJdCBkb2Vzbid0IHRhcmdldCBjb2RlIHRoYXQncyAqcGFydCogb2YgYSB1c2VyLXNwYWNlIHRvb2wgbGlrZSBgcGVyZmAuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoaXMgdW5kZXJzdGFuZGluZy4gVGhlIGB0b29scy9gIGRpcmVjdG9yeSBpcyB0eXBpY2FsbHkgYSBzaWduIG9mIHVzZXItc3BhY2UgY29kZS4gU3l6a2FsbGVyIGRvZXNuJ3QgZnV6eiB0aGUgYHBlcmZgIHRvb2wgaXRzZWxmOyBpdCBmdXp6ZXMgdGhlIGtlcm5lbC4gU28sIHRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGxpdmVzIGluIGB0b29scy9wZXJmL2AgaXMgYSBrZXkgaW5kaWNhdG9yLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggKmRvZXNuJ3QqIG1vZGlmeSB0aGUga2VybmVsIGluIGEgd2F5IHRoYXQgc3l6a2FsbGVyIHdvdWxkIGRpcmVjdGx5IGZ1enouIFRoZSBCUEYgcHJvZ3JhbSBpcyBsb2FkZWQgYnkgdGhlIGBwZXJmYCB0b29sOyBpdCBpcyBub3Qga2VybmVsIGNvZGUgYXMgc3VjaC4gSXQncyBhIHRvb2wtc3BlY2lmaWMgQlBGIHByb2dyYW0uXG5cbkknbSBjb25maWRlbnQgaW4gc2F5aW5nIHRoYXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgY2xlYXI6IHRoaXMgcGF0Y2ggaXMgY29uZmluZWQgdG8gdGhlIHVzZXItc3BhY2UgYHBlcmZgIHRvb2wgYW5kIGl0cyBCUEYgcHJvZ3JhbSwgbm90IHRoZSBjb3JlIGtlcm5lbCBjb21wb25lbnRzLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3l6a2FsbGVyIHRhcmdldHMuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gbWFrZSBzdXJlLiBJJ3ZlIHZlcmlmaWVkIHRoYXQgdGhlIGRpZmYgaXMgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiBgdG9vbHMvcGVyZi91dGlsL2JwZl9za2VsL2F1Z21lbnRlZF9yYXdfc3lzY2FsbHMuYnBmLmNgLiBUaGVyZSdzIG5vdGhpbmcgZWxzZSB0byBjb25zaWRlci5cblxuSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCB3aXRoIGBXb3J0aEZ1enppbmc9ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTkxLCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTM6MjY6NDYuMTI0NDAxMzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4MTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGEgQlBGIHByb2dyYW0gdXNlZCBieSB0aGUgdXNlci1zcGFjZSBgcGVyZmAgdG9vbCAobG9jYXRlZCBpbiBgdG9vbHMvcGVyZi9gKS4gSXQgZG9lcyBub3QgbW9kaWZ5IHRoZSBjb3JlIGtlcm5lbCwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBmdXp6ZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYSBCUEYgcHJvZ3JhbSB1c2VkIGJ5IHRoZSB1c2VyLXNwYWNlIGBwZXJmYCB0b29sIChsb2NhdGVkIGluIGB0b29scy9wZXJmL2ApLiBJdCBkb2VzIG5vdCBtb2RpZnkgdGhlIGNvcmUga2VybmVsLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzIHRoYXQgYXJlIGZ1enplZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow52zt5[1] Phase: Running StartedAt: 2026-06-23 13:26:58 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow52zt5[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-23 13:26:58 +0000 UTC FinishedAt: 2026-06-23 13:29:14 +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,}