IyEvdXNyL2Jpbi9lbnYgcGVybAojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCgojIFRoaXMgY29kZSBpcyB0YWtlbiBmcm9tIHRoZSBPcGVuU1NMIHByb2plY3QgYnV0IHRoZSBhdXRob3IgKEFuZHkgUG9seWFrb3YpCiMgaGFzIHJlbGljZW5zZWQgaXQgdW5kZXIgdGhlIEdQTHYyLiBUaGVyZWZvcmUgdGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7CiMgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiMgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgojCiMgVGhlIG9yaWdpbmFsIGhlYWRlcnMsIGluY2x1ZGluZyB0aGUgb3JpZ2luYWwgbGljZW5zZSBoZWFkZXJzLCBhcmUKIyBpbmNsdWRlZCBiZWxvdyBmb3IgY29tcGxldGVuZXNzLgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIFdyaXR0ZW4gYnkgQW5keSBQb2x5YWtvdiA8YXBwcm9Ab3BlbnNzbC5vcmc+IGZvciB0aGUgT3BlblNTTAojIHByb2plY3QuIFRoZSBtb2R1bGUgaXMsIGhvd2V2ZXIsIGR1YWwgbGljZW5zZWQgdW5kZXIgT3BlblNTTCBhbmQKIyBDUllQVE9HQU1TIGxpY2Vuc2VzIGRlcGVuZGluZyBvbiB3aGVyZSB5b3Ugb2J0YWluIGl0LiBGb3IgZnVydGhlcgojIGRldGFpbHMgc2VlIGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvfmFwcHJvL2NyeXB0b2dhbXMvLgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMKIyBHSEFTSCBmb3IgZm9yIFBvd2VySVNBIHYyLjA3LgojCiMgSnVseSAyMDE0CiMKIyBBY2N1cmF0ZSBwZXJmb3JtYW5jZSBtZWFzdXJlbWVudHMgYXJlIHByb2JsZW1hdGljLCBiZWNhdXNlIGl0J3MKIyBhbHdheXMgdmlydHVhbGl6ZWQgc2V0dXAgd2l0aCBwb3NzaWJseSB0aHJvdHRsZWQgcHJvY2Vzc29yLgojIFJlbGF0aXZlIGNvbXBhcmlzb24gaXMgdGhlcmVmb3JlIG1vcmUgaW5mb3JtYXRpdmUuIFRoaXMgaW5pdGlhbAojIHZlcnNpb24gaXMgfjIuMXggc2xvd2VyIHRoYW4gaGFyZHdhcmUtYXNzaXN0ZWQgQUVTLTEyOC1DVFIsIH4xMngKIyBmYXN0ZXIgdGhhbiAiNC1iaXQiIGludGVnZXItb25seSBjb21waWxlci1nZW5lcmF0ZWQgNjQtYml0IGNvZGUuCiMgIkluaXRpYWwgdmVyc2lvbiIgbWVhbnMgdGhhdCB0aGVyZSBpcyByb29tIGZvciBmdXRoZXIgaW1wcm92ZW1lbnQuCgokZmxhdm91cj1zaGlmdDsKJG91dHB1dCA9c2hpZnQ7CgppZiAoJGZsYXZvdXIgPX4gLzY0LykgewoJJFNJWkVfVD04OwoJJExSU0FWRT0yKiRTSVpFX1Q7CgkkU1RVPSJzdGR1IjsKCSRQT1A9ImxkIjsKCSRQVVNIPSJzdGQiOwp9IGVsc2lmICgkZmxhdm91ciA9fiAvMzIvKSB7CgkkU0laRV9UPTQ7CgkkTFJTQVZFPSRTSVpFX1Q7CgkkU1RVPSJzdHd1IjsKCSRQT1A9Imx3eiI7CgkkUFVTSD0ic3R3IjsKfSBlbHNlIHsgZGllICJub25zZW5zZSAkZmxhdm91ciI7IH0KCiQwID1+IG0vKC4qW1wvXFxdKVteXC9cXF0rJC87ICRkaXI9JDE7CiggJHhsYXRlPSIke2Rpcn1wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUgKSBvcgooICR4bGF0ZT0iJHtkaXJ9Li4vLi4vcGVybGFzbS9wcGMteGxhdGUucGwiIGFuZCAtZiAkeGxhdGUpIG9yCmRpZSAiY2FuJ3QgbG9jYXRlIHBwYy14bGF0ZS5wbCI7CgpvcGVuIFNURE9VVCwifCAkXlggJHhsYXRlICRmbGF2b3VyICRvdXRwdXQiIHx8IGRpZSAiY2FuJ3QgY2FsbCAkeGxhdGU6ICQhIjsKCm15ICgkWGlwLCRIdGJsLCRpbnAsJGxlbik9bWFwKCJyJF8iLCgzLi42KSk7CSMgYXJndW1lbnQgYmxvY2sKCm15ICgkWGwsJFhtLCRYaCwkSU4pPW1hcCgidiRfIiwoMC4uMykpOwpteSAoJHplcm8sJHQwLCR0MSwkdDIsJHhDMiwkSCwkSGgsJEhsLCRsZW1hc2spPW1hcCgidiRfIiwoNC4uMTIpKTsKbXkgJHZyc2F2ZT0icjEyIjsKCiRjb2RlPTw8X19fOwoubWFjaGluZQkiYW55IgoKLnRleHQKCi5nbG9ibAkuZ2NtX2luaXRfcDgKCWxpcwkJcjAsMHhmZmYwCglsaQkJcjgsMHgxMAoJbWZzcHIJCSR2cnNhdmUsMjU2CglsaQkJcjksMHgyMAoJbXRzcHIJCTI1NixyMAoJbGkJCXIxMCwweDMwCglsdnhfdQkJJEgsMCxyNAkJCSMgbG9hZCBICglsZT94b3IJCXI3LHI3LHI3CglsZT9hZGRpCQlyNyxyNywweDgJCSMgbmVlZCBhIHZwZXJtIHN0YXJ0IHdpdGggMDgKCWxlP2x2c3IJCTUsMCxyNwoJbGU/dnNwbHRpc2IJNiwweDBmCglsZT92eG9yCQk1LDUsNgkJCSMgc2V0IGEgYi1lbmRpYW4gbWFzawoJbGU/dnBlcm0JJEgsJEgsJEgsNQoKCXZzcGx0aXNiCSR4QzIsLTE2CQkjIDB4ZjAKCXZzcGx0aXNiCSR0MCwxCQkJIyBvbmUKCXZhZGR1Ym0JCSR4QzIsJHhDMiwkeEMyCQkjIDB4ZTAKCXZ4b3IJCSR6ZXJvLCR6ZXJvLCR6ZXJvCgl2b3IJCSR4QzIsJHhDMiwkdDAJCSMgMHhlMQoJdnNsZG9pCQkkeEMyLCR4QzIsJHplcm8sMTUJIyAweGUxLi4uCgl2c2xkb2kJCSR0MSwkemVybywkdDAsMQkJIyAuLi4xCgl2YWRkdWJtCQkkeEMyLCR4QzIsJHhDMgkJIyAweGMyLi4uCgl2c3BsdGlzYgkkdDIsNwoJdm9yCQkkeEMyLCR4QzIsJHQxCQkjIDB4YzIuLi4uMDEKCXZzcGx0YgkJJHQxLCRILDAJCSMgbW9zdCBzaWduaWZpY2FudCBieXRlCgl2c2wJCSRILCRILCR0MAkJIyBIPDw9MQoJdnNyYWIJCSR0MSwkdDEsJHQyCQkjIGJyb2FkY2FzdCBjYXJyeSBiaXQKCXZhbmQJCSR0MSwkdDEsJHhDMgoJdnhvcgkJJEgsJEgsJHQxCQkjIHR3aXN0ZWQgSAoKCXZzbGRvaQkJJEgsJEgsJEgsOAkJIyB0d2lzdCBldmVuIG1vcmUgLi4uCgl2c2xkb2kJCSR4QzIsJHplcm8sJHhDMiw4CSMgMHhjMi4wCgl2c2xkb2kJCSRIbCwkemVybywkSCw4CQkjIC4uLiBhbmQgc3BsaXQKCXZzbGRvaQkJJEhoLCRILCR6ZXJvLDgKCglzdHZ4X3UJCSR4QzIsMCxyMwkJIyBzYXZlIHByZS1jb21wdXRlZCB0YWJsZQoJc3R2eF91CQkkSGwscjgscjMKCXN0dnhfdQkJJEgsIHI5LHIzCglzdHZ4X3UJCSRIaCxyMTAscjMKCgltdHNwcgkJMjU2LCR2cnNhdmUKCWJscgoJLmxvbmcJCTAKCS5ieXRlCQkwLDEyLDB4MTQsMCwwLDAsMiwwCgkubG9uZwkJMAouc2l6ZQkuZ2NtX2luaXRfcDgsLi0uZ2NtX2luaXRfcDgKCi5nbG9ibAkuZ2NtX2dtdWx0X3A4CglsaXMJCXIwLDB4ZmZmOAoJbGkJCXI4LDB4MTAKCW1mc3ByCQkkdnJzYXZlLDI1NgoJbGkJCXI5LDB4MjAKCW10c3ByCQkyNTYscjAKCWxpCQlyMTAsMHgzMAoJbHZ4X3UJCSRJTiwwLCRYaXAJCSMgbG9hZCBYaQoKCWx2eF91CQkkSGwscjgsJEh0YmwJCSMgbG9hZCBwcmUtY29tcHV0ZWQgdGFibGUKCSBsZT9sdnNsCSRsZW1hc2sscjAscjAKCWx2eF91CQkkSCwgcjksJEh0YmwKCSBsZT92c3BsdGlzYgkkdDAsMHgwNwoJbHZ4X3UJCSRIaCxyMTAsJEh0YmwKCSBsZT92eG9yCSRsZW1hc2ssJGxlbWFzaywkdDAKCWx2eF91CQkkeEMyLDAsJEh0YmwKCSBsZT92cGVybQkkSU4sJElOLCRJTiwkbGVtYXNrCgl2eG9yCQkkemVybywkemVybywkemVybwoKCXZwbXN1bWQJCSRYbCwkSU4sJEhsCQkjIEgubG+3WGkubG8KCXZwbXN1bWQJCSRYbSwkSU4sJEgJCSMgSC5oabdYaS5sbytILmxvt1hpLmhpCgl2cG1zdW1kCQkkWGgsJElOLCRIaAkJIyBILmhpt1hpLmhpCgoJdnBtc3VtZAkJJHQyLCRYbCwkeEMyCQkjIDFzdCBwaGFzZQoKCXZzbGRvaQkJJHQwLCRYbSwkemVybyw4Cgl2c2xkb2kJCSR0MSwkemVybywkWG0sOAoJdnhvcgkJJFhsLCRYbCwkdDAKCXZ4b3IJCSRYaCwkWGgsJHQxCgoJdnNsZG9pCQkkWGwsJFhsLCRYbCw4Cgl2eG9yCQkkWGwsJFhsLCR0MgoKCXZzbGRvaQkJJHQxLCRYbCwkWGwsOAkJIyAybmQgcGhhc2UKCXZwbXN1bWQJCSRYbCwkWGwsJHhDMgoJdnhvcgkJJHQxLCR0MSwkWGgKCXZ4b3IJCSRYbCwkWGwsJHQxCgoJbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJc3R2eF91CQkkWGwsMCwkWGlwCQkjIHdyaXRlIG91dCBYaQoKCW10c3ByCQkyNTYsJHZyc2F2ZQoJYmxyCgkubG9uZwkJMAoJLmJ5dGUJCTAsMTIsMHgxNCwwLDAsMCwyLDAKCS5sb25nCQkwCi5zaXplCS5nY21fZ211bHRfcDgsLi0uZ2NtX2dtdWx0X3A4CgouZ2xvYmwJLmdjbV9naGFzaF9wOAoJbGlzCQlyMCwweGZmZjgKCWxpCQlyOCwweDEwCgltZnNwcgkJJHZyc2F2ZSwyNTYKCWxpCQlyOSwweDIwCgltdHNwcgkJMjU2LHIwCglsaQkJcjEwLDB4MzAKCWx2eF91CQkkWGwsMCwkWGlwCQkjIGxvYWQgWGkKCglsdnhfdQkJJEhsLHI4LCRIdGJsCQkjIGxvYWQgcHJlLWNvbXB1dGVkIHRhYmxlCgkgbGU/bHZzbAkkbGVtYXNrLHIwLHIwCglsdnhfdQkJJEgsIHI5LCRIdGJsCgkgbGU/dnNwbHRpc2IJJHQwLDB4MDcKCWx2eF91CQkkSGgscjEwLCRIdGJsCgkgbGU/dnhvcgkkbGVtYXNrLCRsZW1hc2ssJHQwCglsdnhfdQkJJHhDMiwwLCRIdGJsCgkgbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJdnhvcgkJJHplcm8sJHplcm8sJHplcm8KCglsdnhfdQkJJElOLDAsJGlucAoJYWRkaQkJJGlucCwkaW5wLDE2CglzdWJpCQkkbGVuLCRsZW4sMTYKCSBsZT92cGVybQkkSU4sJElOLCRJTiwkbGVtYXNrCgl2eG9yCQkkSU4sJElOLCRYbAoJYgkJTG9vcAoKLmFsaWduCTUKTG9vcDoKCSBzdWJpYwkJJGxlbiwkbGVuLDE2Cgl2cG1zdW1kCQkkWGwsJElOLCRIbAkJIyBILmxvt1hpLmxvCgkgc3ViZmUuCQlyMCxyMCxyMAkJIyBib3Jyb3c/LTE6MAoJdnBtc3VtZAkJJFhtLCRJTiwkSAkJIyBILmhpt1hpLmxvK0gubG+3WGkuaGkKCSBhbmQJCXIwLHIwLCRsZW4KCXZwbXN1bWQJCSRYaCwkSU4sJEhoCQkjIEguaGm3WGkuaGkKCSBhZGQJCSRpbnAsJGlucCxyMAoKCXZwbXN1bWQJCSR0MiwkWGwsJHhDMgkJIyAxc3QgcGhhc2UKCgl2c2xkb2kJCSR0MCwkWG0sJHplcm8sOAoJdnNsZG9pCQkkdDEsJHplcm8sJFhtLDgKCXZ4b3IJCSRYbCwkWGwsJHQwCgl2eG9yCQkkWGgsJFhoLCR0MQoKCXZzbGRvaQkJJFhsLCRYbCwkWGwsOAoJdnhvcgkJJFhsLCRYbCwkdDIKCSBsdnhfdQkJJElOLDAsJGlucAoJIGFkZGkJCSRpbnAsJGlucCwxNgoKCXZzbGRvaQkJJHQxLCRYbCwkWGwsOAkJIyAybmQgcGhhc2UKCXZwbXN1bWQJCSRYbCwkWGwsJHhDMgoJIGxlP3ZwZXJtCSRJTiwkSU4sJElOLCRsZW1hc2sKCXZ4b3IJCSR0MSwkdDEsJFhoCgl2eG9yCQkkSU4sJElOLCR0MQoJdnhvcgkJJElOLCRJTiwkWGwKCWJlcQkJTG9vcAkJCSMgZGlkICRsZW4tPTE2IGJvcnJvdz8KCgl2eG9yCQkkWGwsJFhsLCR0MQoJbGU/dnBlcm0JJFhsLCRYbCwkWGwsJGxlbWFzawoJc3R2eF91CQkkWGwsMCwkWGlwCQkjIHdyaXRlIG91dCBYaQoKCW10c3ByCQkyNTYsJHZyc2F2ZQoJYmxyCgkubG9uZwkJMAoJLmJ5dGUJCTAsMTIsMHgxNCwwLDAsMCw0LDAKCS5sb25nCQkwCi5zaXplCS5nY21fZ2hhc2hfcDgsLi0uZ2NtX2doYXNoX3A4CgouYXNjaXogICJHSEFTSCBmb3IgUG93ZXJJU0EgMi4wNywgQ1JZUFRPR0FNUyBieSA8YXBwcm9cQG9wZW5zc2wub3JnPiIKLmFsaWduICAyCl9fXwoKZm9yZWFjaCAoc3BsaXQoIlxuIiwkY29kZSkpIHsKCWlmICgkZmxhdm91ciA9fiAvbGUkL28pIHsJIyBsaXR0bGUtZW5kaWFuCgkgICAgcy9sZVw/Ly9vCQlvcgoJICAgIHMvYmVcPy8jYmUjL287Cgl9IGVsc2UgewoJICAgIHMvbGVcPy8jbGUjL28Jb3IKCSAgICBzL2JlXD8vL287Cgl9CglwcmludCAkXywiXG4iOwp9CgpjbG9zZSBTVERPVVQ7ICMgZW5mb3JjZSBmbHVzaAo=