LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKiAgICAgICAgICAgICAgICAKICogRmlsZW5hbWU6ICAgICAgaXJzeXNjdGwuYwogKiBWZXJzaW9uOiAgICAgICAxLjAKICogRGVzY3JpcHRpb246ICAgU3lzY3RsIGludGVyZmFjZSBmb3IgSXJEQQogKiBTdGF0dXM6ICAgICAgICBFeHBlcmltZW50YWwuCiAqIEF1dGhvcjogICAgICAgIERhZyBCcmF0dGxpIDxkYWdiQGNzLnVpdC5ubz4KICogQ3JlYXRlZCBhdDogICAgU3VuIE1heSAyNCAyMjoxMjowNiAxOTk4CiAqIE1vZGlmaWVkIGF0OiAgIEZyaSBKdW4gIDQgMDI6NTA6MTUgMTk5OQogKiBNb2RpZmllZCBieTogICBEYWcgQnJhdHRsaSA8ZGFnYkBjcy51aXQubm8+CiAqIAogKiAgICAgQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk5IERhZyBCcmF0dGxpLCBBbGwgUmlnaHRzIFJlc2VydmVkLgogKiAgICAgQ29weXJpZ2h0IChjKSAyMDAwLTIwMDEgSmVhbiBUb3VycmlsaGVzIDxqdEBocGwuaHAuY29tPgogKiAgICAgIAogKiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciAKICogICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIAogKiAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgCiAqICAgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICogIAogKiAgICAgTmVpdGhlciBEYWcgQnJhdHRsaSBub3IgVW5pdmVyc2l0eSBvZiBUcm9tc/ggYWRtaXQgbGlhYmlsaXR5IG5vcgogKiAgICAgcHJvdmlkZSB3YXJyYW50eSBmb3IgYW55IG9mIHRoaXMgc29mdHdhcmUuIFRoaXMgbWF0ZXJpYWwgaXMgCiAqICAgICBwcm92aWRlZCAiQVMtSVMiIGFuZCBhdCBubyBjaGFyZ2UuCiAqICAgICAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPGxpbnV4L21tLmg+CiNpbmNsdWRlIDxsaW51eC9jdHlwZS5oPgojaW5jbHVkZSA8bGludXgvc3lzY3RsLmg+CiNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CgojaW5jbHVkZSA8bmV0L2lyZGEvaXJkYS5oPgkJLyogaXJkYV9kZWJ1ZyAqLwojaW5jbHVkZSA8bmV0L2lyZGEvaXJpYXNfb2JqZWN0Lmg+CgojZGVmaW5lIE5FVF9JUkRBIDQxMiAvKiBSYW5kb20gbnVtYmVyICovCmVudW0geyBESVNDT1ZFUlk9MSwgREVWTkFNRSwgREVCVUcsIEZBU1RfUE9MTCwgRElTQ09WRVJZX1NMT1RTLAogICAgICAgRElTQ09WRVJZX1RJTUVPVVQsIFNMT1RfVElNRU9VVCwgTUFYX0JBVURfUkFURSwgTUlOX1RYX1RVUk5fVElNRSwKICAgICAgIE1BWF9UWF9EQVRBX1NJWkUsIE1BWF9UWF9XSU5ET1csIE1BWF9OT1JFUExZX1RJTUUsIFdBUk5fTk9SRVBMWV9USU1FLAogICAgICAgTEFQX0tFRVBBTElWRV9USU1FIH07CgpleHRlcm4gaW50ICBzeXNjdGxfZGlzY292ZXJ5OwpleHRlcm4gaW50ICBzeXNjdGxfZGlzY292ZXJ5X3Nsb3RzOwpleHRlcm4gaW50ICBzeXNjdGxfZGlzY292ZXJ5X3RpbWVvdXQ7CmV4dGVybiBpbnQgIHN5c2N0bF9zbG90X3RpbWVvdXQ7CmV4dGVybiBpbnQgIHN5c2N0bF9mYXN0X3BvbGxfaW5jcmVhc2U7CmV4dGVybiBjaGFyIHN5c2N0bF9kZXZuYW1lW107CmV4dGVybiBpbnQgIHN5c2N0bF9tYXhfYmF1ZF9yYXRlOwpleHRlcm4gaW50ICBzeXNjdGxfbWluX3R4X3R1cm5fdGltZTsKZXh0ZXJuIGludCAgc3lzY3RsX21heF90eF9kYXRhX3NpemU7CmV4dGVybiBpbnQgIHN5c2N0bF9tYXhfdHhfd2luZG93OwpleHRlcm4gaW50ICBzeXNjdGxfbWF4X25vcmVwbHlfdGltZTsKZXh0ZXJuIGludCAgc3lzY3RsX3dhcm5fbm9yZXBseV90aW1lOwpleHRlcm4gaW50ICBzeXNjdGxfbGFwX2tlZXBhbGl2ZV90aW1lOwoKLyogdGhpcyBpcyBuZWVkZWQgZm9yIHRoZSBwcm9jX2RvaW50dmVjX21pbm1heCAtIEplYW4gSUkgKi8Kc3RhdGljIGludCBtYXhfZGlzY292ZXJ5X3Nsb3RzID0gMTY7CQkvKiA/Pz8gKi8Kc3RhdGljIGludCBtaW5fZGlzY292ZXJ5X3Nsb3RzID0gMTsKLyogSXJMQVAgNi4xMy4yIHNheXMgMjVtcyB0byAxMCs3MG1zIC0gYWxsb3cgaGlnaGVyIHNpbmNlIHNvbWUgZGV2aWNlcwogKiBzZWVtcyB0byByZXF1aXJlIGl0LiAoZnJvbSBEYWcncyBjb21tZW50KSAqLwpzdGF0aWMgaW50IG1heF9zbG90X3RpbWVvdXQgPSAxNjA7CnN0YXRpYyBpbnQgbWluX3Nsb3RfdGltZW91dCA9IDIwOwpzdGF0aWMgaW50IG1heF9tYXhfYmF1ZF9yYXRlID0gMTYwMDAwMDA7CS8qIFNlZSBxb3MuYyAtIElyTEFQIHNwZWMgKi8Kc3RhdGljIGludCBtaW5fbWF4X2JhdWRfcmF0ZSA9IDI0MDA7CnN0YXRpYyBpbnQgbWF4X21pbl90eF90dXJuX3RpbWUgPSAxMDAwMDsJLyogU2VlIHFvcy5jIC0gSXJMQVAgc3BlYyAqLwpzdGF0aWMgaW50IG1pbl9taW5fdHhfdHVybl90aW1lOwpzdGF0aWMgaW50IG1heF9tYXhfdHhfZGF0YV9zaXplID0gMjA0ODsJCS8qIFNlZSBxb3MuYyAtIElyTEFQIHNwZWMgKi8Kc3RhdGljIGludCBtaW5fbWF4X3R4X2RhdGFfc2l6ZSA9IDY0OwpzdGF0aWMgaW50IG1heF9tYXhfdHhfd2luZG93ID0gNzsJCS8qIFNlZSBxb3MuYyAtIElyTEFQIHNwZWMgKi8Kc3RhdGljIGludCBtaW5fbWF4X3R4X3dpbmRvdyA9IDE7CnN0YXRpYyBpbnQgbWF4X21heF9ub3JlcGx5X3RpbWUgPSA0MDsJCS8qIFNlZSBxb3MuYyAtIElyTEFQIHNwZWMgKi8Kc3RhdGljIGludCBtaW5fbWF4X25vcmVwbHlfdGltZSA9IDM7CnN0YXRpYyBpbnQgbWF4X3dhcm5fbm9yZXBseV90aW1lID0gMzsJCS8qIDNzID09IHN0YW5kYXJkICovCnN0YXRpYyBpbnQgbWluX3dhcm5fbm9yZXBseV90aW1lID0gMTsJCS8qIDFzID09IG1pbiBXRF9USU1FUiAqLwpzdGF0aWMgaW50IG1heF9sYXBfa2VlcGFsaXZlX3RpbWUgPSAxMDAwMDsJLyogMTBzICovCnN0YXRpYyBpbnQgbWluX2xhcF9rZWVwYWxpdmVfdGltZSA9IDEwMDsJLyogMTAwdXMgKi8KLyogRm9yIG90aGVyIHN5c2N0bCwgSSd2ZSBubyBpZGVhIG9mIHRoZSByYW5nZS4gTWF5YmUgRGFnIGNvdWxkIGhlbHAKICogdXMgb24gdGhhdCAtIEplYW4gSUkgKi8KCnN0YXRpYyBpbnQgZG9fZGV2bmFtZShjdGxfdGFibGUgKnRhYmxlLCBpbnQgd3JpdGUsIHN0cnVjdCBmaWxlICpmaWxwLAoJCSAgICAgIHZvaWQgX191c2VyICpidWZmZXIsIHNpemVfdCAqbGVucCwgbG9mZl90ICpwcG9zKQp7CglpbnQgcmV0OwoKCXJldCA9IHByb2NfZG9zdHJpbmcodGFibGUsIHdyaXRlLCBmaWxwLCBidWZmZXIsIGxlbnAsIHBwb3MpOwoJaWYgKHJldCA9PSAwICYmIHdyaXRlKSB7CgkJc3RydWN0IGlhc192YWx1ZSAqdmFsOwoKCQl2YWwgPSBpcmlhc19uZXdfc3RyaW5nX3ZhbHVlKHN5c2N0bF9kZXZuYW1lKTsKCQlpZiAodmFsKQoJCQlpcmlhc19vYmplY3RfY2hhbmdlX2F0dHJpYnV0ZSgiRGV2aWNlIiwgIkRldmljZU5hbWUiLCB2YWwpOwoJfQoJcmV0dXJuIHJldDsKfQoKLyogT25lIGZpbGUgKi8Kc3RhdGljIGN0bF90YWJsZSBpcmRhX3RhYmxlW10gPSB7Cgl7CgkJLmN0bF9uYW1lCT0gRElTQ09WRVJZLAoJCS5wcm9jbmFtZQk9ICJkaXNjb3ZlcnkiLAoJCS5kYXRhCQk9ICZzeXNjdGxfZGlzY292ZXJ5LAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWMKCX0sCgl7CgkJLmN0bF9uYW1lCT0gREVWTkFNRSwKCQkucHJvY25hbWUJPSAiZGV2bmFtZSIsCgkJLmRhdGEJCT0gc3lzY3RsX2Rldm5hbWUsCgkJLm1heGxlbgkJPSA2NSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmZG9fZGV2bmFtZSwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX3N0cmluZwoJfSwKI2lmZGVmIENPTkZJR19JUkRBX0RFQlVHCiAgICAgICAgewoJCS5jdGxfbmFtZQk9IERFQlVHLAoJCS5wcm9jbmFtZQk9ICJkZWJ1ZyIsCgkJLmRhdGEJCT0gJmlyZGFfZGVidWcsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlYwoJfSwKI2VuZGlmCiNpZmRlZiBDT05GSUdfSVJEQV9GQVNUX1JSCiAgICAgICAgewoJCS5jdGxfbmFtZQk9IEZBU1RfUE9MTCwKCQkucHJvY25hbWUJPSAiZmFzdF9wb2xsX2luY3JlYXNlIiwKCQkuZGF0YQkJPSAmc3lzY3RsX2Zhc3RfcG9sbF9pbmNyZWFzZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCgl9LAojZW5kaWYKCXsKCQkuY3RsX25hbWUJPSBESVNDT1ZFUllfU0xPVFMsCgkJLnByb2NuYW1lCT0gImRpc2NvdmVyeV9zbG90cyIsCgkJLmRhdGEJCT0gJnN5c2N0bF9kaXNjb3Zlcnlfc2xvdHMsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX2Rpc2NvdmVyeV9zbG90cywKCQkuZXh0cmEyCQk9ICZtYXhfZGlzY292ZXJ5X3Nsb3RzCgl9LAoJewoJCS5jdGxfbmFtZQk9IERJU0NPVkVSWV9USU1FT1VULAoJCS5wcm9jbmFtZQk9ICJkaXNjb3ZlcnlfdGltZW91dCIsCgkJLmRhdGEJCT0gJnN5c2N0bF9kaXNjb3ZlcnlfdGltZW91dCwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjCgl9LAoJewoJCS5jdGxfbmFtZQk9IFNMT1RfVElNRU9VVCwKCQkucHJvY25hbWUJPSAic2xvdF90aW1lb3V0IiwKCQkuZGF0YQkJPSAmc3lzY3RsX3Nsb3RfdGltZW91dCwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fc2xvdF90aW1lb3V0LAoJCS5leHRyYTIJCT0gJm1heF9zbG90X3RpbWVvdXQKCX0sCgl7CgkJLmN0bF9uYW1lCT0gTUFYX0JBVURfUkFURSwKCQkucHJvY25hbWUJPSAibWF4X2JhdWRfcmF0ZSIsCgkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfYmF1ZF9yYXRlLAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAoJCS5leHRyYTEJCT0gJm1pbl9tYXhfYmF1ZF9yYXRlLAoJCS5leHRyYTIJCT0gJm1heF9tYXhfYmF1ZF9yYXRlCgl9LAoJewoJCS5jdGxfbmFtZQk9IE1JTl9UWF9UVVJOX1RJTUUsCgkJLnByb2NuYW1lCT0gIm1pbl90eF90dXJuX3RpbWUiLAoJCS5kYXRhCQk9ICZzeXNjdGxfbWluX3R4X3R1cm5fdGltZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fbWluX3R4X3R1cm5fdGltZSwKCQkuZXh0cmEyCQk9ICZtYXhfbWluX3R4X3R1cm5fdGltZQoJfSwKCXsKCQkuY3RsX25hbWUJPSBNQVhfVFhfREFUQV9TSVpFLAoJCS5wcm9jbmFtZQk9ICJtYXhfdHhfZGF0YV9zaXplIiwKCQkuZGF0YQkJPSAmc3lzY3RsX21heF90eF9kYXRhX3NpemUsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX21heF90eF9kYXRhX3NpemUsCgkJLmV4dHJhMgkJPSAmbWF4X21heF90eF9kYXRhX3NpemUKCX0sCgl7CgkJLmN0bF9uYW1lCT0gTUFYX1RYX1dJTkRPVywKCQkucHJvY25hbWUJPSAibWF4X3R4X3dpbmRvdyIsCgkJLmRhdGEJCT0gJnN5c2N0bF9tYXhfdHhfd2luZG93LAoJCS5tYXhsZW4JCT0gc2l6ZW9mKGludCksCgkJLm1vZGUJCT0gMDY0NCwKCQkucHJvY19oYW5kbGVyCT0gJnByb2NfZG9pbnR2ZWNfbWlubWF4LAoJCS5zdHJhdGVneQk9ICZzeXNjdGxfaW50dmVjLAoJCS5leHRyYTEJCT0gJm1pbl9tYXhfdHhfd2luZG93LAoJCS5leHRyYTIJCT0gJm1heF9tYXhfdHhfd2luZG93Cgl9LAoJewoJCS5jdGxfbmFtZQk9IE1BWF9OT1JFUExZX1RJTUUsCgkJLnByb2NuYW1lCT0gIm1heF9ub3JlcGx5X3RpbWUiLAoJCS5kYXRhCQk9ICZzeXNjdGxfbWF4X25vcmVwbHlfdGltZSwKCQkubWF4bGVuCQk9IHNpemVvZihpbnQpLAoJCS5tb2RlCQk9IDA2NDQsCgkJLnByb2NfaGFuZGxlcgk9ICZwcm9jX2RvaW50dmVjX21pbm1heCwKCQkuc3RyYXRlZ3kJPSAmc3lzY3RsX2ludHZlYywKCQkuZXh0cmExCQk9ICZtaW5fbWF4X25vcmVwbHlfdGltZSwKCQkuZXh0cmEyCQk9ICZtYXhfbWF4X25vcmVwbHlfdGltZQoJfSwKCXsKCQkuY3RsX25hbWUJPSBXQVJOX05PUkVQTFlfVElNRSwKCQkucHJvY25hbWUJPSAid2Fybl9ub3JlcGx5X3RpbWUiLAoJCS5kYXRhCQk9ICZzeXNjdGxfd2Fybl9ub3JlcGx5X3RpbWUsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX3dhcm5fbm9yZXBseV90aW1lLAoJCS5leHRyYTIJCT0gJm1heF93YXJuX25vcmVwbHlfdGltZQoJfSwKCXsKCQkuY3RsX25hbWUJPSBMQVBfS0VFUEFMSVZFX1RJTUUsCgkJLnByb2NuYW1lCT0gImxhcF9rZWVwYWxpdmVfdGltZSIsCgkJLmRhdGEJCT0gJnN5c2N0bF9sYXBfa2VlcGFsaXZlX3RpbWUsCgkJLm1heGxlbgkJPSBzaXplb2YoaW50KSwKCQkubW9kZQkJPSAwNjQ0LAoJCS5wcm9jX2hhbmRsZXIJPSAmcHJvY19kb2ludHZlY19taW5tYXgsCgkJLnN0cmF0ZWd5CT0gJnN5c2N0bF9pbnR2ZWMsCgkJLmV4dHJhMQkJPSAmbWluX2xhcF9rZWVwYWxpdmVfdGltZSwKCQkuZXh0cmEyCQk9ICZtYXhfbGFwX2tlZXBhbGl2ZV90aW1lCgl9LAoJeyAuY3RsX25hbWUgPSAwIH0KfTsKCi8qIE9uZSBkaXJlY3RvcnkgKi8Kc3RhdGljIGN0bF90YWJsZSBpcmRhX25ldF90YWJsZVtdID0gewoJewoJCS5jdGxfbmFtZQk9IE5FVF9JUkRBLAoJCS5wcm9jbmFtZQk9ICJpcmRhIiwKCQkubWF4bGVuCQk9IDAsCgkJLm1vZGUJCT0gMDU1NSwKCQkuY2hpbGQJCT0gaXJkYV90YWJsZQoJfSwKCXsgLmN0bF9uYW1lID0gMCB9Cn07CgovKiBUaGUgcGFyZW50IGRpcmVjdG9yeSAqLwpzdGF0aWMgY3RsX3RhYmxlIGlyZGFfcm9vdF90YWJsZVtdID0gewoJewoJCS5jdGxfbmFtZQk9IENUTF9ORVQsCgkJLnByb2NuYW1lCT0gIm5ldCIsCgkJLm1heGxlbgkJPSAwLAoJCS5tb2RlCQk9IDA1NTUsCgkJLmNoaWxkCQk9IGlyZGFfbmV0X3RhYmxlCgl9LAoJeyAuY3RsX25hbWUgPSAwIH0KfTsKCnN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqaXJkYV90YWJsZV9oZWFkZXI7CgovKgogKiBGdW5jdGlvbiBpcmRhX3N5c2N0bF9yZWdpc3RlciAodm9pZCkKICoKICogICAgUmVnaXN0ZXIgb3VyIHN5c2N0bCBpbnRlcmZhY2UKICoKICovCmludCBfX2luaXQgaXJkYV9zeXNjdGxfcmVnaXN0ZXIodm9pZCkKewoJaXJkYV90YWJsZV9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxfdGFibGUoaXJkYV9yb290X3RhYmxlLCAwKTsKCWlmICghaXJkYV90YWJsZV9oZWFkZXIpCgkJcmV0dXJuIC1FTk9NRU07CgoJcmV0dXJuIDA7Cn0KCi8qCiAqIEZ1bmN0aW9uIGlyZGFfc3lzY3RsX3VucmVnaXN0ZXIgKHZvaWQpCiAqCiAqICAgIFVucmVnaXN0ZXIgb3VyIHN5c2N0bCBpbnRlcmZhY2UKICoKICovCnZvaWQgX19leGl0IGlyZGFfc3lzY3RsX3VucmVnaXN0ZXIodm9pZCkgCnsKCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGlyZGFfdGFibGVfaGVhZGVyKTsKfQoKCgo=