From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4D10146483 for ; Sun, 18 Jun 2023 08:29:47 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6C9B368BF31; Sun, 18 Jun 2023 11:29:45 +0300 (EEST) Received: from smtp-my3-04p39.yunyou.top (smtp-my3-04p39.yunyou.top [60.247.169.39]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id AFF8768B3CA for ; Sun, 18 Jun 2023 11:29:37 +0300 (EEST) Received: from [192.168.15.107] (unknown [125.121.210.245]) by smtp-my-04.yunyou.top (WestCloudMail) with ESMTPA id B74C31550FC for ; Sun, 18 Jun 2023 16:29:31 +0800 (CST) Content-Type: multipart/mixed; boundary="------------oj83pf82s6KZnZsl08ztxDB6" Message-ID: Date: Sun, 18 Jun 2023 16:29:31 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.11.2 To: ffmpeg-devel@ffmpeg.org References: <20230604041756.5196-1-Logan.Lyu@myais.com.cn> From: "Logan.Lyu" Organization: myais In-Reply-To: Subject: Re: [FFmpeg-devel] [PATCH 1/5] lavc/aarch64: new optimization for 8-bit hevc_pel_uni_pixels X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: This is a multi-part message in MIME format. --------------oj83pf82s6KZnZsl08ztxDB6 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Hi, Martin, I modified it according to your comments. Please review again. And here are the checkasm benchmark results of the related functions: The platform I tested is the g8y instance of Alibaba Cloud, with a chip based on armv9. put_hevc_pel_uni_pixels4_8_c: 35.9 put_hevc_pel_uni_pixels4_8_neon: 7.6 put_hevc_pel_uni_pixels6_8_c: 46.1 put_hevc_pel_uni_pixels6_8_neon: 20.6 put_hevc_pel_uni_pixels8_8_c: 53.4 put_hevc_pel_uni_pixels8_8_neon: 11.6 put_hevc_pel_uni_pixels12_8_c: 89.1 put_hevc_pel_uni_pixels12_8_neon: 25.9 put_hevc_pel_uni_pixels16_8_c: 106.4 put_hevc_pel_uni_pixels16_8_neon: 20.4 put_hevc_pel_uni_pixels24_8_c: 137.6 put_hevc_pel_uni_pixels24_8_neon: 47.1 put_hevc_pel_uni_pixels32_8_c: 173.6 put_hevc_pel_uni_pixels32_8_neon: 54.1 put_hevc_pel_uni_pixels48_8_c: 268.1 put_hevc_pel_uni_pixels48_8_neon: 117.1 put_hevc_pel_uni_pixels64_8_c: 346.1 put_hevc_pel_uni_pixels64_8_neon: 205.9 在 2023/6/12 15:47, Martin Storsjö 写道: > On Sun, 4 Jun 2023, Logan.Lyu@myais.com.cn wrote: > >> From: Logan Lyu >> >> Signed-off-by: Logan Lyu >> --- >> libavcodec/aarch64/hevcdsp_init_aarch64.c |   5 ++ >> libavcodec/aarch64/hevcdsp_qpel_neon.S    | 104 ++++++++++++++++++++++ >> 2 files changed, 109 insertions(+) >> >> diff --git a/libavcodec/aarch64/hevcdsp_init_aarch64.c >> b/libavcodec/aarch64/hevcdsp_init_aarch64.c >> index 483a9d5253..5a1d520eec 100644 >> --- a/libavcodec/aarch64/hevcdsp_init_aarch64.c >> +++ b/libavcodec/aarch64/hevcdsp_init_aarch64.c >> @@ -152,6 +152,9 @@ void ff_hevc_put_hevc_qpel_bi_h16_8_neon(uint8_t >> *_dst, ptrdiff_t _dststride, co >>     void ff_hevc_put_hevc_##fn##32_8_neon##ext args; \ >>     void ff_hevc_put_hevc_##fn##64_8_neon##ext args; \ >> >> +NEON8_FNPROTO(pel_uni_pixels, (uint8_t *_dst, ptrdiff_t _dststride, >> +        const uint8_t *_src, ptrdiff_t _srcstride, >> +        int height, intptr_t mx, intptr_t my, int width),); >> >> NEON8_FNPROTO(pel_uni_w_pixels, (uint8_t *_dst, ptrdiff_t _dststride, >>         const uint8_t *_src, ptrdiff_t _srcstride, >> @@ -263,6 +266,8 @@ av_cold void >> ff_hevc_dsp_init_aarch64(HEVCDSPContext *c, const int bit_depth) >>         c->put_hevc_qpel_bi[8][0][1]   = >>         c->put_hevc_qpel_bi[9][0][1]   = >> ff_hevc_put_hevc_qpel_bi_h16_8_neon; >> >> +        NEON8_FNASSIGN(c->put_hevc_epel_uni, 0, 0, pel_uni_pixels,); >> +        NEON8_FNASSIGN(c->put_hevc_qpel_uni, 0, 0, pel_uni_pixels,); >>         NEON8_FNASSIGN(c->put_hevc_epel_uni_w, 0, 0, pel_uni_w_pixels,); >>         NEON8_FNASSIGN(c->put_hevc_qpel_uni_w, 0, 0, pel_uni_w_pixels,); >>         NEON8_FNASSIGN_PARTIAL_4(c->put_hevc_qpel_uni_w, 1, 0, >> qpel_uni_w_v,); >> diff --git a/libavcodec/aarch64/hevcdsp_qpel_neon.S >> b/libavcodec/aarch64/hevcdsp_qpel_neon.S >> index ed659cfe9b..6ca05b7201 100644 >> --- a/libavcodec/aarch64/hevcdsp_qpel_neon.S >> +++ b/libavcodec/aarch64/hevcdsp_qpel_neon.S >> @@ -490,6 +490,110 @@ put_hevc qpel >> put_hevc qpel_uni >> put_hevc qpel_bi >> >> +function ff_hevc_put_hevc_pel_uni_pixels4_8_neon, export=1 >> +1: >> +        ldr             s0, [x2] >> +        ldr             s1, [x2, x3] >> +        add             x2, x2, x3, lsl #1 >> +        str             s0, [x0] >> +        str             s1, [x0, x1] >> +        add             x0, x0, x1, lsl #1 >> +        subs            w4, w4, #2 >> +        b.hi            1b >> +        ret >> +endfunc > > In a loop like this, I would recommend moving the "subs" instruction > further away from the branch that depends on it. For cores with > in-order execution, it does matter a fair bit, while it probably > doesn't for cores with out-of-order execution. Here, the ideal > location probably is after the two loads at the start. The same thing > goes for all the other functions in this patch. > > Other than that, this looks ok. > > // Martin > > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------oj83pf82s6KZnZsl08ztxDB6 Content-Type: text/plain; charset=UTF-8; name="0001-lavc-aarch64-new-optimization-for-8-bit-hevc_pel_uni_pixels.patch" Content-Disposition: attachment; filename*0="0001-lavc-aarch64-new-optimization-for-8-bit-hevc_pel_uni_pi"; filename*1="xels.patch" Content-Transfer-Encoding: base64 RnJvbSBhNjU0YjQxZmQ4YjEwMGY2MzFkYjQ5YmQ0MTllZjY1NTk0ZWYzMmIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBMb2dhbiBMeXUgPExvZ2FuLkx5dUBteWFpcy5jb20u Y24+CkRhdGU6IFN1biwgNyBNYXkgMjAyMyAxNjo1ODozMCArMDgwMApTdWJqZWN0OiBbUEFU Q0ggMS81XSBsYXZjL2FhcmNoNjQ6IG5ldyBvcHRpbWl6YXRpb24gZm9yIDgtYml0CiBoZXZj X3BlbF91bmlfcGl4ZWxzCgpTaWduZWQtb2ZmLWJ5OiBMb2dhbiBMeXUgPExvZ2FuLkx5dUBt eWFpcy5jb20uY24+Ci0tLQogbGliYXZjb2RlYy9hYXJjaDY0L2hldmNkc3BfaW5pdF9hYXJj aDY0LmMgfCAgIDUgKysKIGxpYmF2Y29kZWMvYWFyY2g2NC9oZXZjZHNwX3FwZWxfbmVvbi5T ICAgIHwgMTA0ICsrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTA5 IGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhcmNoNjQvaGV2Y2Rz cF9pbml0X2FhcmNoNjQuYyBiL2xpYmF2Y29kZWMvYWFyY2g2NC9oZXZjZHNwX2luaXRfYWFy Y2g2NC5jCmluZGV4IDQ4M2E5ZDUyNTMuLjVhMWQ1MjBlZWMgMTAwNjQ0Ci0tLSBhL2xpYmF2 Y29kZWMvYWFyY2g2NC9oZXZjZHNwX2luaXRfYWFyY2g2NC5jCisrKyBiL2xpYmF2Y29kZWMv YWFyY2g2NC9oZXZjZHNwX2luaXRfYWFyY2g2NC5jCkBAIC0xNTIsNiArMTUyLDkgQEAgdm9p ZCBmZl9oZXZjX3B1dF9oZXZjX3FwZWxfYmlfaDE2XzhfbmVvbih1aW50OF90ICpfZHN0LCBw dHJkaWZmX3QgX2RzdHN0cmlkZSwgY28KICAgICB2b2lkIGZmX2hldmNfcHV0X2hldmNfIyNm biMjMzJfOF9uZW9uIyNleHQgYXJnczsgXAogICAgIHZvaWQgZmZfaGV2Y19wdXRfaGV2Y18j I2ZuIyM2NF84X25lb24jI2V4dCBhcmdzOyBcCiAKK05FT044X0ZOUFJPVE8ocGVsX3VuaV9w aXhlbHMsICh1aW50OF90ICpfZHN0LCBwdHJkaWZmX3QgX2RzdHN0cmlkZSwKKyAgICAgICAg Y29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90IF9zcmNzdHJpZGUsCisgICAgICAgIGlu dCBoZWlnaHQsIGludHB0cl90IG14LCBpbnRwdHJfdCBteSwgaW50IHdpZHRoKSwpOwogCiBO RU9OOF9GTlBST1RPKHBlbF91bmlfd19waXhlbHMsICh1aW50OF90ICpfZHN0LCBwdHJkaWZm X3QgX2RzdHN0cmlkZSwKICAgICAgICAgY29uc3QgdWludDhfdCAqX3NyYywgcHRyZGlmZl90 IF9zcmNzdHJpZGUsCkBAIC0yNjMsNiArMjY2LDggQEAgYXZfY29sZCB2b2lkIGZmX2hldmNf ZHNwX2luaXRfYWFyY2g2NChIRVZDRFNQQ29udGV4dCAqYywgY29uc3QgaW50IGJpdF9kZXB0 aCkKICAgICAgICAgYy0+cHV0X2hldmNfcXBlbF9iaVs4XVswXVsxXSAgID0KICAgICAgICAg Yy0+cHV0X2hldmNfcXBlbF9iaVs5XVswXVsxXSAgID0gZmZfaGV2Y19wdXRfaGV2Y19xcGVs X2JpX2gxNl84X25lb247CiAKKyAgICAgICAgTkVPTjhfRk5BU1NJR04oYy0+cHV0X2hldmNf ZXBlbF91bmksIDAsIDAsIHBlbF91bmlfcGl4ZWxzLCk7CisgICAgICAgIE5FT044X0ZOQVNT SUdOKGMtPnB1dF9oZXZjX3FwZWxfdW5pLCAwLCAwLCBwZWxfdW5pX3BpeGVscywpOwogICAg ICAgICBORU9OOF9GTkFTU0lHTihjLT5wdXRfaGV2Y19lcGVsX3VuaV93LCAwLCAwLCBwZWxf dW5pX3dfcGl4ZWxzLCk7CiAgICAgICAgIE5FT044X0ZOQVNTSUdOKGMtPnB1dF9oZXZjX3Fw ZWxfdW5pX3csIDAsIDAsIHBlbF91bmlfd19waXhlbHMsKTsKICAgICAgICAgTkVPTjhfRk5B U1NJR05fUEFSVElBTF80KGMtPnB1dF9oZXZjX3FwZWxfdW5pX3csIDEsIDAsIHFwZWxfdW5p X3dfdiwpOwpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9hYXJjaDY0L2hldmNkc3BfcXBlbF9u ZW9uLlMgYi9saWJhdmNvZGVjL2FhcmNoNjQvaGV2Y2RzcF9xcGVsX25lb24uUwppbmRleCBl ZDY1OWNmZTliLi5lZDViNTAyN2RiIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FhcmNoNjQv aGV2Y2RzcF9xcGVsX25lb24uUworKysgYi9saWJhdmNvZGVjL2FhcmNoNjQvaGV2Y2RzcF9x cGVsX25lb24uUwpAQCAtNDkwLDYgKzQ5MCwxMTAgQEAgcHV0X2hldmMgcXBlbAogcHV0X2hl dmMgcXBlbF91bmkKIHB1dF9oZXZjIHFwZWxfYmkKIAorZnVuY3Rpb24gZmZfaGV2Y19wdXRf aGV2Y19wZWxfdW5pX3BpeGVsczRfOF9uZW9uLCBleHBvcnQ9MQorMToKKyAgICAgICAgbGRy ICAgICAgICAgICAgIHMwLCBbeDJdCisgICAgICAgIGxkciAgICAgICAgICAgICBzMSwgW3gy LCB4M10KKyAgICAgICAgc3VicyAgICAgICAgICAgIHc0LCB3NCwgIzIKKyAgICAgICAgYWRk ICAgICAgICAgICAgIHgyLCB4MiwgeDMsIGxzbCAjMQorICAgICAgICBzdHIgICAgICAgICAg ICAgczAsIFt4MF0KKyAgICAgICAgc3RyICAgICAgICAgICAgIHMxLCBbeDAsIHgxXQorICAg ICAgICBhZGQgICAgICAgICAgICAgeDAsIHgwLCB4MSwgbHNsICMxCisgICAgICAgIGIuaGkg ICAgICAgICAgICAxYgorICAgICAgICByZXQKK2VuZGZ1bmMKKworZnVuY3Rpb24gZmZfaGV2 Y19wdXRfaGV2Y19wZWxfdW5pX3BpeGVsczZfOF9uZW9uLCBleHBvcnQ9MQorICAgICAgICBz dWIgICAgICAgICAgICAgeDEsIHgxLCAjNAorMToKKyAgICAgICAgbGRyICAgICAgICAgICAg IGQwLCBbeDJdCisgICAgICAgIGxkciAgICAgICAgICAgICBkMSwgW3gyLCB4M10KKyAgICAg ICAgc3VicyAgICAgICAgICAgIHc0LCB3NCwgIzIKKyAgICAgICAgYWRkICAgICAgICAgICAg IHgyLCB4MiwgeDMsIGxzbCAjMQorICAgICAgICBzdHIgICAgICAgICAgICAgczAsIFt4MF0s ICM0CisgICAgICAgIHN0MSAgICAgICAgICAgICB7djAuaH1bMl0sIFt4MF0sIHgxCisgICAg ICAgIHN0ciAgICAgICAgICAgICBzMSwgW3gwXSwgIzQKKyAgICAgICAgc3QxICAgICAgICAg ICAgIHt2MS5ofVsyXSwgW3gwXSwgeDEKKyAgICAgICAgYi5oaSAgICAgICAgICAgIDFiCisg ICAgICAgIHJldAorZW5kZnVuYworCitmdW5jdGlvbiBmZl9oZXZjX3B1dF9oZXZjX3BlbF91 bmlfcGl4ZWxzOF84X25lb24sIGV4cG9ydD0xCisxOgorICAgICAgICBsZHIgICAgICAgICAg ICAgZDAsIFt4Ml0KKyAgICAgICAgbGRyICAgICAgICAgICAgIGQxLCBbeDIsIHgzXQorICAg ICAgICBzdWJzICAgICAgICAgICAgdzQsIHc0LCAjMgorICAgICAgICBhZGQgICAgICAgICAg ICAgeDIsIHgyLCB4MywgbHNsICMxCisgICAgICAgIHN0ciAgICAgICAgICAgICBkMCwgW3gw XQorICAgICAgICBzdHIgICAgICAgICAgICAgZDEsIFt4MCwgeDFdCisgICAgICAgIGFkZCAg ICAgICAgICAgICB4MCwgeDAsIHgxLCBsc2wgIzEKKyAgICAgICAgYi5oaSAgICAgICAgICAg IDFiCisgICAgICAgIHJldAorZW5kZnVuYworCitmdW5jdGlvbiBmZl9oZXZjX3B1dF9oZXZj X3BlbF91bmlfcGl4ZWxzMTJfOF9uZW9uLCBleHBvcnQ9MQorICAgICAgICBzdWIgICAgICAg ICAgICAgeDEsIHgxLCAjOAorMToKKyAgICAgICAgbGRyICAgICAgICAgICAgIHEwLCBbeDJd CisgICAgICAgIGxkciAgICAgICAgICAgICBxMSwgW3gyLCB4M10KKyAgICAgICAgc3VicyAg ICAgICAgICAgIHc0LCB3NCwgIzIKKyAgICAgICAgYWRkICAgICAgICAgICAgIHgyLCB4Miwg eDMsIGxzbCAjMQorICAgICAgICBzdHIgICAgICAgICAgICAgZDAsIFt4MF0sICM4CisgICAg ICAgIHN0MSAgICAgICAgICAgICB7djAuc31bMl0sIFt4MF0sIHgxCisgICAgICAgIHN0ciAg ICAgICAgICAgICBkMSwgW3gwXSwgIzgKKyAgICAgICAgc3QxICAgICAgICAgICAgIHt2MS5z fVsyXSwgW3gwXSwgeDEKKyAgICAgICAgYi5oaSAgICAgICAgICAgIDFiCisgICAgICAgIHJl dAorZW5kZnVuYworCitmdW5jdGlvbiBmZl9oZXZjX3B1dF9oZXZjX3BlbF91bmlfcGl4ZWxz MTZfOF9uZW9uLCBleHBvcnQ9MQorMToKKyAgICAgICAgbGRyICAgICAgICAgICAgIHEwLCBb eDJdCisgICAgICAgIGxkciAgICAgICAgICAgICBxMSwgW3gyLCB4M10KKyAgICAgICAgc3Vi cyAgICAgICAgICAgIHc0LCB3NCwgIzIKKyAgICAgICAgYWRkICAgICAgICAgICAgIHgyLCB4 MiwgeDMsIGxzbCAjMQorICAgICAgICBzdHIgICAgICAgICAgICAgcTAsIFt4MF0KKyAgICAg ICAgc3RyICAgICAgICAgICAgIHExLCBbeDAsIHgxXQorICAgICAgICBhZGQgICAgICAgICAg ICAgeDAsIHgwLCB4MSwgbHNsICMxCisgICAgICAgIGIuaGkgICAgICAgICAgICAxYgorICAg ICAgICByZXQKK2VuZGZ1bmMKKworZnVuY3Rpb24gZmZfaGV2Y19wdXRfaGV2Y19wZWxfdW5p X3BpeGVsczI0XzhfbmVvbiwgZXhwb3J0PTEKKzE6CisgICAgICAgIGxkMSAgICAgICAgICAg ICB7djAuOGIsIHYxLjhiLCB2Mi44Yn0sIFt4Ml0sIHgzCisgICAgICAgIHN1YnMgICAgICAg ICAgICB3NCwgdzQsICMxCisgICAgICAgIHN0MSAgICAgICAgICAgICB7djAuOGIsIHYxLjhi LCB2Mi44Yn0sIFt4MF0sIHgxCisgICAgICAgIGIuaGkgICAgICAgICAgICAxYgorICAgICAg ICByZXQKK2VuZGZ1bmMKKworZnVuY3Rpb24gZmZfaGV2Y19wdXRfaGV2Y19wZWxfdW5pX3Bp eGVsczMyXzhfbmVvbiwgZXhwb3J0PTEKKzE6CisgICAgICAgIGxkMSAgICAgICAgICAgICB7 djAuMTZiLCB2MS4xNmJ9LCBbeDJdLCB4MworICAgICAgICBzdWJzICAgICAgICAgICAgdzQs IHc0LCAjMQorICAgICAgICBzdDEgICAgICAgICAgICAge3YwLjE2YiwgdjEuMTZifSwgW3gw XSwgeDEKKyAgICAgICAgYi5oaSAgICAgICAgICAgIDFiCisgICAgICAgIHJldAorZW5kZnVu YworCitmdW5jdGlvbiBmZl9oZXZjX3B1dF9oZXZjX3BlbF91bmlfcGl4ZWxzNDhfOF9uZW9u LCBleHBvcnQ9MQorMToKKyAgICAgICAgbGQxICAgICAgICAgICAgIHt2MC4xNmIsIHYxLjE2 YiwgdjIuMTZifSwgW3gyXSwgeDMKKyAgICAgICAgc3VicyAgICAgICAgICAgIHc0LCB3NCwg IzEKKyAgICAgICAgc3QxICAgICAgICAgICAgIHt2MC4xNmIsIHYxLjE2YiwgdjIuMTZifSwg W3gwXSwgeDEKKyAgICAgICAgYi5oaSAgICAgICAgICAgIDFiCisgICAgICAgIHJldAorZW5k ZnVuYworCitmdW5jdGlvbiBmZl9oZXZjX3B1dF9oZXZjX3BlbF91bmlfcGl4ZWxzNjRfOF9u ZW9uLCBleHBvcnQ9MQorMToKKyAgICAgICAgbGQxICAgICAgICAgICAgIHt2MC4xNmIsIHYx LjE2YiwgdjIuMTZiLCB2My4xNmJ9LCBbeDJdLCB4MworICAgICAgICBzdWJzICAgICAgICAg ICAgdzQsIHc0LCAjMQorICAgICAgICBzdDEgICAgICAgICAgICAge3YwLjE2YiwgdjEuMTZi LCB2Mi4xNmIsIHYzLjE2Yn0sIFt4MF0sIHgxCisgICAgICAgIGIuaGkgICAgICAgICAgICAx YgorICAgICAgICByZXQKK2VuZGZ1bmMKIAogZnVuY3Rpb24gZmZfaGV2Y19wdXRfaGV2Y19w ZWxfdW5pX3dfcGl4ZWxzNF84X25lb24sIGV4cG9ydD0xCiAgICAgICAgIG1vdiAgICAgICAg ICAgICB3MTAsICMtNgotLSAKMi4zOC4wLndpbmRvd3MuMQoK --------------oj83pf82s6KZnZsl08ztxDB6 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe". --------------oj83pf82s6KZnZsl08ztxDB6--