From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 652AA6E4E3 for ; Wed, 23 May 2018 18:31:22 +0000 (UTC) From: Ville Syrjala Date: Wed, 23 May 2018 21:31:06 +0300 Message-Id: <20180523183110.1975-4-ville.syrjala@linux.intel.com> In-Reply-To: <20180523183110.1975-1-ville.syrjala@linux.intel.com> References: <20180523183110.1975-1-ville.syrjala@linux.intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t 4/8] lib: Use igt_matrix for ycbcr<->rgb conversion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org List-ID: RnJvbTogVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNvbT4KClBy b2JhYmx5IGhvcnJpYmx5IGluZWZmaWNpZW50IChub3QgdGhhdCB0aGUgb3JpZ2luYWwgY29kZSB0 cmllZCB0byBiZQpwYXJ0aWN1bGFybHkgZWZmaWNpZW50KSwgYnV0IGF0IGxlYXN0IHRoaXMgaXMg bm93IHByZXR0eSBnZW5lcmljIHNvCml0J2xsIGJlIHN1cGVyIGVhc3kgdG8gYWRkIG90aGVyIGNv bG9yIGVuY29kaW5ncyBhbmQgd2hhdG5vdC4KCnYyOiBSZWJhc2UKdjM6IERlYWwgd2l0aCB0aGUg bmV3IGNvbG9yX2VuY29kaW5nL3JhbmdlIGVudW1zCnY0OiBGaXggdGhlIGNvZGUgdG8gYWN0dWFs bHkgd29yaywgYW5kIGRvIHRoaW5ncyBpbiAyeDIgYmxvY2tzCiAgICBLZWVwIHRoZSBjaHJvbWEg c2l0aW5nIGNvbW1lbnQgYW5kIHBpbXAgaXQgdXAgYSBiaXQKClNpZ25lZC1vZmYtYnk6IFZpbGxl IFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Ci0tLQogbGliL2lndF9m Yi5jIHwgMjI4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t LS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTU5IGluc2VydGlvbnMoKyksIDY5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpYi9pZ3RfZmIuYyBiL2xpYi9pZ3RfZmIuYwppbmRleCA5 ZWRlZTc0YjU3YzMuLmNlYWFlYTcwZjY0YiAxMDA2NDQKLS0tIGEvbGliL2lndF9mYi5jCisrKyBi L2xpYi9pZ3RfZmIuYwpAQCAtMzEsOCArMzEsMTAgQEAKIAogI2luY2x1ZGUgImRybXRlc3QuaCIK ICNpbmNsdWRlICJpZ3RfYXV4LmgiCisjaW5jbHVkZSAiaWd0X2NvbG9yX2VuY29kaW5nLmgiCiAj aW5jbHVkZSAiaWd0X2ZiLmgiCiAjaW5jbHVkZSAiaWd0X2ttcy5oIgorI2luY2x1ZGUgImlndF9t YXRyaXguaCIKICNpbmNsdWRlICJpZ3RfeDg2LmgiCiAjaW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMu aCIKICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgpAQCAtMTM1Niw2ICsxMzU4LDIxIEBA IHN0YXRpYyB1aW50OF90IGNsYW1wcmdiKGZsb2F0IHZhbCkKIAlyZXR1cm4gY2xhbXAodmFsLCAw LjBmLCAyNTUuMGYpOwogfQogCitzdGF0aWMgdm9pZCByZWFkX3JnYihzdHJ1Y3QgaWd0X3ZlYzQg KnJnYiwgY29uc3QgdWludDhfdCAqcmdiMjQpCit7CisJcmdiLT5kWzBdID0gcmdiMjRbMl07CisJ cmdiLT5kWzFdID0gcmdiMjRbMV07CisJcmdiLT5kWzJdID0gcmdiMjRbMF07CisJcmdiLT5kWzNd ID0gMS4wZjsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmdiKHVpbnQ4X3QgKnJnYjI0LCBjb25z dCBzdHJ1Y3QgaWd0X3ZlYzQgKnJnYikKK3sKKwlyZ2IyNFsyXSA9IGNsYW1wcmdiKHJnYi0+ZFsw XSk7CisJcmdiMjRbMV0gPSBjbGFtcHJnYihyZ2ItPmRbMV0pOworCXJnYjI0WzBdID0gY2xhbXBy Z2IocmdiLT5kWzJdKTsKK30KKwogc3RhdGljIHZvaWQgY29udmVydF9udjEyX3RvX3JnYjI0KHN0 cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0X3VwbG9hZCAqYmxpdCkKIHsK IAlpbnQgaSwgajsKQEAgLTEzNjMsNiArMTM4MCw4IEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfbnYx Ml90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxv CiAJdWludDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7CiAJdW5zaWduZWQgcmdiMjRfc3Ry aWRlID0gYmxpdC0+cmdiMjQuc3RyaWRlLCBwbGFuYXJfc3RyaWRlID0gYmxpdC0+bGluZWFyLnN0 cmlkZTsKIAl1aW50OF90ICpidWYgPSBtYWxsb2MoYmxpdC0+bGluZWFyLnNpemUpOworCXN0cnVj dCBpZ3RfbWF0NCBtID0gaWd0X3ljYmNyX3RvX3JnYl9tYXRyaXgoSUdUX0NPTE9SX1lDQkNSX0JU NjAxLAorCQkJCQkJICAgIElHVF9DT0xPUl9ZQ0JDUl9MSU1JVEVEX1JBTkdFKTsKIAogCS8qCiAJ ICogUmVhZGluZyBmcm9tIHRoZSBCTyBpcyBhd2Z1bGx5IHNsb3cgYmVjYXVzZSBvZiBsYWNrIG9m IHJlYWQgY2FjaGluZywKQEAgLTEzNzMsMzAgKzEzOTIsNDkgQEAgc3RhdGljIHZvaWQgY29udmVy dF9udjEyX3RvX3JnYjI0KHN0cnVjdCBpZ3RfZmIgKmZiLCBzdHJ1Y3QgZmJfY29udmVydF9ibGl0 X3VwbG8KIAl5ID0gJmJ1ZltibGl0LT5saW5lYXIub2Zmc2V0c1swXV07CiAJdXYgPSAmYnVmW2Js aXQtPmxpbmVhci5vZmZzZXRzWzFdXTsKIAotCS8qIENvbnZlcnQgZnJvbSBsaW1pdGVkIGNvbG9y IHJhbmdlIEJULjYwMSAqLwogCWZvciAoaSA9IDA7IGkgPCBmYi0+aGVpZ2h0IC8gMjsgaSsrKSB7 Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+d2lkdGg7IGorKykgewotCQkJZmxvYXQgcl8sIGdfLCBi XywgeTAsIHkxLCBjYiwgY3I7Ci0JCQkvKiBDb252ZXJ0IDF4MiBwaXhlbCBibG9ja3MgKi8KLQot CQkJeTAgPSAxLjE2NGYgKiAoeVtqXSAtIDE2LmYpOwotCQkJeTEgPSAxLjE2NGYgKiAoeVtqICsg cGxhbmFyX3N0cmlkZV0gLSAxNi5mKTsKKwkJZm9yIChqID0gMDsgaiA8IGZiLT53aWR0aCAvIDI7 IGorKykgeworCQkJLyogQ29udmVydCAyeDIgcGl4ZWwgYmxvY2tzICovCisJCQlzdHJ1Y3QgaWd0 X3ZlYzQgeXV2WzRdOworCQkJc3RydWN0IGlndF92ZWM0IHJnYls0XTsKKworCQkJeXV2WzBdLmRb MF0gPSB5W2ogKiAyICsgMF07CisJCQl5dXZbMV0uZFswXSA9IHlbaiAqIDIgKyAxXTsKKwkJCXl1 dlsyXS5kWzBdID0geVtqICogMiArIDAgKyBwbGFuYXJfc3RyaWRlXTsKKwkJCXl1dlszXS5kWzBd ID0geVtqICogMiArIDEgKyBwbGFuYXJfc3RyaWRlXTsKKworCQkJeXV2WzBdLmRbMV0gPSB5dXZb MV0uZFsxXSA9IHl1dlsyXS5kWzFdID0geXV2WzNdLmRbMV0gPSB1dltqICogMiArIDBdOworCQkJ eXV2WzBdLmRbMl0gPSB5dXZbMV0uZFsyXSA9IHl1dlsyXS5kWzJdID0geXV2WzNdLmRbMl0gPSB1 dltqICogMiArIDFdOworCQkJeXV2WzBdLmRbM10gPSB5dXZbMV0uZFszXSA9IHl1dlsyXS5kWzNd ID0geXV2WzNdLmRbM10gPSAxLjBmOworCisJCQlyZ2JbMF0gPSBpZ3RfbWF0cml4X3RyYW5zZm9y bSgmbSwgJnl1dlswXSk7CisJCQlyZ2JbMV0gPSBpZ3RfbWF0cml4X3RyYW5zZm9ybSgmbSwgJnl1 dlsxXSk7CisJCQlyZ2JbMl0gPSBpZ3RfbWF0cml4X3RyYW5zZm9ybSgmbSwgJnl1dlsyXSk7CisJ CQlyZ2JbM10gPSBpZ3RfbWF0cml4X3RyYW5zZm9ybSgmbSwgJnl1dlszXSk7CisKKwkJCXdyaXRl X3JnYigmcmdiMjRbaiAqIDggKyAwXSwgJnJnYlswXSk7CisJCQl3cml0ZV9yZ2IoJnJnYjI0W2og KiA4ICsgNF0sICZyZ2JbMV0pOworCQkJd3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDAgKyByZ2Iy NF9zdHJpZGVdLCAmcmdiWzJdKTsKKwkJCXdyaXRlX3JnYigmcmdiMjRbaiAqIDggKyA0ICsgcmdi MjRfc3RyaWRlXSwgJnJnYlszXSk7CisJCX0KIAotCQkJY2IgPSB1dltqICYgfjFdIC0gMTI4LmY7 Ci0JCQljciA9IHV2W2ogfCAxXSAtIDEyOC5mOworCQlpZiAoZmItPndpZHRoICYgMSkgeworCQkJ LyogQ29udmVydCAxeDIgcGl4ZWwgYmxvY2sgKi8KKwkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07 CisJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiWzJdOwogCi0JCQlyXyA9ICAwLjAwMGYgKiBjYiArICAx LjU5NmYgKiBjcjsKLQkJCWdfID0gLTAuMzkyZiAqIGNiICsgLTAuODEzZiAqIGNyOwotCQkJYl8g PSAgMi4wMTdmICogY2IgKyAgMC4wMDBmICogY3I7CisJCQl5dXZbMF0uZFswXSA9IHlbaiAqIDIg KyAwXTsKKwkJCXl1dlsxXS5kWzBdID0geVtqICogMiArIDAgKyBwbGFuYXJfc3RyaWRlXTsKIAot CQkJcmdiMjRbaiAqIDQgKyAyXSA9IGNsYW1wcmdiKHkwICsgcl8pOwotCQkJcmdiMjRbaiAqIDQg KyAyICsgcmdiMjRfc3RyaWRlXSA9IGNsYW1wcmdiKHkxICsgcl8pOworCQkJeXV2WzBdLmRbMV0g PSB5dXZbMV0uZFsxXSA9IHV2W2ogKiAyICsgMF07CisJCQl5dXZbMF0uZFsyXSA9IHl1dlsxXS5k WzJdID0gdXZbaiAqIDIgKyAxXTsKKwkJCXl1dlswXS5kWzNdID0geXV2WzFdLmRbM10gPSAxLjBm OwogCi0JCQlyZ2IyNFtqICogNCArIDFdID0gY2xhbXByZ2IoeTAgKyBnXyk7Ci0JCQlyZ2IyNFtq ICogNCArIDEgKyByZ2IyNF9zdHJpZGVdID0gY2xhbXByZ2IoeTEgKyBnXyk7CisJCQlyZ2JbMF0g PSBpZ3RfbWF0cml4X3RyYW5zZm9ybSgmbSwgJnl1dlswXSk7CisJCQlyZ2JbMV0gPSBpZ3RfbWF0 cml4X3RyYW5zZm9ybSgmbSwgJnl1dlsxXSk7CiAKLQkJCXJnYjI0W2ogKiA0XSA9IGNsYW1wcmdi KHkwICsgYl8pOwotCQkJcmdiMjRbaiAqIDQgKyByZ2IyNF9zdHJpZGVdID0gY2xhbXByZ2IoeTEg KyBiXyk7CisJCQl3cml0ZV9yZ2IoJnJnYjI0W2ogKiA4ICsgMF0sICZyZ2JbMF0pOworCQkJd3Jp dGVfcmdiKCZyZ2IyNFtqICogOCArIDAgKyByZ2IyNF9zdHJpZGVdLCAmcmdiWzFdKTsKIAkJfQog CiAJCXJnYjI0ICs9IDIgKiByZ2IyNF9zdHJpZGU7CkBAIC0xNDA2LDIxICsxNDQ0LDM3IEBAIHN0 YXRpYyB2b2lkIGNvbnZlcnRfbnYxMl90b19yZ2IyNChzdHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0 IGZiX2NvbnZlcnRfYmxpdF91cGxvCiAKIAlpZiAoZmItPmhlaWdodCAmIDEpIHsKIAkJLyogQ29u dmVydCBsYXN0IHJvdyAqLwotCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoOyBqKyspIHsKLQkJ CWZsb2F0IHJfLCBnXywgYl8sIHkwLCBjYiwgY3I7CisJCWZvciAoaiA9IDA7IGogPCBmYi0+d2lk dGggLyAyOyBqKyspIHsKKwkJCS8qIENvbnZlcnQgMngxIHBpeGVsIGJsb2NrcyAqLworCQkJc3Ry dWN0IGlndF92ZWM0IHl1dlsyXTsKKwkJCXN0cnVjdCBpZ3RfdmVjNCByZ2JbMl07CisKKwkJCXl1 dlswXS5kWzBdID0geVtqICogMiArIDBdOworCQkJeXV2WzFdLmRbMF0gPSB5W2ogKiAyICsgMV07 CisJCQl5dXZbMF0uZFsxXSA9IHl1dlsxXS5kWzFdID0gdXZbaiAqIDIgKyAwXTsKKwkJCXl1dlsw XS5kWzJdID0geXV2WzFdLmRbMl0gPSB1dltqICogMiArIDFdOworCQkJeXV2WzBdLmRbM10gPSB5 dXZbMV0uZFszXSA9IDEuMGY7CisKKwkJCXJnYlswXSA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZt LCAmeXV2WzBdKTsKKwkJCXJnYlsxXSA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmeXV2WzFd KTsKKworCQkJd3JpdGVfcmdiKCZyZ2IyNFtqICogOCArIDBdLCAmcmdiWzBdKTsKKwkJCXdyaXRl X3JnYigmcmdiMjRbaiAqIDggKyA0XSwgJnJnYlswXSk7CisJCX0KKworCQlpZiAoZmItPndpZHRo ICYgMSkgewogCQkJLyogQ29udmVydCBzaW5nbGUgcGl4ZWwgKi8KKwkJCXN0cnVjdCBpZ3RfdmVj NCB5dXY7CisJCQlzdHJ1Y3QgaWd0X3ZlYzQgcmdiOwogCi0JCQljYiA9IHV2W2ogJiB+MV0gLSAx MjguZjsKLQkJCWNyID0gdXZbaiB8IDFdIC0gMTI4LmY7CisJCQl5dXYuZFswXSA9IHlbaiAqIDIg KyAwXTsKKwkJCXl1di5kWzFdID0gdXZbaiAqIDIgKyAwXTsKKwkJCXl1di5kWzJdID0gdXZbaiAq IDIgKyAxXTsKKwkJCXl1di5kWzNdID0gMS4wZjsKIAotCQkJeTAgPSAxLjE2NGYgKiAoeVtqXSAt IDE2LmYpOwotCQkJcl8gPSAgMC4wMDBmICogY2IgKyAgMS41OTZmICogY3I7Ci0JCQlnXyA9IC0w LjM5MmYgKiBjYiArIC0wLjgxM2YgKiBjcjsKLQkJCWJfID0gIDIuMDE3ZiAqIGNiICsgIDAuMDAw ZiAqIGNyOworCQkJcmdiID0gaWd0X21hdHJpeF90cmFuc2Zvcm0oJm0sICZ5dXYpOwogCi0JCQly Z2IyNFtqICogNCArIDJdID0gY2xhbXByZ2IoeTAgKyByXyk7Ci0JCQlyZ2IyNFtqICogNCArIDFd ID0gY2xhbXByZ2IoeTAgKyBnXyk7Ci0JCQlyZ2IyNFtqICogNF0gPSBjbGFtcHJnYih5MCArIGJf KTsKKwkJCXdyaXRlX3JnYigmcmdiMjRbaiAqIDggKyAwXSwgJnJnYik7CiAJCX0KIAl9CiAKQEAg LTE0MzUsNjUgKzE0ODksMTAxIEBAIHN0YXRpYyB2b2lkIGNvbnZlcnRfcmdiMjRfdG9fbnYxMihz dHJ1Y3QgaWd0X2ZiICpmYiwgc3RydWN0IGZiX2NvbnZlcnRfYmxpdF91cGxvCiAJY29uc3QgdWlu dDhfdCAqcmdiMjQgPSBibGl0LT5yZ2IyNC5tYXA7CiAJdW5zaWduZWQgcmdiMjRfc3RyaWRlID0g YmxpdC0+cmdiMjQuc3RyaWRlOwogCXVuc2lnbmVkIHBsYW5hcl9zdHJpZGUgPSBibGl0LT5saW5l YXIuc3RyaWRlOworCXN0cnVjdCBpZ3RfbWF0NCBtID0gaWd0X3JnYl90b195Y2Jjcl9tYXRyaXgo SUdUX0NPTE9SX1lDQkNSX0JUNjAxLAorCQkJCQkJICAgIElHVF9DT0xPUl9ZQ0JDUl9MSU1JVEVE X1JBTkdFKTsKIAogCWlndF9hc3NlcnRfZihmYi0+ZHJtX2Zvcm1hdCA9PSBEUk1fRk9STUFUX05W MTIsCiAJCSAgICAgIkNvbnZlcnNpb24gbm90IGltcGxlbWVudGVkIGZvciAhTlYxMiBwbGFuYXIg Zm9ybWF0c1xuIik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgZmItPnBsYW5lX2hlaWdodFswXTsgaSsr KSB7Ci0JCS8qIFVzZSBsaW1pdGVkIGNvbG9yIHJhbmdlIEJULjYwMSAqLwotCi0JCWZvciAoaiA9 IDA7IGogPCBmYi0+cGxhbmVfd2lkdGhbMF07IGorKykgewotCQkJZmxvYXQgeWYgPSAwLjI1N2Yg KiByZ2IyNFtqICogNCArIDJdICsKLQkJCQkgICAwLjUwNGYgKiByZ2IyNFtqICogNCArIDFdICsK LQkJCQkgICAwLjA5OGYgKiByZ2IyNFtqICogNF0gKyAxNjsKKwlmb3IgKGkgPSAwOyBpIDwgZmIt PmhlaWdodCAvIDI7IGkrKykgeworCQlmb3IgKGogPSAwOyBqIDwgZmItPndpZHRoIC8gMjsgaisr KSB7CisJCQkvKiBDb252ZXJ0IDJ4MiBwaXhlbCBibG9ja3MgKi8KKwkJCXN0cnVjdCBpZ3RfdmVj NCByZ2JbNF07CisJCQlzdHJ1Y3QgaWd0X3ZlYzQgeXV2WzRdOworCisJCQlyZWFkX3JnYigmcmdi WzBdLCAmcmdiMjRbaiAqIDggKyAwXSk7CisJCQlyZWFkX3JnYigmcmdiWzFdLCAmcmdiMjRbaiAq IDggKyA0XSk7CisJCQlyZWFkX3JnYigmcmdiWzJdLCAmcmdiMjRbaiAqIDggKyAwICsgcmdiMjRf c3RyaWRlXSk7CisJCQlyZWFkX3JnYigmcmdiWzNdLCAmcmdiMjRbaiAqIDggKyA0ICsgcmdiMjRf c3RyaWRlXSk7CisKKwkJCXl1dlswXSA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmcmdiWzBd KTsKKwkJCXl1dlsxXSA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmcmdiWzFdKTsKKwkJCXl1 dlsyXSA9IGlndF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmcmdiWzJdKTsKKwkJCXl1dlszXSA9IGln dF9tYXRyaXhfdHJhbnNmb3JtKCZtLCAmcmdiWzNdKTsKKworCQkJeVtqICogMiArIDBdID0geXV2 WzBdLmRbMF07CisJCQl5W2ogKiAyICsgMV0gPSB5dXZbMV0uZFswXTsKKwkJCXlbaiAqIDIgKyAw ICsgcGxhbmFyX3N0cmlkZV0gPSB5dXZbMl0uZFswXTsKKwkJCXlbaiAqIDIgKyAxICsgcGxhbmFy X3N0cmlkZV0gPSB5dXZbM10uZFswXTsKIAotCQkJeVtqXSA9ICh1aW50OF90KXlmOworCQkJLyoK KwkJCSAqIFdlIGFzc3VtZSB0aGUgTVBFRzIgY2hyb21hIHNpdGluZyBjb252ZW50aW9uLCB3aGVy ZQorCQkJICogcGl4ZWwgY2VudGVyIGZvciBDYidDcicgaXMgYmV0d2VlbiB0aGUgbGVmdCB0b3Ag YW5kCisJCQkgKiBib3R0b20gcGl4ZWwgaW4gYSAyeDIgYmxvY2ssIHNvIHRha2UgdGhlIGF2ZXJh Z2UuCisJCQkgKi8KKwkJCXV2W2ogKiAyICsgMF0gPSAoeXV2WzBdLmRbMV0gKyB5dXZbMl0uZFsx XSkgLyAyLjBmOworCQkJdXZbaiAqIDIgKyAxXSA9ICh5dXZbMF0uZFsyXSArIHl1dlsyXS5kWzJd KSAvIDIuMGY7CiAJCX0KIAotCQlyZ2IyNCArPSByZ2IyNF9zdHJpZGU7Ci0JCXkgKz0gcGxhbmFy X3N0cmlkZTsKLQl9CisJCWlmIChmYi0+d2lkdGggJiAxKSB7CisJCQkvKiBDb252ZXJ0IDF4MiBw aXhlbCBibG9jayAqLworCQkJc3RydWN0IGlndF92ZWM0IHJnYlsyXTsKKwkJCXN0cnVjdCBpZ3Rf dmVjNCB5dXZbMl07CiAKLQlyZ2IyNCA9IGJsaXQtPnJnYjI0Lm1hcDsKKwkJCXJlYWRfcmdiKCZy Z2JbMF0sICZyZ2IyNFtqICogOCArIDBdKTsKKwkJCXJlYWRfcmdiKCZyZ2JbMl0sICZyZ2IyNFtq ICogOCArIDAgKyByZ2IyNF9zdHJpZGVdKTsKKworCQkJeXV2WzBdID0gaWd0X21hdHJpeF90cmFu c2Zvcm0oJm0sICZyZ2JbMF0pOworCQkJeXV2WzFdID0gaWd0X21hdHJpeF90cmFuc2Zvcm0oJm0s ICZyZ2JbMV0pOworCisJCQl5W2ogKiAyICsgMF0gPSB5dXZbMF0uZFswXTsKKwkJCXlbaiAqIDIg KyAwICsgcGxhbmFyX3N0cmlkZV0gPSB5dXZbMV0uZFswXTsKIAotCWZvciAoaSA9IDA7IGkgPCBm Yi0+aGVpZ2h0IC8gMjsgaSsrKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+cGxhbmVfd2lkdGhb MV07IGorKykgewogCQkJLyoKLQkJCSAqIFBpeGVsIGNlbnRlciBmb3IgQ2InQ3InIGlzIGJldHdl ZW4gdGhlIGxlZnQgdG9wIGFuZAorCQkJICogV2UgYXNzdW1lIHRoZSBNUEVHMiBjaHJvbWEgc2l0 aW5nIGNvbnZlbnRpb24sIHdoZXJlCisJCQkgKiBwaXhlbCBjZW50ZXIgZm9yIENiJ0NyJyBpcyBi ZXR3ZWVuIHRoZSBsZWZ0IHRvcCBhbmQKIAkJCSAqIGJvdHRvbSBwaXhlbCBpbiBhIDJ4MiBibG9j aywgc28gdGFrZSB0aGUgYXZlcmFnZS4KIAkJCSAqLwotCQkJZmxvYXQgdWYgPSAtMC4xNDhmLzIg KiByZ2IyNFtqICogOCArIDJdICsKLQkJCQkgICAtMC4xNDhmLzIgKiByZ2IyNFtqICogOCArIDIg KyByZ2IyNF9zdHJpZGVdICsKLQkJCQkgICAtMC4yOTFmLzIgKiByZ2IyNFtqICogOCArIDFdICsK LQkJCQkgICAtMC4yOTFmLzIgKiByZ2IyNFtqICogOCArIDEgKyByZ2IyNF9zdHJpZGVdICsKLQkJ CQkgICAgMC40MzlmLzIgKiByZ2IyNFtqICogOF0gKwotCQkJCSAgICAwLjQzOWYvMiAqIHJnYjI0 W2ogKiA4ICsgcmdiMjRfc3RyaWRlXSArIDEyODsKLQkJCWZsb2F0IHZmID0gIDAuNDM5Zi8yICog cmdiMjRbaiAqIDggKyAyXSArCi0JCQkJICAgIDAuNDM5Zi8yICogcmdiMjRbaiAqIDggKyAyICsg cmdiMjRfc3RyaWRlXSArCi0JCQkJICAgLTAuMzY4Zi8yICogcmdiMjRbaiAqIDggKyAxXSArCi0J CQkJICAgLTAuMzY4Zi8yICogcmdiMjRbaiAqIDggKyAxICsgcmdiMjRfc3RyaWRlXSArCi0JCQkJ ICAgLTAuMDcxZi8yICogcmdiMjRbaiAqIDhdICsKLQkJCQkgICAtMC4wNzFmLzIgKiByZ2IyNFtq ICogOCArIHJnYjI0X3N0cmlkZV0gKyAxMjg7Ci0JCQl1dltqICogMl0gPSAodWludDhfdCl1ZjsK LQkJCXV2W2ogKiAyICsgMV0gPSAodWludDhfdCl2ZjsKKwkJCXV2W2ogKiAyICsgMF0gPSAoeXV2 WzBdLmRbMV0gKyB5dXZbMV0uZFsxXSkgLyAyLjBmOworCQkJdXZbaiAqIDIgKyAxXSA9ICh5dXZb MF0uZFsyXSArIHl1dlsxXS5kWzJdKSAvIDIuMGY7CiAJCX0KIAogCQlyZ2IyNCArPSAyICogcmdi MjRfc3RyaWRlOworCQl5ICs9IDIgKiBwbGFuYXJfc3RyaWRlOwogCQl1diArPSBwbGFuYXJfc3Ry aWRlOwogCX0KIAogCS8qIExhc3Qgcm93IGNhbm5vdCBiZSBpbnRlcnBvbGF0ZWQgYmV0d2VlbiAy IHBpeGVscywgdGFrZSB0aGUgc2luZ2xlIHZhbHVlICovCi0JaWYgKGkgPCBmYi0+cGxhbmVfaGVp Z2h0WzFdKSB7Ci0JCWZvciAoaiA9IDA7IGogPCBmYi0+cGxhbmVfd2lkdGhbMV07IGorKykgewot CQkJZmxvYXQgdWYgPSAtMC4xNDhmICogcmdiMjRbaiAqIDggKyAyXSArCi0JCQkJICAgLTAuMjkx ZiAqIHJnYjI0W2ogKiA4ICsgMV0gKwotCQkJCSAgICAwLjQzOWYgKiByZ2IyNFtqICogOF0gKyAx Mjg7Ci0JCQlmbG9hdCB2ZiA9ICAwLjQzOWYgKiByZ2IyNFtqICogOCArIDJdICsKLQkJCQkgICAt MC4zNjhmICogcmdiMjRbaiAqIDggKyAxXSArCi0JCQkJICAgLTAuMDcxZiAqIHJnYjI0W2ogKiA4 XSArIDEyODsKLQotCQkJdXZbaiAqIDJdID0gKHVpbnQ4X3QpdWY7Ci0JCQl1dltqICogMiArIDFd ID0gKHVpbnQ4X3QpdmY7CisJaWYgKGZiLT5oZWlnaHQgJiAxKSB7CisJCWZvciAoaiA9IDA7IGog PCBmYi0+d2lkdGggLyAyOyBqKyspIHsKKwkJCS8qIENvbnZlcnQgMngxIHBpeGVsIGJsb2NrcyAq LworCQkJc3RydWN0IGlndF92ZWM0IHJnYlsyXTsKKwkJCXN0cnVjdCBpZ3RfdmVjNCB5dXZbMl07 CisKKwkJCXJlYWRfcmdiKCZyZ2JbMF0sICZyZ2IyNFtqICogOCArIDBdKTsKKwkJCXJlYWRfcmdi KCZyZ2JbMV0sICZyZ2IyNFtqICogOCArIDRdKTsKKworCQkJeXV2WzBdID0gaWd0X21hdHJpeF90 cmFuc2Zvcm0oJm0sICZyZ2JbMF0pOworCQkJeXV2WzFdID0gaWd0X21hdHJpeF90cmFuc2Zvcm0o Jm0sICZyZ2JbMV0pOworCisJCQl5W2ogKiAyICsgMF0gPSB5dXZbMF0uZFswXTsKKwkJCXlbaiAq IDIgKyAxXSA9IHl1dlsxXS5kWzBdOworCQkJdXZbaiAqIDIgKyAwXSA9IHl1dlswXS5kWzFdOwor CQkJdXZbaiAqIDIgKyAxXSA9IHl1dlswXS5kWzJdOworCQl9CisKKwkJaWYgKGZiLT53aWR0aCAm IDEpIHsKKwkJCS8qIENvbnZlcnQgc2luZ2xlIHBpeGVsICovCisJCQlzdHJ1Y3QgaWd0X3ZlYzQg cmdiOworCQkJc3RydWN0IGlndF92ZWM0IHl1djsKKworCQkJcmVhZF9yZ2IoJnJnYiwgJnJnYjI0 W2ogKiA4ICsgMF0pOworCisJCQl5dXYgPSBpZ3RfbWF0cml4X3RyYW5zZm9ybSgmbSwgJnJnYik7 CisKKwkJCXlbaiAqIDIgKyAwXSA9IHl1di5kWzBdOworCQkJdXZbaiAqIDIgKyAwXSA9IHl1di5k WzFdOworCQkJdXZbaiAqIDIgKyAxXSA9IHl1di5kWzJdOwogCQl9CiAJfQogfQotLSAKMi4xNi4x CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK