From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nm33-vm10.bullet.mail.sg3.yahoo.com (nm33-vm10.bullet.mail.sg3.yahoo.com [106.10.151.233]) by dpdk.org (Postfix) with ESMTP id 7FA465947 for ; Thu, 23 Jul 2015 07:44:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.com.hk; s=s2048; t=1437630268; bh=cU19oYiX27EzdQW+6iI7TYR9fsyce2/vD7OwZvkW5cY=; h=Date:From:Reply-To:To:Cc:In-Reply-To:References:Subject:From:Subject; b=YNgW/CTwEpVs1IMtS3Ymoez0ZBxQkQqJNmrvcQ1oDLolHwR3PZitvmGL9Zck0dE6VwROBevVY6FK1kOyjhxSXcljPeS7bZMVVj+LP9ep3bNwXTiQe30HGbkMJB8rYE6I7oc/SYvMTLmu+GZckX8s+eymCDLgMwiUaHMxd/2/BxKMFU1iM9BM53OlAPUZ+jFmnZZh1ZQLfbDdIZCywtaC+8TtDb0sF1bcewrmuS9bcpP6R4KMBxwiEsxYCNi2xFnXBfVyVblEHTKduiMTwaY/FMDK3dYGEDoQOZMhGgMtTVi+BjETgruqs0S3n9qMBIr5yryQY/5LioYxouvdjfUzfA== Received: from [106.10.166.119] by nm33.bullet.mail.sg3.yahoo.com with NNFMP; 23 Jul 2015 05:44:28 -0000 Received: from [106.10.150.28] by tm8.bullet.mail.sg3.yahoo.com with NNFMP; 23 Jul 2015 05:44:28 -0000 Received: from [127.0.0.1] by omp1029.mail.sg3.yahoo.com with NNFMP; 23 Jul 2015 05:44:28 -0000 X-Yahoo-Newman-Property: ymail-3 X-Yahoo-Newman-Id: 725700.90308.bm@omp1029.mail.sg3.yahoo.com X-YMail-OSG: 6yUto7wVM1lK6D1_9alD6rShL7YRqc4h8cPZnDcpD_Y5d_RxXLKG5OjSJSB1AUJ 8j.EK7sUMRbvrynprng2SDg8wHIDwXJFKzQBMENCEXW7Gh_6q62Vm8jUz1Uh9_ynrmMYRZlgZOJH v7EoSa64H9Hyov592odtdvQSupPMwEDlQYliYhXZAXdDcCcA.6PC4HbNmbRjwpIFQVFwAQNmqGDR embXE_PnZgANPhKB3lTIjj6oFEQ4QZ3sQNnUcqyP7ZSQsXT3T5O5BSbDVOEi5SsSlmKB1FnHZTlW yC3rztaCJ55q4DnCbJaoW813gsNA1mJmtQSuVMve.IAJqfFxjk7psuWSzgwK.1zKxm3h7yvXx01R r7X6DuO8PDZIzuKQMZUTXQmOB2m4PnjB4pSeZFuRDNu.1RB8LaBQ9FR8ZeNmES3G5brXWJC3QpQb Jjk4.mpXJsoz2fAe7Cq94WvJpysYZqUQ3er2DhQEgoha5cJsl7wtSyVNUT7yk4b.aQ32i3pddyFE 7ACpF Received: by 106.10.196.92; Thu, 23 Jul 2015 05:44:28 +0000 Date: Thu, 23 Jul 2015 05:44:27 +0000 (UTC) From: MAC Lee To: Stephen Hemminger Message-ID: <1629788597.582932.1437630267877.JavaMail.yahoo@mail.yahoo.com> In-Reply-To: <20150722222731.497b2abc@uryu.home.lan> References: <20150722222731.497b2abc@uryu.home.lan> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Cc: "dev@dpdk.org" Subject: [dpdk-dev] =?utf-8?b?5Zue6KaG77iwICBbUEFUQ0hdIFRoZSBWTVhORVQzIFBN?= =?utf-8?q?D_can=27t_receive_packet_suddenly_after_a_lot_of_traffic_coming?= =?utf-8?q?_in=2E_The_root_cause_is_due_to_mbuf_allocation_fail_in_vmxnet3?= =?utf-8?q?=5Fpost=5Frx=5Fbufs=28=29_and_there_is_no_error_handling_when_i?= =?utf-8?q?t_is_called_from_vmxnet3=5Frecv=5Fpkts=28=29=2E_The_RXD_will_no?= =?utf-8?q?t_have_=22free=22_mbuf_for_it_but_the_counter_still_increment?= =?utf-8?q?=2E_Finally=2C_no_packet_can_be_received=2E_This_fix_is_allocat?= =?utf-8?q?e_the_mbuf_first=2C_if_the_allocation_is_failed=2C_then_don=27t?= =?utf-8?q?_receive_any_packet_and_the_packet_will_remain_in_RXD_to_preven?= =?utf-8?q?t_any_packet_drop=2EIf_the_allocation_is_sucess=2C_the_vmxnet3?= =?utf-8?b?X3Bvc3RfcnhfYnVmcygpIHdpbGwgY2FsbCB2bXhuZXQzX3JlbmV3X2Rlc2Mo?= =?utf-8?q?=29_and_RXD_will_be_renew_inside=2E?= X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list Reply-To: MAC Lee List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jul 2015 05:44:31 -0000 Hi Stephen,=C2=A0 =C2=A0 I have question about point 1 and want to discuss = with you. Why it will cause deadlock if just stop receiving it in this case= s? =C2=A0And I also found VMXNET3 PMD have the same bug in RX. I will rewor= k the patch and submit later. Thanks! Best Regards,Marco=20 Stephen Hemminger =E6=96=BC 2015=E5=B9=B4= 07=E6=9C=8823=E6=97=A5 (=E9=80=B1=E5=9B=9B) 1:27 PM =E5=AF=AB=E9=81=93=EF= =B9=95 =20 On Thu, 23 Jul 2015 09:48:55 +0800 mac_leehk@yahoo.com.hk wrote: > From: marco Thank you for addressing a real bug.=20 But there are several issues with the patch as submitted: * the standard way to handle allocation failure in network drivers is to d= rop the =C2=A0 received packet and reuse the available data buffer (mbuf) for the n= ext packet. =C2=A0 It looks like your code would just stop receiving which could cause = deadlock. * the mail is formatted in a manner than is incompatible with merging into= git. =C2=A0 All submissions should have a short < 60 character Subject with a su= mmary =C2=A0 followed by a description.=C2=A0 I don't know what mail client you u= sed but everything =C2=A0 is smashed into the Subject. * all patches require a Signed-off-by with a real name for Developer's Cer= tificate Of Origin * the style is wrong, indentation is a mess please indent with tabs not sp= aces. * avoid extra comments, often in code too many comments are worse than too= few Please rework your patch and resubmit it. >=C2=A0 drivers/net/vmxnet3/vmxnet3_rxtx.c |=C2=A0 54 +++++++++++++++++++++= ++++++++++++++- >=C2=A0 1 file changed, 53 insertions(+), 1 deletion(-) >=C2=A0 mode change 100644 =3D> 100755 drivers/net/vmxnet3/vmxnet3_rxtx.c >=20 > diff --git a/drivers/net/vmxnet3/vmxnet3_rxtx.c b/drivers/net/vmxnet3/vmx= net3_rxtx.c > old mode 100644 > new mode 100755 > index 39ad6ef..d560bbb > --- a/drivers/net/vmxnet3/vmxnet3_rxtx.c > +++ b/drivers/net/vmxnet3/vmxnet3_rxtx.c > @@ -421,6 +421,51 @@ vmxnet3_xmit_pkts(void *tx_queue, struct rte_mbuf **= tx_pkts, >=C2=A0 =C2=A0=C2=A0=C2=A0 return nb_tx; >=C2=A0 } >=C2=A0=20 > +static inline void > +vmxnet3_renew_desc(vmxnet3_rx_queue_t *rxq, uint8_t ring_id,struct rte_m= buf *mbuf) > +{ > +=C2=A0=C2=A0=C2=A0 uint32_t=C2=A0 val =3D 0; > +=C2=A0=C2=A0=C2=A0 struct vmxnet3_cmd_ring *ring =3D &rxq->cmd_ring[ring= _id]; > + > +=C2=A0=C2=A0=C2=A0 struct Vmxnet3_RxDesc *rxd; > +=C2=A0=C2=A0=C2=A0 vmxnet3_buf_info_t *buf_info =3D &ring->buf_info[ring= ->next2fill]; > + > +=C2=A0=C2=A0=C2=A0 rxd =3D (struct Vmxnet3_RxDesc *)(ring->base + ring->= next2fill); > + > +=C2=A0=C2=A0=C2=A0 if (ring->rid =3D=3D 0) { > +=C2=A0=C2=A0=C2=A0 /* Usually: One HEAD type buf per packet > +=C2=A0=C2=A0=C2=A0 * val =3D (ring->next2fill % rxq->hw->bufs_per_pkt) ? > +=C2=A0=C2=A0=C2=A0 * VMXNET3_RXD_BTYPE_BODY : VMXNET3_RXD_BTYPE_HEAD; > +=C2=A0=C2=A0=C2=A0 */ > + > +=C2=A0=C2=A0=C2=A0 /* We use single packet buffer so all heads here */ > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 val =3D VMXNET3_RXD_BTYPE_HEAD; > +=C2=A0=C2=A0=C2=A0 } else { > +=C2=A0=C2=A0=C2=A0 /* All BODY type buffers for 2nd ring; which won't be= used at all by ESXi */ > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 val =3D VMXNET3_RXD_BTYPE_BODY; > +=C2=A0=C2=A0=C2=A0 } > + > +=C2=A0=C2=A0=C2=A0 /* > +=C2=A0=C2=A0=C2=A0 * Load mbuf pointer into buf_info[ring_size] > +=C2=A0=C2=A0=C2=A0 * buf_info structure is equivalent to cookie for virt= io-virtqueue > +=C2=A0=C2=A0=C2=A0 */ > +=C2=A0=C2=A0=C2=A0 buf_info->m =3D mbuf; > +=C2=A0=C2=A0=C2=A0 buf_info->len =3D (uint16_t)(mbuf->buf_len - > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2= =A0 =C2=A0=C2=A0=C2=A0 =C2=A0 RTE_PKTMBUF_HEADROOM); > +=C2=A0=C2=A0=C2=A0 buf_info->bufPA =3D RTE_MBUF_DATA_DMA_ADDR_DEFAULT(mb= uf); > + > +=C2=A0=C2=A0=C2=A0 /* Load Rx Descriptor with the buffer's GPA */ > +=C2=A0=C2=A0=C2=A0 rxd->addr =3D buf_info->bufPA; > + > +=C2=A0=C2=A0=C2=A0 /* After this point rxd->addr MUST not be NULL */ > +=C2=A0=C2=A0=C2=A0 rxd->btype =3D val; > +=C2=A0=C2=A0=C2=A0 rxd->len =3D buf_info->len; > +=C2=A0=C2=A0=C2=A0 /* Flip gen bit at the end to change ownership */ > +=C2=A0=C2=A0=C2=A0 rxd->gen =3D ring->gen; > + > +=C2=A0=C2=A0=C2=A0 vmxnet3_cmd_ring_adv_next2fill(ring); > + > +} >=C2=A0 /* >=C2=A0 *=C2=A0 Allocates mbufs and clusters. Post rx descriptors with buff= er details >=C2=A0 *=C2=A0 so that device can receive packets in those buffers. > @@ -575,8 +620,15 @@ vmxnet3_recv_pkts(void *rx_queue, struct rte_mbuf **= rx_pkts, uint16_t nb_pkts) >=C2=A0 =C2=A0=C2=A0=C2=A0 } >=C2=A0=20 >=C2=A0 =C2=A0=C2=A0=C2=A0 while (rcd->gen =3D=3D rxq->comp_ring.gen) { > +=C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 struct rte_mbuf *rep; >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if (nb_rx >=3D nb_pkts) >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 break; > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=20 > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 rep =3D rte_rxmbuf_alloc(rxq->mp); > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 if (rep =3D=3D NULL) { > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2= =A0=C2=A0 rxq->stats.rx_buf_alloc_failure++; > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2= =A0=C2=A0 break; > +=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0=C2=A0 } >=C2=A0=20 >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 idx =3D rcd->rxdIdx; >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 ring_idx =3D (uint8_t)((rcd->= rqID =3D=3D rxq->qid1) ? 0 : 1); > @@ -657,7 +709,7 @@ rcd_done: >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 VMXNET3_INC_RING_IDX_ONLY(rxq= ->cmd_ring[ring_idx].next2comp, rxq->cmd_ring[ring_idx].size); >=C2=A0=20 >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 /* It's time to allocate some= new buf and renew descriptors */ > -=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 vmxnet3_post_rx_bufs(rxq, ring_idx= ); > +=C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 vmxnet3_renew_desc(rxq, ring_idx,r= ep); >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 if (unlikely(rxq->shared->ctr= l.updateRxProd)) { >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 VMXNET3_WR= ITE_BAR0_REG(hw, rxprod_reg[ring_idx] + (rxq->queue_id * VMXNET3_REG_ALIGN)= , >=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0=C2= =A0=C2=A0 =C2=A0=C2=A0=C2=A0 =C2=A0 =C2=A0 =C2=A0 rxq->cmd_ring[ring_idx].n= ext2fill); >From harish.patil@qlogic.com Thu Jul 23 08:51:58 2015 Return-Path: Received: from mx0b-0016ce01.pphosted.com (mx0b-0016ce01.pphosted.com [67.231.156.153]) by dpdk.org (Postfix) with ESMTP id BBF7658CB for ; Thu, 23 Jul 2015 08:51:58 +0200 (CEST) Received: from pps.filterd (m0085408.ppops.net [127.0.0.1]) by mx0b-0016ce01.pphosted.com (8.15.0.59/8.15.0.59) with SMTP id t6N6m3Ua015958; Wed, 22 Jul 2015 23:51:57 -0700 Received: from avcashub1.qlogic.com (avcashub3.qlogic.com [198.70.193.117]) by mx0b-0016ce01.pphosted.com with ESMTP id 1vqnsmxvye-1 (version=TLSv1/SSLv3 cipher=AES128-SHA bits=128 verify=NOT); Wed, 22 Jul 2015 23:51:57 -0700 Received: from AVMB1.qlogic.org ([fe80::b816:e739:5ab3:5221]) by avcashub3.qlogic.org ([::1]) with mapi id 14.03.0235.001; Wed, 22 Jul 2015 23:51:56 -0700 From: Harish Patil To: Stephen Hemminger Thread-Topic: [PATCH v5 0/4] bnx2x: poll mode driver Thread-Index: AQHQwwnF3xcML92/X0uftJCdXdgo+53oog0A Date: Thu, 23 Jul 2015 06:51:55 +0000 Message-ID: References: <1437410000-15907-1-git-send-email-stephen@networkplumber.org> In-Reply-To: <1437410000-15907-1-git-send-email-stephen@networkplumber.org> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.1.4.10] Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=nai engine=5700 definitions=7870 signatures=670613 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1506180000 definitions=main-1507230111 Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH v5 0/4] bnx2x: poll mode driver X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 23 Jul 2015 06:51:59 -0000 Pg0KPkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uICh2NSk6DQo+ICAtIHJlYmFzZSB0byAyLjEuMC1y YzENCj4gIC0gZml4IHZlcnNpb24gbWFwIGZvciAyLjENCj4gIC0gZml4IGRveHlnZW4gY29tbWVu dHMNCj4gIC0gYWRkIEJDTTU3NDEwIGlkcw0KPg0KPlN0ZXBoZW4gSGVtbWluZ2VyICg0KToNCj4g IGVhbDogcHJvdmlkZSBmdW5jdGlvbnMgdG8gYWNjZXNzIFBDSSBjb25maWcNCj4gIGJueDJ4OiBk cml2ZXIgY29yZQ0KPiAgYm54Mng6IGRyaXZlciBzdXBwb3J0IHJvdXRpbmVzDQo+ICBibngyeDog ZW5hYmxlIFBNRCBidWlsZA0KPg0KPiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgICAzICsNCj4gY29uZmlnL2NvbW1vbl9saW51eGFwcCAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgICAxMCArDQo+IGRyaXZlcnMvbmV0L01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAgIDEgKw0KPiBkcml2ZXJzL25ldC9ibngyeC9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgICB8ICAgIDI4ICsNCj4gZHJpdmVycy9uZXQvYm54Mngv Ym54MnguYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMTgyMQ0KPisrKysrKysrKysrKysrKysr KysNCj4gZHJpdmVycy9uZXQvYm54MngvYm54MnguaCAgICAgICAgICAgICAgICAgICAgICAgfCAg MTk5OCArKysrDQo+IGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aGRldi5jICAgICAgICAgICAg ICAgIHwgICA1NDIgKw0KPiBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9ldGhkZXYuaCAgICAgICAg ICAgICAgICB8ICAgIDc5ICsNCj4gZHJpdmVycy9uZXQvYm54MngvYm54MnhfbG9ncy5oICAgICAg ICAgICAgICAgICAgfCAgICA1MSArDQo+IGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3J4dHguYyAg ICAgICAgICAgICAgICAgIHwgICA0ODcgKw0KPiBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9yeHR4 LmggICAgICAgICAgICAgICAgICB8ICAgIDg1ICsNCj4gZHJpdmVycy9uZXQvYm54MngvYm54Mnhf c3RhdHMuYyAgICAgICAgICAgICAgICAgfCAgMTYxOSArKysNCj4gZHJpdmVycy9uZXQvYm54Mngv Ym54Mnhfc3RhdHMuaCAgICAgICAgICAgICAgICAgfCAgIDYzMiArDQo+IGRyaXZlcnMvbmV0L2Ju eDJ4L2JueDJ4X3ZmcGYuYyAgICAgICAgICAgICAgICAgIHwgICA1OTcgKw0KPiBkcml2ZXJzL25l dC9ibngyeC9ibngyeF92ZnBmLmggICAgICAgICAgICAgICAgICB8ICAgMzE1ICsNCj4gZHJpdmVy cy9uZXQvYm54MngvZGVidWcuYyAgICAgICAgICAgICAgICAgICAgICAgfCAgIDExMyArDQo+IGRy aXZlcnMvbmV0L2JueDJ4L2Vjb3JlX2Z3X2RlZnMuaCAgICAgICAgICAgICAgIHwgICA0MjIgKw0K PiBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9oc2kuaCAgICAgICAgICAgICAgICAgICB8ICA2MzQ4 ICsrKysrKysrKysNCj4gZHJpdmVycy9uZXQvYm54MngvZWNvcmVfaW5pdC5oICAgICAgICAgICAg ICAgICAgfCAgIDg0MSArKw0KPiBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9pbml0X29wcy5oICAg ICAgICAgICAgICB8ICAgODg2ICsrDQo+IGRyaXZlcnMvbmV0L2JueDJ4L2Vjb3JlX21md19yZXEu aCAgICAgICAgICAgICAgIHwgICAyMDYgKw0KPiBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9yZWcu aCAgICAgICAgICAgICAgICAgICB8ICAzNjYzICsrKysrKw0KPiBkcml2ZXJzL25ldC9ibngyeC9l Y29yZV9zcC5jICAgICAgICAgICAgICAgICAgICB8ICA1NDU1ICsrKysrKysrKw0KPiBkcml2ZXJz L25ldC9ibngyeC9lY29yZV9zcC5oICAgICAgICAgICAgICAgICAgICB8ICAxNzk1ICsrKw0KPiBk cml2ZXJzL25ldC9ibngyeC9lbGluay5jICAgICAgICAgICAgICAgICAgICAgICB8IDEzMzc4DQo+ KysrKysrKysrKysrKysrKysrKysrKw0KPiBkcml2ZXJzL25ldC9ibngyeC9lbGluay5oICAgICAg ICAgICAgICAgICAgICAgICB8ICAgNjA5ICsNCj4gZHJpdmVycy9uZXQvYm54MngvcnRlX3BtZF9i bngyeF92ZXJzaW9uLm1hcCAgICAgfCAgICAgNCArDQo+IGxpYi9saWJydGVfZWFsL2JzZGFwcC9l YWwvZWFsX3BjaS5jICAgICAgICAgICAgIHwgICAgODMgKw0KPiBsaWIvbGlicnRlX2VhbC9ic2Rh cHAvZWFsL3J0ZV9lYWxfdmVyc2lvbi5tYXAgICB8ICAgICAzICstDQo+IGxpYi9saWJydGVfZWFs L2NvbW1vbi9pbmNsdWRlL3J0ZV9wY2kuaCAgICAgICAgIHwgICAgMzIgKw0KPiBsaWIvbGlicnRl X2VhbC9jb21tb24vaW5jbHVkZS9ydGVfcGNpX2Rldl9pZHMuaCB8ICAgIDYxICsNCj4gbGliL2xp YnJ0ZV9lYWwvbGludXhhcHAvZWFsL2VhbF9wY2kuYyAgICAgICAgICAgfCAgICA1MCArDQo+IGxp Yi9saWJydGVfZWFsL2xpbnV4YXBwL2VhbC9lYWxfcGNpX2luaXQuaCAgICAgIHwgICAgMTEgKw0K PiBsaWIvbGlicnRlX2VhbC9saW51eGFwcC9lYWwvZWFsX3BjaV91aW8uYyAgICAgICB8ICAgIDE0 ICsNCj4gbGliL2xpYnJ0ZV9lYWwvbGludXhhcHAvZWFsL2VhbF9wY2lfdmZpby5jICAgICAgfCAg ICAxNiArDQo+IGxpYi9saWJydGVfZWFsL2xpbnV4YXBwL2VhbC9ydGVfZWFsX3ZlcnNpb24ubWFw IHwgICAgIDMgKy0NCj4gbWsvcnRlLmFwcC5tayAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgICAgMiArDQo+IDM3IGZpbGVzIGNoYW5nZWQsIDUyMjYxIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9N YWtlZmlsZQ0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54MngvYm54MnguYw0K PiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54MngvYm54MnguaA0KPiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54MngvYm54MnhfZXRoZGV2LmMNCj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X2V0aGRldi5oDQo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9ibngyeF9sb2dzLmgNCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbmV0L2JueDJ4L2JueDJ4X3J4dHguYw0KPiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9uZXQvYm54MngvYm54Mnhfcnh0eC5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2 ZXJzL25ldC9ibngyeC9ibngyeF9zdGF0cy5jDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L25ldC9ibngyeC9ibngyeF9zdGF0cy5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25l dC9ibngyeC9ibngyeF92ZnBmLmMNCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2Ju eDJ4L2JueDJ4X3ZmcGYuaA0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54Mngv ZGVidWcuYw0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54MngvZWNvcmVfZndf ZGVmcy5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9oc2ku aA0KPiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvYm54MngvZWNvcmVfaW5pdC5oDQo+ IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9pbml0X29wcy5oDQo+ IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9tZndfcmVxLmgNCj4g Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L2JueDJ4L2Vjb3JlX3JlZy5oDQo+IGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9zcC5jDQo+IGNyZWF0ZSBtb2Rl IDEwMDY0NCBkcml2ZXJzL25ldC9ibngyeC9lY29yZV9zcC5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL25ldC9ibngyeC9lbGluay5jDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L25ldC9ibngyeC9lbGluay5oDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC9ibngy eC9ydGVfcG1kX2JueDJ4X3ZlcnNpb24ubWFwDQo+DQo+LS0NCj4yLjEuNA0KPg0KPg0KDQpBY2tl ZC1ieTogSGFyaXNoIFBhdGlsIDxoYXJpc2gucGF0aWxAcWxvZ2ljLmNvbT4NCg0KVGhhbmtzLA0K SGFyaXNoDQoNCg0KDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQoNClRoaXMg bWVzc2FnZSBhbmQgYW55IGF0dGFjaGVkIGRvY3VtZW50cyBjb250YWluIGluZm9ybWF0aW9uIGZy b20gdGhlIHNlbmRpbmcgY29tcGFueSBvciBpdHMgcGFyZW50IGNvbXBhbnkocyksIHN1YnNpZGlh cmllcywgZGl2aXNpb25zIG9yIGJyYW5jaCBvZmZpY2VzIHRoYXQgbWF5IGJlIGNvbmZpZGVudGlh bC4gSWYgeW91IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgeW91IG1heSBub3QgcmVh ZCwgY29weSwgZGlzdHJpYnV0ZSwgb3IgdXNlIHRoaXMgaW5mb3JtYXRpb24uIElmIHlvdSBoYXZl IHJlY2VpdmVkIHRoaXMgdHJhbnNtaXNzaW9uIGluIGVycm9yLCBwbGVhc2Ugbm90aWZ5IHRoZSBz ZW5kZXIgaW1tZWRpYXRlbHkgYnkgcmVwbHkgZS1tYWlsIGFuZCB0aGVuIGRlbGV0ZSB0aGlzIG1l c3NhZ2UuDQo=