LyEduu0HLb0Rz6pn1JyNj2B+coG/2IGBDw eqCg==; darn=freebsd.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777401808; x=1778006608; darn=freebsd.org; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=sr1WOMPOb8swG/doh+1Xa7ec8TMBTyNgePuUD5HuQUw=; b=ZPgJsAGud8n/7qw+0lTL+eUK9NBRp/+aNY9m7VE2BSQawz4Nt1DkJ4bPXjl3Gaivz8 1wenbY8Qb/EsBmuaRgCgel1jm+HRdQE5XRkYPptxEJQLhWo4gLtINY0S/s3uPB8Cerpo f5GMRWAnkfw46MvKYMbLFcJTNzxKGuhmaMHelkq9tUjNu7HfHGnuZ0jSCMWp5Q6znrJ6 Xx/oXONp96Qk60j23nksZkaM893fuvvUUPux4xiu2cBKuwV8N7zVlP+QTiTswNK5e4ZL XRAuUfjXWvPLDljDvp/Om95GSRBNMFy/2OfntmE1KrlqaFxqBtl4+b6kaCP4c2Uz9Jf2 TTGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777401808; x=1778006608; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=sr1WOMPOb8swG/doh+1Xa7ec8TMBTyNgePuUD5HuQUw=; b=Y6JE/d3zLNigk3mW/pUq4GbavCsrZz/lA3X4kyxVO+lBlkoFxeuFZBiDNYcg2fkN0R /7BOxh7YbEltp0LHTarL3UE4Q3xmkE118rWERqlywjLb6/tcKfNFcuuEaBtMqGxExM+j emYOs9T+RWY8W9T5IWLD5RoiQgcLL35tsCEaXsqpZTyBz8OQpcWif6xrlJp0Yxtu7vaw 0UcQR/cIsApUuszpdRU03EvbN7LT8G6y2UPGFknQ2qwPXanbPx7VoKY+sCpHaHeM5iwH zz1scx/4jLW7XndOl63PVYPOhFDub0SD/rknh9wPOTzHGfutLEwKD3+MYhqUlakaxiXI LzAg== X-Forwarded-Encrypted: i=1; AFNElJ+UCkYdi3gqwK4Lou/Gu6dW4p9nnTQ2gKjQaiXTBU54RXFE6CZ2p2Cxqvr3eat6LYWZdP7PI3wdbEsY7Vc56CHx4A30@freebsd.org X-Gm-Message-State: AOJu0YyFnVkKj+Bhy/JxdZhjEgfsSX23psoxBnmn5XtV/yC9cnJNZ2/y kPsamBaQ+Bjep1UaniDfhbP+lIF3qcfUKsjwe3+lJLtVE60NVuHLTrboa1pXQ9uFc3mLMq5Y/h3 0mK98qoNxgBGxFQWwrQbvIGEqtzx0BOk= X-Gm-Gg: AeBDies6kBOrnF5uQXUUrpFRLvENvbHgapLk8ASeQxrT0poyQD8zkQ4dEb4ruK/v+Hh Vi+nI7tItjShOdbwKPlw0oMQ9moeizzVANafe2XJS1Mqd4aCmxbnCIFKJfDrPgEWGnpAqx6Y8LS TLZ+xpZOI9E94k2oiF3+g3QiDOhNzhX71QzhHqSbfHgMaXD0x8DTyetEsG52D4dYDbrqFzb8vLZ GOCb2z3zzE2gUeXxIl2ASTeQ1tLpEce3FtXiiVIcTZAmAVsNV8joUk3JUcMZIuXhpO00dmvO5h8 Hce7rBbI+GpsuAUH6R76kYKrvgtkBxgsoAH3u0LKg4zGp35/XjqL X-Received: by 2002:a05:690e:43db:b0:651:d23c:3d84 with SMTP id 956f58d0204a3-65beed7da05mr2835976d50.23.1777401807629; Tue, 28 Apr 2026 11:43:27 -0700 (PDT) List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Received: by 2002:a05:7010:82cc:20b0:515:e58:b11f with HTTP; Tue, 28 Apr 2026 11:43:25 -0700 (PDT) In-Reply-To: <69ea61e8.46e01.b303182@gitrepo.freebsd.org> References: <69ea61e8.46e01.b303182@gitrepo.freebsd.org> From: Oliver Pinter Date: Tue, 28 Apr 2026 19:43:25 +0100 X-Gm-Features: AVHnY4KKx9uH3_dztbuOWY9sDqsX-msMWgdm9fChKJeH7_qyzAgp88oGsBsmIMk Message-ID: Subject: Re: git: fe9f0b18bf6a - main - busdma: Use char * instead of vm_offset_t for bounce page kernel pointers To: John Baldwin Cc: "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" Content-Type: multipart/alternative; boundary="0000000000005df1ee0650899b12" X-Spamd-Result: default: False [-3.68 / 15.00]; ARC_ALLOW(-1.00)[google.com:s=arc-20240605:i=1]; NEURAL_HAM_LONG(-1.00)[-1.000]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; NEURAL_HAM_MEDIUM(-0.50)[-0.498]; NEURAL_HAM_SHORT(-0.29)[-0.285]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20251104]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4864::/56:c]; MIME_BASE64_TEXT(0.10)[]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; RCVD_TLS_LAST(0.00)[]; TAGGED_FROM(0.00)[]; TO_DN_EQ_ADDR_SOME(0.00)[]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; MIME_TRACE(0.00)[0:+,1:+,2:~]; DKIM_TRACE(0.00)[gmail.com:+]; FROM_HAS_DN(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::b129:from]; TO_MATCH_ENVRCPT_SOME(0.00)[]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; RCPT_COUNT_THREE(0.00)[4]; PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-all@freebsd.org]; MLMMJ_DEST(0.00)[dev-commits-src-all@freebsd.org]; MID_RHS_MATCH_FROMTLD(0.00)[]; MISSING_XM_UA(0.00)[]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim] X-Rspamd-Queue-Id: 4g4q85554xz3vcV X-Spamd-Bar: --- --0000000000005df1ee0650899b12 Content-Type: text/plain; charset="UTF-8" On Thursday, April 23, 2026, John Baldwin wrote: > The branch main has been updated by jhb: > > URL: https://cgit.FreeBSD.org/src/commit/?id= > fe9f0b18bf6a1f881fbe57da716ea429acd539c1 > > commit fe9f0b18bf6a1f881fbe57da716ea429acd539c1 > Author: John Baldwin > AuthorDate: 2026-04-23 17:05:53 +0000 > Commit: John Baldwin > CommitDate: 2026-04-23 17:05:53 +0000 > > busdma: Use char * instead of vm_offset_t for bounce page kernel > pointers > > Effort: CHERI upstreaming > Reviewed by: kib > Sponsored by: AFRL, DARPA > Pull Request: https://github.com/freebsd/freebsd-src/pull/2068 > --- > sys/arm/arm/busdma_machdep.c | 18 ++++++++---------- > sys/arm64/arm64/busdma_bounce.c | 18 ++++++++---------- > sys/kern/subr_busdma_bounce.c | 30 +++++++++++++++--------------- > sys/powerpc/powerpc/busdma_machdep.c | 20 +++++++++----------- > sys/riscv/riscv/busdma_bounce.c | 18 ++++++++---------- > sys/x86/x86/busdma_bounce.c | 26 +++++++++++--------------- > 6 files changed, 59 insertions(+), 71 deletions(-) > > diff --git a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c > index 3c65cb8ebbf4..81b8b4a2883a 100644 > --- a/sys/arm/arm/busdma_machdep.c > +++ b/sys/arm/arm/busdma_machdep.c > @@ -1002,7 +1002,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, > bus_dmamap_t map, void *buf, > > if (map->pagesneeded != 0 && must_bounce(dmat, map, > curaddr, > sgsize)) { > - curaddr = add_bounce_page(dmat, map, > (vm_offset_t)kvaddr, curaddr, > + curaddr = add_bounce_page(dmat, map, kvaddr, > curaddr, > sgsize); > } else if ((dmat->flags & BUS_DMA_COHERENT) == 0) { > if (map->sync_count > 0) { > @@ -1199,18 +1199,17 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t > map, bus_dmasync_op_t op) > if (op & BUS_DMASYNC_PREWRITE) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > - bcopy(datavaddr, (void *)bpage->vaddr, > - bpage->datacount); > + bcopy(datavaddr, bpage->vaddr, > bpage->datacount); > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > if ((dmat->flags & BUS_DMA_COHERENT) == 0) > - dcache_wb_poc(bpage->vaddr, > + dcache_wb_poc((vm_offset_t) > bpage->vaddr, > bpage->busaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -1232,7 +1231,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t > map, bus_dmasync_op_t op) > bpage = STAILQ_FIRST(&map->bpages); > while (bpage != NULL) { > if ((dmat->flags & BUS_DMA_COHERENT) == 0) > - dcache_inv_poc_dma(bpage->vaddr, > + dcache_inv_poc_dma((vm_offset_ > t)bpage->vaddr, > bpage->busaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -1250,17 +1249,16 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t > map, bus_dmasync_op_t op) > if (op & BUS_DMASYNC_POSTREAD) { > while (bpage != NULL) { > if ((dmat->flags & BUS_DMA_COHERENT) == 0) > - dcache_inv_poc(bpage->vaddr, > + dcache_inv_poc((vm_offset_t) > bpage->vaddr, > bpage->busaddr, > bpage->datacount); > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > - bcopy((void *)bpage->vaddr, datavaddr, > - bpage->datacount); > + bcopy(bpage->vaddr, datavaddr, > bpage->datacount); > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > bpage = STAILQ_NEXT(bpage, links); > diff --git a/sys/arm64/arm64/busdma_bounce.c b/sys/arm64/arm64/busdma_ > bounce.c > index ad46e26e406f..74fa611e6d1a 100644 > --- a/sys/arm64/arm64/busdma_bounce.c > +++ b/sys/arm64/arm64/busdma_bounce.c > @@ -868,7 +868,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, > bus_dmamap_t map, void *buf, > KASSERT(dmat->common.alignment <= PAGE_SIZE, > ("bounced buffer cannot have alignment bigger " > "than PAGE_SIZE: %lu", > dmat->common.alignment)); > - curaddr = add_bounce_page(dmat, map, > (vm_offset_t)kvaddr, curaddr, > + curaddr = add_bounce_page(dmat, map, kvaddr, > curaddr, > sgsize); > } else if ((map->flags & DMAMAP_COHERENT) == 0) { > if (map->sync_count > 0) { > @@ -1047,19 +1047,18 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > if ((op & BUS_DMASYNC_PREWRITE) != 0) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > > - bcopy(datavaddr, > - (void *)bpage->vaddr, > bpage->datacount); > + bcopy(datavaddr, bpage->vaddr, > bpage->datacount); > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > if ((map->flags & DMAMAP_COHERENT) == 0) > - cpu_dcache_wb_range((void > *)bpage->vaddr, > + cpu_dcache_wb_range(bpage->vaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -1067,7 +1066,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > } else if ((op & BUS_DMASYNC_PREREAD) != 0) { > while (bpage != NULL) { > if ((map->flags & DMAMAP_COHERENT) == 0) > - cpu_dcache_wbinv_range((void > *)bpage->vaddr, > + cpu_dcache_wbinv_range(bpage-> > vaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -1076,18 +1075,17 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > if ((op & BUS_DMASYNC_POSTREAD) != 0) { > while (bpage != NULL) { > if ((map->flags & DMAMAP_COHERENT) == 0) > - cpu_dcache_inv_range((void > *)bpage->vaddr, > + cpu_dcache_inv_range(bpage->vaddr, > bpage->datacount); > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > > - bcopy((void *)bpage->vaddr, > - datavaddr, bpage->datacount); > + bcopy(bpage->vaddr, datavaddr, > bpage->datacount); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > diff --git a/sys/kern/subr_busdma_bounce.c b/sys/kern/subr_busdma_bounce.c > index 60fe2fc6b2a6..2774128a1ae5 100644 > --- a/sys/kern/subr_busdma_bounce.c > +++ b/sys/kern/subr_busdma_bounce.c > @@ -49,9 +49,9 @@ > #include > > struct bounce_page { > - vm_offset_t vaddr; /* kva of bounce buffer */ > + char *vaddr; /* kva of bounce buffer */ > bus_addr_t busaddr; /* Physical address */ > - vm_offset_t datavaddr; /* kva of client data */ > + char *datavaddr; /* kva of client data */ > #if defined(__amd64__) || defined(__i386__) > vm_page_t datapage[2]; /* physical page(s) of client data > */ > #else > @@ -282,18 +282,18 @@ alloc_bounce_pages(bus_dma_tag_t dmat, u_int > numpages) > if (bpage == NULL) > break; > #ifdef dmat_domain > - bpage->vaddr = (vm_offset_t)contigmalloc_ > domainset(PAGE_SIZE, > + bpage->vaddr = contigmalloc_domainset(PAGE_SIZE, > M_BOUNCE, DOMAINSET_PREF(bz->domain), M_NOWAIT, > 0ul, bz->lowaddr, PAGE_SIZE, 0); > #else > - bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, > M_BOUNCE, > + bpage->vaddr = contigmalloc(PAGE_SIZE, M_BOUNCE, > M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0); > #endif > - if (bpage->vaddr == 0) { > + if (bpage->vaddr == NULL) { > free(bpage, M_BUSDMA); > break; > } > - bpage->busaddr = pmap_kextract(bpage->vaddr); > + bpage->busaddr = pmap_kextract((vm_offset_t)bpage->vaddr); > mtx_lock(&bounce_lock); > STAILQ_INSERT_TAIL(&bz->bounce_page_list, bpage, links); > total_bpages++; > @@ -327,11 +327,11 @@ reserve_bounce_pages(bus_dma_tag_t dmat, > bus_dmamap_t map, int commit) > > #if defined(__amd64__) || defined(__i386__) > static bus_addr_t > -add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, > +add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, void *vaddr, > vm_paddr_t addr1, vm_paddr_t addr2, bus_size_t size) > #else > static bus_addr_t > -add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr, > +add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, void *vaddr, > bus_addr_t addr, bus_size_t size) > #endif > { > @@ -370,13 +370,13 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t > map, vm_offset_t vaddr, > if (dmat_flags(dmat) & BUS_DMA_KEEP_PG_OFFSET) { > /* Page offset needs to be preserved. */ > #if defined(__amd64__) || defined(__i386__) > - bpage->vaddr |= addr1 & PAGE_MASK; > - bpage->busaddr |= addr1 & PAGE_MASK; > + bpage->vaddr += addr1 & PAGE_MASK; > + bpage->busaddr += addr1 & PAGE_MASK; > KASSERT(addr2 == 0, > ("Trying to bounce multiple pages with > BUS_DMA_KEEP_PG_OFFSET")); These hunks looks different from the commit message. > #else > - bpage->vaddr |= addr & PAGE_MASK; > - bpage->busaddr |= addr & PAGE_MASK; > + bpage->vaddr += addr & PAGE_MASK; > + bpage->busaddr += addr & PAGE_MASK; > #endif > } > bpage->datavaddr = vaddr; > @@ -409,7 +409,7 @@ free_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t > map) > count = 0; > schedule_thread = false; > STAILQ_FOREACH(bpage, &map->bpages, links) { > - bpage->datavaddr = 0; > + bpage->datavaddr = NULL; > bpage->datacount = 0; > > if (dmat_flags(dmat) & BUS_DMA_KEEP_PG_OFFSET) { > @@ -419,8 +419,8 @@ free_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t > map) > * store a full page of data and/or assume it > * starts on a page boundary. > */ > - bpage->vaddr &= ~PAGE_MASK; > - bpage->busaddr &= ~PAGE_MASK; > + bpage->vaddr = trunc_page(bpage->vaddr); > + bpage->busaddr = trunc_page(bpage->busaddr); > } > count++; > } > diff --git a/sys/powerpc/powerpc/busdma_machdep.c > b/sys/powerpc/powerpc/busdma_machdep.c > index 56feffde8b37..7fe2fd4ff986 100644 > --- a/sys/powerpc/powerpc/busdma_machdep.c > +++ b/sys/powerpc/powerpc/busdma_machdep.c > @@ -613,7 +613,7 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, > { > bus_size_t sgsize; > bus_addr_t curaddr; > - vm_offset_t kvaddr, vaddr; > + char *kvaddr, *vaddr; > int error; > > if (segs == NULL) > @@ -628,18 +628,18 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, > } > } > > - vaddr = (vm_offset_t)buf; > + vaddr = buf; > > while (buflen > 0) { > /* > * Get the physical address for this segment. > */ > if (pmap == kernel_pmap) { > - curaddr = pmap_kextract(vaddr); > + curaddr = pmap_kextract((vm_offset_t)vaddr); > kvaddr = vaddr; > } else { > - curaddr = pmap_extract(pmap, vaddr); > - kvaddr = 0; > + curaddr = pmap_extract(pmap, (vm_offset_t)vaddr); > + kvaddr = NULL; > } > > /* > @@ -733,7 +733,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, > bus_dmasync_op_t op) > if (op & BUS_DMASYNC_PREWRITE) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > @@ -741,8 +741,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, > bus_dmasync_op_t op) > bpage->dataoffs; > } > > - bcopy(datavaddr, > - (void *)bpage->vaddr, > bpage->datacount); > + bcopy(datavaddr, bpage->vaddr, > bpage->datacount); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > @@ -754,7 +753,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, > bus_dmasync_op_t op) > if (op & BUS_DMASYNC_POSTREAD) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > @@ -762,8 +761,7 @@ bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, > bus_dmasync_op_t op) > bpage->dataoffs; > } > > - bcopy((void *)bpage->vaddr, > - datavaddr, bpage->datacount); > + bcopy(bpage->vaddr, datavaddr, > bpage->datacount); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > diff --git a/sys/riscv/riscv/busdma_bounce.c b/sys/riscv/riscv/busdma_ > bounce.c > index 0f2d592f4e52..452cead3c6b6 100644 > --- a/sys/riscv/riscv/busdma_bounce.c > +++ b/sys/riscv/riscv/busdma_bounce.c > @@ -673,7 +673,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, > bus_dmamap_t map, void *buf, > addr_needs_bounce(dmat, curaddr)) { > sgsize = roundup2(sgsize, dmat->common.alignment); > sgsize = MIN(sgsize, buflen); > - curaddr = add_bounce_page(dmat, map, > (vm_offset_t)kvaddr, curaddr, > + curaddr = add_bounce_page(dmat, map, kvaddr, > curaddr, > sgsize); > } else if ((dmat->bounce_flags & BF_COHERENT) == 0) { > if (map->sync_count > 0) { > @@ -850,19 +850,18 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > if ((op & BUS_DMASYNC_PREWRITE) != 0) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > > - bcopy(datavaddr, > - (void *)bpage->vaddr, > bpage->datacount); > + bcopy(datavaddr, bpage->vaddr, > bpage->datacount); > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > if ((dmat->bounce_flags & BF_COHERENT) == > 0) > - cpu_dcache_wb_range(bpage->vaddr, > + cpu_dcache_wb_range((vm_ > offset_t)bpage->vaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -870,7 +869,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > } else if ((op & BUS_DMASYNC_PREREAD) != 0) { > while (bpage != NULL) { > if ((dmat->bounce_flags & BF_COHERENT) == > 0) > - cpu_dcache_wbinv_range(bpage-> > vaddr, > + cpu_dcache_wbinv_range((vm_ > offset_t)bpage->vaddr, > bpage->datacount); > bpage = STAILQ_NEXT(bpage, links); > } > @@ -879,18 +878,17 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > if ((op & BUS_DMASYNC_POSTREAD) != 0) { > while (bpage != NULL) { > if ((dmat->bounce_flags & BF_COHERENT) == > 0) > - cpu_dcache_inv_range(bpage->vaddr, > + cpu_dcache_inv_range((vm_ > offset_t)bpage->vaddr, > bpage->datacount); > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > if (datavaddr == NULL) { > tempvaddr = pmap_quick_enter_page( > bpage->datapage); > datavaddr = tempvaddr + > bpage->dataoffs; > } > > - bcopy((void *)bpage->vaddr, > - datavaddr, bpage->datacount); > + bcopy(bpage->vaddr, datavaddr, > bpage->datacount); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > diff --git a/sys/x86/x86/busdma_bounce.c b/sys/x86/x86/busdma_bounce.c > index bc48c60448da..bd700d4d55be 100644 > --- a/sys/x86/x86/busdma_bounce.c > +++ b/sys/x86/x86/busdma_bounce.c > @@ -687,7 +687,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, > bus_dmamap_t map, void *buf, > { > bus_size_t sgsize; > vm_paddr_t curaddr; > - vm_offset_t kvaddr, vaddr; > + char *kvaddr, *vaddr; > int error; > > if (map == NULL) > @@ -705,17 +705,17 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, > bus_dmamap_t map, void *buf, > } > } > > - vaddr = (vm_offset_t)buf; > + vaddr = buf; > while (buflen > 0) { > /* > * Get the physical address for this segment. > */ > if (pmap == kernel_pmap) { > - curaddr = pmap_kextract(vaddr); > + curaddr = pmap_kextract((vm_offset_t)vaddr); > kvaddr = vaddr; > } else { > - curaddr = pmap_extract(pmap, vaddr); > - kvaddr = 0; > + curaddr = pmap_extract(pmap, (vm_offset_t)vaddr); > + kvaddr = NULL; > } > > /* > @@ -879,7 +879,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > if ((op & BUS_DMASYNC_PREWRITE) != 0) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > datacount1 = bpage->datacount; > if (datavaddr == NULL) { > tempvaddr = > @@ -889,8 +889,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > datacount1); > } > > - bcopy(datavaddr, > - (void *)bpage->vaddr, datacount1); > + bcopy(datavaddr, bpage->vaddr, datacount1); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > @@ -907,8 +906,7 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, > bus_dmamap_t map, > */ > datavaddr = pmap_quick_enter_page(bpage-> > datapage[1]); > datacount2 = bpage->datacount - datacount1; > - bcopy(datavaddr, > - (void *)(bpage->vaddr + datacount1), > datacount2); > + bcopy(datavaddr, bpage->vaddr + datacount1, > datacount2); > pmap_quick_remove_page(datavaddr); > > next_w: > @@ -920,7 +918,7 @@ next_w: > if ((op & BUS_DMASYNC_POSTREAD) != 0) { > while (bpage != NULL) { > tempvaddr = NULL; > - datavaddr = (void *)bpage->datavaddr; > + datavaddr = bpage->datavaddr; > datacount1 = bpage->datacount; > if (datavaddr == NULL) { > tempvaddr = > @@ -930,8 +928,7 @@ next_w: > datacount1); > } > > - bcopy((void *)bpage->vaddr, datavaddr, > - datacount1); > + bcopy(bpage->vaddr, datavaddr, datacount1); > > if (tempvaddr != NULL) > pmap_quick_remove_page(tempvaddr); > @@ -948,8 +945,7 @@ next_w: > */ > datavaddr = pmap_quick_enter_page(bpage-> > datapage[1]); > datacount2 = bpage->datacount - datacount1; > - bcopy((void *)(bpage->vaddr + datacount1), > - datavaddr, datacount2); > + bcopy(bpage->vaddr + datacount1, datavaddr, > datacount2); > pmap_quick_remove_page(datavaddr); > > next_r: > > --0000000000005df1ee0650899b12 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGJyPjxicj5PbiBUaHVyc2RheSwgQXByaWwgMjMsIDIwMjYsIEpvaG4gQmFsZHdpbiAmbHQ7PGEg aHJlZj0ibWFpbHRvOmpoYkBmcmVlYnNkLm9yZyI+amhiQGZyZWVic2Qub3JnPC9hPiZndDsgd3Jv dGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAg MCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPlRoZSBi cmFuY2ggbWFpbiBoYXMgYmVlbiB1cGRhdGVkIGJ5IGpoYjo8YnI+DQo8YnI+DQpVUkw6IDxhIGhy ZWY9Imh0dHBzOi8vY2dpdC5GcmVlQlNELm9yZy9zcmMvY29tbWl0Lz9pZD1mZTlmMGIxOGJmNmEx Zjg4MWZiZTU3ZGE3MTZlYTQyOWFjZDUzOWMxIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9jZ2l0 LkZyZWVCU0Qub3JnL3NyYy88d2JyPmNvbW1pdC8/aWQ9PHdicj5mZTlmMGIxOGJmNmExZjg4MWZi ZTU3ZGE3MTZlYTQ8d2JyPjI5YWNkNTM5YzE8L2E+PGJyPg0KPGJyPg0KY29tbWl0IGZlOWYwYjE4 YmY2YTFmODgxZmJlNTdkYTcxNmVhNDx3YnI+MjlhY2Q1MzljMTxicj4NCkF1dGhvcjrCoCDCoCDC oEpvaG4gQmFsZHdpbiAmbHQ7amhiQEZyZWVCU0Qub3JnJmd0Ozxicj4NCkF1dGhvckRhdGU6IDIw MjYtMDQtMjMgMTc6MDU6NTMgKzAwMDA8YnI+DQpDb21taXQ6wqAgwqAgwqBKb2huIEJhbGR3aW4g Jmx0O2poYkBGcmVlQlNELm9yZyZndDs8YnI+DQpDb21taXREYXRlOiAyMDI2LTA0LTIzIDE3OjA1 OjUzICswMDAwPGJyPg0KPGJyPg0KwqAgwqAgYnVzZG1hOiBVc2UgY2hhciAqIGluc3RlYWQgb2Yg dm1fb2Zmc2V0X3QgZm9yIGJvdW5jZSBwYWdlIGtlcm5lbCBwb2ludGVyczxicj4NCjxicj4NCsKg IMKgIEVmZm9ydDrCoCDCoCDCoCDCoCDCoENIRVJJIHVwc3RyZWFtaW5nPGJyPg0KwqAgwqAgUmV2 aWV3ZWQgYnk6wqAgwqAga2liPGJyPg0KwqAgwqAgU3BvbnNvcmVkIGJ5OsKgIMKgQUZSTCwgREFS UEE8YnI+DQrCoCDCoCBQdWxsIFJlcXVlc3Q6wqAgwqA8YSBocmVmPSJodHRwczovL2dpdGh1Yi5j b20vZnJlZWJzZC9mcmVlYnNkLXNyYy9wdWxsLzIwNjgiIHRhcmdldD0iX2JsYW5rIj5odHRwczov L2dpdGh1Yi5jb20vZnJlZWJzZC88d2JyPmZyZWVic2Qtc3JjL3B1bGwvMjA2ODwvYT48YnI+DQot LS08YnI+DQrCoHN5cy9hcm0vYXJtL2J1c2RtYV9tYWNoZGVwLmPCoCDCoCDCoCDCoCDCoHwgMTgg KysrKysrKystLS0tLS0tLS0tPGJyPg0KwqBzeXMvYXJtNjQvYXJtNjQvYnVzZG1hX2JvdW5jZS48 d2JyPmPCoCDCoCDCoCB8IDE4ICsrKysrKysrLS0tLS0tLS0tLTxicj4NCsKgc3lzL2tlcm4vc3Vi cl9idXNkbWFfYm91bmNlLmPCoCDCoCDCoCDCoCB8IDMwICsrKysrKysrKysrKysrKy0tLS0tLS0t LS0tLS0tLTxicj4NCsKgc3lzL3Bvd2VycGMvcG93ZXJwYy9idXNkbWFfPHdicj5tYWNoZGVwLmMg fCAyMCArKysrKysrKystLS0tLS0tLS0tLTxicj4NCsKgc3lzL3Jpc2N2L3Jpc2N2L2J1c2RtYV9i b3VuY2UuPHdicj5jwqAgwqAgwqAgfCAxOCArKysrKysrKy0tLS0tLS0tLS08YnI+DQrCoHN5cy94 ODYveDg2L2J1c2RtYV9ib3VuY2UuY8KgIMKgIMKgIMKgIMKgIHwgMjYgKysrKysrKysrKystLS0t LS0tLS0tLS0tLS08YnI+DQrCoDYgZmlsZXMgY2hhbmdlZCwgNTkgaW5zZXJ0aW9ucygrKSwgNzEg ZGVsZXRpb25zKC0pPGJyPg0KPGJyPg0KZGlmZiAtLWdpdCBhL3N5cy9hcm0vYXJtL2J1c2RtYV9t YWNoZGVwLmMgYi9zeXMvYXJtL2FybS9idXNkbWFfbWFjaGRlcC5jPGJyPg0KaW5kZXggM2M2NWNi OGViYmY0Li44MWI4YjRhMjg4M2EgMTAwNjQ0PGJyPg0KLS0tIGEvc3lzL2FybS9hcm0vYnVzZG1h X21hY2hkZXAuYzxicj4NCisrKyBiL3N5cy9hcm0vYXJtL2J1c2RtYV9tYWNoZGVwLmM8YnI+DQpA QCAtMTAwMiw3ICsxMDAyLDcgQEAgX2J1c19kbWFtYXBfbG9hZF9idWZmZXIoYnVzXzx3YnI+ZG1h X3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1Ziw8YnI+DQo8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobWFwLSZndDtwYWdlc25lZWRlZCAhPSAwICZhbXA7JmFt cDsgbXVzdF9ib3VuY2UoZG1hdCwgbWFwLCBjdXJhZGRyLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIHNnc2l6ZSkpIHs8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBjdXJhZGRyID0gYWRkX2JvdW5jZV9wYWdlKGRtYXQsIG1hcCwgKHZtX29mZnNldF90 KWt2YWRkciwgY3VyYWRkciw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBjdXJhZGRyID0gYWRkX2JvdW5jZV9wYWdlKGRtYXQsIG1hcCwga3ZhZGRyLCBjdXJhZGRyLDxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNnc2l6ZSk7PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfSBlbHNlIGlmICgoZG1hdC0mZ3Q7ZmxhZ3MgJmFt cDsgQlVTX0RNQV9DT0hFUkVOVCkgPT0gMCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIGlmIChtYXAtJmd0O3N5bmNfY291bnQgJmd0OyAwKSB7PGJyPg0KQEAgLTEx OTksMTggKzExOTksMTcgQEAgYnVzX2RtYW1hcF9zeW5jKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVz X2RtYW1hcF90IG1hcCwgYnVzX2RtYXN5bmNfb3BfdCBvcCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBpZiAob3AgJmFtcDsgQlVTX0RNQVNZTkNfUFJFV1JJVEUpIHs8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAoYnBhZ2UgIT0gTlVMTCkgezxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlbXB2YWRk ciA9IE5VTEw7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgZGF0YXZhZGRyID0gKHZvaWQgKilicGFnZS0mZ3Q7ZGF0YXZhZGRyOzxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9IGJw YWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgaWYgKGRhdGF2YWRkciA9PSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVtcHZhZGRy ID0gcG1hcF9xdWlja19lbnRlcl9wYWdlKDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZndDtkYXRhcGFn ZSk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgZGF0YXZhZGRyID0gdGVtcHZhZGRyICsgYnBhZ2UtJmd0O2RhdGFvZmZzOzxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH08YnI+ DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiY29weShk YXRhdmFkZHIsICh2b2lkICopYnBhZ2UtJmd0O3ZhZGRyLDxicj4NCi3CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZndDtkYXRhY291bnQp Ozxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJj b3B5KGRhdGF2YWRkciwgYnBhZ2UtJmd0O3ZhZGRyLCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodGVt cHZhZGRyICE9IE5VTEwpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcG1hcF9xdWlja19yZW1vdmVfcGFnZSg8d2JyPnRlbXB2 YWRkcik7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgaWYgKChkbWF0LSZndDtmbGFncyAmYW1wOyBCVVNfRE1BX0NPSEVSRU5UKSA9PSAwKTxicj4N Ci3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGRjYWNoZV93Yl9wb2MoYnBhZ2UtJmd0O3ZhZGRyLDxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRjYWNoZV93Yl9wb2Mo KHZtX29mZnNldF90KTx3YnI+YnBhZ2UtJmd0O3ZhZGRyLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZn dDtidXNhZGRyLCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFnZSA9IFNUQUlMUV9ORVhUKGJwYWdlLCBs aW5rcyk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCkBA IC0xMjMyLDcgKzEyMzEsNyBAQCBidXNfZG1hbWFwX3N5bmMoYnVzX2RtYV90YWdfdCBkbWF0LCBi dXNfZG1hbWFwX3QgbWFwLCBidXNfZG1hc3luY19vcF90IG9wKTxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlID0gU1RBSUxRX0ZJUlNUKCZhbXA7bWFwLSZndDti cGFnZXMpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHdoaWxlIChi cGFnZSAhPSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgaWYgKChkbWF0LSZndDtmbGFncyAmYW1wOyBCVVNfRE1BX0NPSEVSRU5UKSA9 PSAwKTxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGRjYWNoZV9pbnZfcG9jX2RtYShicGFnZS0mZ3Q7PHdicj52YWRkciw8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBkY2FjaGVfaW52X3BvY19kbWEoKHZtX29mZnNldF88d2JyPnQpYnBhZ2UtJmd0O3ZhZGRy LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZndDtidXNhZGRyLCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFn ZSA9IFNUQUlMUV9ORVhUKGJwYWdlLCBsaW5rcyk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfTxicj4NCkBAIC0xMjUwLDE3ICsxMjQ5LDE2IEBAIGJ1c19kbWFtYXBf c3luYyhidXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19kbWFzeW5jX29w X3Qgb3ApPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG9wICZhbXA7IEJVU19ETUFT WU5DX1BPU1RSRUFEKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg d2hpbGUgKGJwYWdlICE9IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKGRtYXQtJmd0O2ZsYWdzICZhbXA7IEJVU19ETUFfQ09I RVJFTlQpID09IDApPGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgZGNhY2hlX2ludl9wb2MoYnBhZ2UtJmd0O3ZhZGRyLDxicj4N CivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGRjYWNoZV9pbnZfcG9jKCh2bV9vZmZzZXRfdCk8d2JyPmJwYWdlLSZndDt2YWRkciw8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBicGFnZS0mZ3Q7YnVzYWRkciwgYnBhZ2UtJmd0O2RhdGFjb3VudCk7PGJyPg0K wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVtcHZhZGRy ID0gTlVMTDs8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBkYXRhdmFkZHIgPSAodm9pZCAqKWJwYWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyID0gYnBh Z2UtJmd0O2RhdGF2YWRkcjs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZiAoZGF0YXZhZGRyID09IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZW1wdmFkZHIg PSBwbWFwX3F1aWNrX2VudGVyX3BhZ2UoPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYnBhZ2UtJmd0O2RhdGFwYWdl KTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCBkYXRhdmFkZHIgPSB0ZW1wdmFkZHIgKyBicGFnZS0mZ3Q7ZGF0YW9mZnM7PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4N Ci3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KCh2 b2lkICopYnBhZ2UtJmd0O3ZhZGRyLCBkYXRhdmFkZHIsPGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnBhZ2UtJmd0O2RhdGFjb3VudCk7 PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNv cHkoYnBhZ2UtJmd0O3ZhZGRyLCBkYXRhdmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1w dmFkZHIgIT0gTlVMTCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwbWFwX3F1aWNrX3JlbW92ZV9wYWdlKDx3YnI+dGVtcHZh ZGRyKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBicGFnZSA9IFNUQUlMUV9ORVhUKGJwYWdlLCBsaW5rcyk7PGJyPg0KZGlmZiAtLWdpdCBhL3N5 cy9hcm02NC9hcm02NC9idXNkbWFfPHdicj5ib3VuY2UuYyBiL3N5cy9hcm02NC9hcm02NC9idXNk bWFfPHdicj5ib3VuY2UuYzxicj4NCmluZGV4IGFkNDZlMjZlNDA2Zi4uNzRmYTYxMWU2ZDFhIDEw MDY0NDxicj4NCi0tLSBhL3N5cy9hcm02NC9hcm02NC9idXNkbWFfPHdicj5ib3VuY2UuYzxicj4N CisrKyBiL3N5cy9hcm02NC9hcm02NC9idXNkbWFfPHdicj5ib3VuY2UuYzxicj4NCkBAIC04Njgs NyArODY4LDcgQEAgYm91bmNlX2J1c19kbWFtYXBfbG9hZF9idWZmZXIoPHdicj5idXNfZG1hX3Rh Z190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1Ziw8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBLQVNTRVJUKGRtYXQtJmd0O2NvbW1vbi5hbGlnbm1lbnQg Jmx0Oz0gUEFHRV9TSVpFLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgICgmcXVvdDtib3VuY2VkIGJ1ZmZlciBjYW5ub3QgaGF2ZSBhbGlnbm1lbnQgYmlnZ2Vy ICZxdW90Ozxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICZx dW90O3RoYW4gUEFHRV9TSVpFOiAlbHUmcXVvdDssIGRtYXQtJmd0O2NvbW1vbi5hbGlnbm1lbnQp KTs8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjdXJhZGRyID0gYWRk X2JvdW5jZV9wYWdlKGRtYXQsIG1hcCwgKHZtX29mZnNldF90KWt2YWRkciwgY3VyYWRkciw8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjdXJhZGRyID0gYWRkX2JvdW5j ZV9wYWdlKGRtYXQsIG1hcCwga3ZhZGRyLCBjdXJhZGRyLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHNnc2l6ZSk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgfSBlbHNlIGlmICgobWFwLSZndDtmbGFncyAmYW1wOyBETUFNQVBfQ09IRVJFTlQpID09 IDApIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAobWFwLSZn dDtzeW5jX2NvdW50ICZndDsgMCkgezxicj4NCkBAIC0xMDQ3LDE5ICsxMDQ3LDE4IEBAIGJvdW5j ZV9idXNfZG1hbWFwX3N5bmMoYnVzXzx3YnI+ZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBt YXAsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChvcCAmYW1wOyBCVVNfRE1BU1lO Q19QUkVXUklURSkgIT0gMCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHdoaWxlIChicGFnZSAhPSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVtcHZhZGRyID0gTlVMTDs8YnI+DQotwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkYXRhdmFkZHIgPSAodm9pZCAq KWJwYWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyID0gYnBhZ2UtJmd0O2RhdGF2YWRkcjs8YnI+DQrC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZGF0YXZh ZGRyID09IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0ZW1wdmFkZHIgPSBwbWFwX3F1aWNrX2VudGVyX3BhZ2Uo PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgYnBhZ2UtJmd0O2RhdGFwYWdlKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkYXRhdmFkZHIgPSB0 ZW1wdmFkZHIgKyBicGFnZS0mZ3Q7ZGF0YW9mZnM7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCi3CoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGRhdGF2YWRkciw8YnI+DQotwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAodm9pZCAq KWJwYWdlLSZndDt2YWRkciwgYnBhZ2UtJmd0O2RhdGFjb3VudCk7PGJyPg0KK8KgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNvcHkoZGF0YXZhZGRyLCBicGFn ZS0mZ3Q7dmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1wdmFkZHIgIT0gTlVMTCk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwbWFwX3F1aWNrX3JlbW92ZV9wYWdlKDx3YnI+dGVtcHZhZGRyKTs8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKG1hcC0mZ3Q7Zmxh Z3MgJmFtcDsgRE1BTUFQX0NPSEVSRU5UKSA9PSAwKTxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNwdV9kY2FjaGVfd2JfcmFu Z2UoKHZvaWQgKilicGFnZS0mZ3Q7dmFkZHIsPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1X2RjYWNoZV93Yl9yYW5nZShi cGFnZS0mZ3Q7PHdicj52YWRkciw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFn ZSA9IFNUQUlMUV9ORVhUKGJwYWdlLCBsaW5rcyk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgfTxicj4NCkBAIC0xMDY3LDcgKzEwNjYsNyBAQCBib3VuY2VfYnVzX2Rt YW1hcF9zeW5jKGJ1c188d2JyPmRtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLDxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0gZWxzZSBpZiAoKG9wICZhbXA7IEJVU19ETUFTWU5D X1BSRVJFQUQpICE9IDApIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB3aGlsZSAoYnBhZ2UgIT0gTlVMTCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgobWFwLSZndDtmbGFncyAmYW1wOyBETUFNQVBfQ09I RVJFTlQpID09IDApPGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1X2RjYWNoZV93Ymludl9yYW5nZSgodm9pZCAqKWJwYWdl LSZndDt2YWRkciw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBjcHVfZGNhY2hlX3diaW52X3JhbmdlKGJwYWdlLSZndDs8d2Jy PnZhZGRyLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlID0gU1RBSUxRX05F WFQoYnBhZ2UsIGxpbmtzKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCB9PGJyPg0KQEAgLTEwNzYsMTggKzEwNzUsMTcgQEAgYm91bmNlX2J1c19kbWFtYXBfc3luYyhi dXNfPHdicj5kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCw8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCBpZiAoKG9wICZhbXA7IEJVU19ETUFTWU5DX1BPU1RSRUFEKSAhPSAwKSB7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGJwYWdlICE9 IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBpZiAoKG1hcC0mZ3Q7ZmxhZ3MgJmFtcDsgRE1BTUFQX0NPSEVSRU5UKSA9PSAwKTxicj4N Ci3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGNwdV9kY2FjaGVfaW52X3JhbmdlKCh2b2lkICopYnBhZ2UtJmd0O3ZhZGRyLDxicj4NCivC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oGNwdV9kY2FjaGVfaW52X3JhbmdlKGJwYWdlLSZndDs8d2JyPnZhZGRyLDxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHRlbXB2YWRkciA9IE5VTEw7PGJyPg0KLcKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyID0gKHZvaWQgKilicGFn ZS0mZ3Q7ZGF0YXZhZGRyOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9IGJwYWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGRhdGF2YWRkciA9 PSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgdGVtcHZhZGRyID0gcG1hcF9xdWlja19lbnRlcl9wYWdlKDxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGJwYWdlLSZndDtkYXRhcGFnZSk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YXZhZGRyID0gdGVtcHZh ZGRyICsgYnBhZ2UtJmd0O2RhdGFvZmZzOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIH08YnI+DQo8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiY29weSgodm9pZCAqKWJwYWdlLSZndDt2YWRkciw8 YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBkYXRhdmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGJwYWdlLSZndDt2YWRkciwgZGF0 YXZhZGRyLCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodGVtcHZhZGRyICE9IE5VTEwpPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgcG1hcF9xdWlja19yZW1vdmVfcGFnZSg8d2JyPnRlbXB2YWRkcik7PGJyPg0KZGlmZiAt LWdpdCBhL3N5cy9rZXJuL3N1YnJfYnVzZG1hX2JvdW5jZS48d2JyPmMgYi9zeXMva2Vybi9zdWJy X2J1c2RtYV9ib3VuY2UuPHdicj5jPGJyPg0KaW5kZXggNjBmZTJmYzZiMmE2Li4yNzc0MTI4YTFh ZTUgMTAwNjQ0PGJyPg0KLS0tIGEvc3lzL2tlcm4vc3Vicl9idXNkbWFfYm91bmNlLjx3YnI+Yzxi cj4NCisrKyBiL3N5cy9rZXJuL3N1YnJfYnVzZG1hX2JvdW5jZS48d2JyPmM8YnI+DQpAQCAtNDks OSArNDksOSBAQDxicj4NCsKgI2luY2x1ZGUgJmx0O3N5cy9zY2hlZC5oJmd0Ozxicj4NCjxicj4N CsKgc3RydWN0IGJvdW5jZV9wYWdlIHs8YnI+DQotwqAgwqAgwqAgwqB2bV9vZmZzZXRfdMKgIMKg IMKgdmFkZHI7wqAgwqAgwqAgwqAgwqAgLyoga3ZhIG9mIGJvdW5jZSBidWZmZXIgKi88YnI+DQor wqAgwqAgwqAgwqBjaGFywqAgwqAgwqAgwqAgwqAgwqAgKnZhZGRyO8KgIMKgIMKgIMKgIMKgLyog a3ZhIG9mIGJvdW5jZSBidWZmZXIgKi88YnI+DQrCoCDCoCDCoCDCoCBidXNfYWRkcl90wqAgwqAg wqAgYnVzYWRkcjvCoCDCoCDCoCDCoCAvKiBQaHlzaWNhbCBhZGRyZXNzICovPGJyPg0KLcKgIMKg IMKgIMKgdm1fb2Zmc2V0X3TCoCDCoCDCoGRhdGF2YWRkcjvCoCDCoCDCoCAvKiBrdmEgb2YgY2xp ZW50IGRhdGEgKi88YnI+DQorwqAgwqAgwqAgwqBjaGFywqAgwqAgwqAgwqAgwqAgwqAgKmRhdGF2 YWRkcjvCoCDCoCDCoC8qIGt2YSBvZiBjbGllbnQgZGF0YSAqLzxicj4NCsKgI2lmIGRlZmluZWQo X19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9faTM4Nl9fKTxicj4NCsKgIMKgIMKgIMKgIHZtX3BhZ2Vf dMKgIMKgIMKgIMKgZGF0YXBhZ2VbMl07wqAgwqAgLyogcGh5c2ljYWwgcGFnZShzKSBvZiBjbGll bnQgZGF0YSAqLzxicj4NCsKgI2Vsc2U8YnI+DQpAQCAtMjgyLDE4ICsyODIsMTggQEAgYWxsb2Nf Ym91bmNlX3BhZ2VzKGJ1c19kbWFfPHdicj50YWdfdCBkbWF0LCB1X2ludCBudW1wYWdlcyk8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoYnBhZ2UgPT0gTlVMTCk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicmVhazs8YnI+DQrCoCNpZmRlZiBkbWF0X2Rv bWFpbjxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZndDt2YWRkciA9ICh2bV9v ZmZzZXRfdCljb250aWdtYWxsb2NfPHdicj5kb21haW5zZXQoUEFHRV9TSVpFLDxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZndDt2YWRkciA9IGNvbnRpZ21hbGxvY19kb21haW5z ZXQoUEFHRV88d2JyPlNJWkUsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgTV9C T1VOQ0UsIERPTUFJTlNFVF9QUkVGKGJ6LSZndDtkb21haW4pLCBNX05PV0FJVCw8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAwdWwsIGJ6LSZndDtsb3dhZGRyLCBQQUdFX1NJWkUs IDApOzxicj4NCsKgI2Vsc2U8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7 dmFkZHIgPSAodm1fb2Zmc2V0X3QpY29udGlnbWFsbG9jKDx3YnI+UEFHRV9TSVpFLCBNX0JPVU5D RSw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7dmFkZHIgPSBjb250aWdt YWxsb2MoUEFHRV9TSVpFLCBNX0JPVU5DRSw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBNX05PV0FJVCwgMHVsLCBiei0mZ3Q7bG93YWRkciwgUEFHRV9TSVpFLCAwKTs8YnI+DQrC oCNlbmRpZjxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChicGFnZS0mZ3Q7dmFkZHIg PT0gMCkgezxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGlmIChicGFnZS0mZ3Q7dmFkZHIg PT0gTlVMTCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGZyZWUo YnBhZ2UsIE1fQlVTRE1BKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBicmVhazs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9PGJyPg0KLcKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgYnBhZ2UtJmd0O2J1c2FkZHIgPSBwbWFwX2tleHRyYWN0KGJwYWdlLSZndDt2 YWRkcik7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnBhZ2UtJmd0O2J1c2FkZHIgPSBw bWFwX2tleHRyYWN0KCh2bV9vZmZzZXRfdCk8d2JyPmJwYWdlLSZndDt2YWRkcik7PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgbXR4X2xvY2soJmFtcDtib3VuY2VfbG9jayk7PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgU1RBSUxRX0lOU0VSVF9UQUlMKCZhbXA7YnotJmd0Ozx3YnI+ Ym91bmNlX3BhZ2VfbGlzdCwgYnBhZ2UsIGxpbmtzKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB0b3RhbF9icGFnZXMrKzs8YnI+DQpAQCAtMzI3LDExICszMjcsMTEgQEAgcmVzZXJ2ZV9i b3VuY2VfcGFnZXMoYnVzX2RtYV88d2JyPnRhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIGlu dCBjb21taXQpPGJyPg0KPGJyPg0KwqAjaWYgZGVmaW5lZChfX2FtZDY0X18pIHx8IGRlZmluZWQo X19pMzg2X18pPGJyPg0KwqBzdGF0aWMgYnVzX2FkZHJfdDxicj4NCi1hZGRfYm91bmNlX3BhZ2Uo YnVzX2RtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLCB2bV9vZmZzZXRfdCB2YWRkciw8 YnI+DQorYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1h cCwgdm9pZCAqdmFkZHIsPGJyPg0KwqAgwqAgwqB2bV9wYWRkcl90IGFkZHIxLCB2bV9wYWRkcl90 IGFkZHIyLCBidXNfc2l6ZV90IHNpemUpPGJyPg0KwqAjZWxzZTxicj4NCsKgc3RhdGljIGJ1c19h ZGRyX3Q8YnI+DQotYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1h cF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsPGJyPg0KK2FkZF9ib3VuY2VfcGFnZShidXNfZG1h X3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKnZhZGRyLDxicj4NCsKgIMKgIMKg YnVzX2FkZHJfdCBhZGRyLCBidXNfc2l6ZV90IHNpemUpPGJyPg0KwqAjZW5kaWY8YnI+DQrCoHs8 YnI+DQpAQCAtMzcwLDEzICszNzAsMTMgQEAgYWRkX2JvdW5jZV9wYWdlKGJ1c19kbWFfdGFnX3Qg ZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm1fb2Zmc2V0X3QgdmFkZHIsPGJyPg0KwqAgwqAgwqAg wqAgaWYgKGRtYXRfZmxhZ3MoZG1hdCkgJmFtcDsgQlVTX0RNQV9LRUVQX1BHX09GRlNFVCkgezxi cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8qIFBhZ2Ugb2Zmc2V0IG5lZWRzIHRvIGJlIHBy ZXNlcnZlZC4gKi88YnI+DQrCoCNpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX2kz ODZfXyk8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7dmFkZHIgfD0gYWRk cjEgJmFtcDsgUEFHRV9NQVNLOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZn dDtidXNhZGRyIHw9IGFkZHIxICZhbXA7IFBBR0VfTUFTSzs8YnI+DQorwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBicGFnZS0mZ3Q7dmFkZHIgKz0gYWRkcjEgJmFtcDsgUEFHRV9NQVNLOzxicj4NCivC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZndDtidXNhZGRyICs9IGFkZHIxICZhbXA7IFBB R0VfTUFTSzs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBLQVNTRVJUKGFkZHIyID09IDAs PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgKCZxdW90O1RyeWluZyB0byBib3VuY2UgbXVsdGlwbGUg cGFnZXMgd2l0aCBCVVNfRE1BX0tFRVBfUEdfT0ZGU0VUJnF1b3Q7KSk7PC9ibG9ja3F1b3RlPjxk aXY+PGJyPjwvZGl2PjxkaXY+VGhlc2UgaHVua3MgbG9va3MgZGlmZmVyZW50IGZyb20gdGhlIGNv bW1pdCBtZXNzYWdlLjwvZGl2PjxkaXY+wqA8L2Rpdj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxf cXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xp ZDtwYWRkaW5nLWxlZnQ6MWV4Ij4NCsKgI2Vsc2U8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqBicGFnZS0mZ3Q7dmFkZHIgfD0gYWRkciAmYW1wOyBQQUdFX01BU0s7PGJyPg0KLcKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgYnBhZ2UtJmd0O2J1c2FkZHIgfD0gYWRkciAmYW1wOyBQQUdFX01BU0s7 PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnBhZ2UtJmd0O3ZhZGRyICs9IGFkZHIgJmFt cDsgUEFHRV9NQVNLOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJwYWdlLSZndDtidXNh ZGRyICs9IGFkZHIgJmFtcDsgUEFHRV9NQVNLOzxicj4NCsKgI2VuZGlmPGJyPg0KwqAgwqAgwqAg wqAgfTxicj4NCsKgIMKgIMKgIMKgIGJwYWdlLSZndDtkYXRhdmFkZHIgPSB2YWRkcjs8YnI+DQpA QCAtNDA5LDcgKzQwOSw3IEBAIGZyZWVfYm91bmNlX3BhZ2VzKGJ1c19kbWFfdGFnXzx3YnI+dCBk bWF0LCBidXNfZG1hbWFwX3QgbWFwKTxicj4NCsKgIMKgIMKgIMKgIGNvdW50ID0gMDs8YnI+DQrC oCDCoCDCoCDCoCBzY2hlZHVsZV90aHJlYWQgPSBmYWxzZTs8YnI+DQrCoCDCoCDCoCDCoCBTVEFJ TFFfRk9SRUFDSChicGFnZSwgJmFtcDttYXAtJmd0O2JwYWdlcywgbGlua3MpIHs8YnI+DQotwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7ZGF0YXZhZGRyID0gMDs8YnI+DQorwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7ZGF0YXZhZGRyID0gTlVMTDs8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBicGFnZS0mZ3Q7ZGF0YWNvdW50ID0gMDs8YnI+DQo8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoZG1hdF9mbGFncyhkbWF0KSAmYW1wOyBCVVNfRE1BX0tF RVBfUEdfT0ZGU0VUKSB7PGJyPg0KQEAgLTQxOSw4ICs0MTksOCBAQCBmcmVlX2JvdW5jZV9wYWdl cyhidXNfZG1hX3RhZ188d2JyPnQgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCk8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCogc3RvcmUgYSBmdWxsIHBhZ2Ugb2YgZGF0 YSBhbmQvb3IgYXNzdW1lIGl0PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAqIHN0YXJ0cyBvbiBhIHBhZ2UgYm91bmRhcnkuPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAqLzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoGJwYWdlLSZndDt2YWRkciAmYW1wOz0gflBBR0VfTUFTSzs8YnI+DQotwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7YnVzYWRkciAmYW1wOz0gflBBR0Vf TUFTSzs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBicGFnZS0mZ3Q7 dmFkZHIgPSB0cnVuY19wYWdlKGJwYWdlLSZndDt2YWRkcik7PGJyPg0KK8KgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgYnBhZ2UtJmd0O2J1c2FkZHIgPSB0cnVuY19wYWdlKGJwYWdl LSZndDtidXNhZGRyKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9PGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgY291bnQrKzs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KZGlmZiAt LWdpdCBhL3N5cy9wb3dlcnBjL3Bvd2VycGMvYnVzZG1hXzx3YnI+bWFjaGRlcC5jIGIvc3lzL3Bv d2VycGMvcG93ZXJwYy9idXNkbWFfPHdicj5tYWNoZGVwLmM8YnI+DQppbmRleCA1NmZlZmZkZThi MzcuLjdmZTJmZDRmZjk4NiAxMDA2NDQ8YnI+DQotLS0gYS9zeXMvcG93ZXJwYy9wb3dlcnBjL2J1 c2RtYV88d2JyPm1hY2hkZXAuYzxicj4NCisrKyBiL3N5cy9wb3dlcnBjL3Bvd2VycGMvYnVzZG1h Xzx3YnI+bWFjaGRlcC5jPGJyPg0KQEAgLTYxMyw3ICs2MTMsNyBAQCBfYnVzX2RtYW1hcF9sb2Fk X2J1ZmZlcihidXNfPHdicj5kbWFfdGFnX3QgZG1hdCw8YnI+DQrCoHs8YnI+DQrCoCDCoCDCoCDC oCBidXNfc2l6ZV90IHNnc2l6ZTs8YnI+DQrCoCDCoCDCoCDCoCBidXNfYWRkcl90IGN1cmFkZHI7 PGJyPg0KLcKgIMKgIMKgIMKgdm1fb2Zmc2V0X3Qga3ZhZGRyLCB2YWRkcjs8YnI+DQorwqAgwqAg wqAgwqBjaGFyICprdmFkZHIsICp2YWRkcjs8YnI+DQrCoCDCoCDCoCDCoCBpbnQgZXJyb3I7PGJy Pg0KPGJyPg0KwqAgwqAgwqAgwqAgaWYgKHNlZ3MgPT0gTlVMTCk8YnI+DQpAQCAtNjI4LDE4ICs2 MjgsMTggQEAgX2J1c19kbWFtYXBfbG9hZF9idWZmZXIoYnVzXzx3YnI+ZG1hX3RhZ190IGRtYXQs PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCsKgIMKgIMKgIMKgIH08YnI+DQo8 YnI+DQotwqAgwqAgwqAgwqB2YWRkciA9ICh2bV9vZmZzZXRfdClidWY7PGJyPg0KK8KgIMKgIMKg IMKgdmFkZHIgPSBidWY7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgd2hpbGUgKGJ1ZmxlbiAmZ3Q7 IDApIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvKjxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgKiBHZXQgdGhlIHBoeXNpY2FsIGFkZHJlc3MgZm9yIHRoaXMgc2VnbWVudC48 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCovPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgaWYgKHBtYXAgPT0ga2VybmVsX3BtYXApIHs8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBjdXJhZGRyID0gcG1hcF9rZXh0cmFjdCh2YWRkcik7PGJyPg0KK8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3VyYWRkciA9IHBtYXBfa2V4dHJhY3Qo KHZtX29mZnNldF90KTx3YnI+dmFkZHIpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIGt2YWRkciA9IHZhZGRyOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH0g ZWxzZSB7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3VyYWRkciA9 IHBtYXBfZXh0cmFjdChwbWFwLCB2YWRkcik7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKga3ZhZGRyID0gMDs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqBjdXJhZGRyID0gcG1hcF9leHRyYWN0KHBtYXAsICh2bV9vZmZzZXRfdCl2YWRkcik7 PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKga3ZhZGRyID0gTlVMTDs8 YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgLyo8YnI+DQpAQCAtNzMzLDcgKzczMyw3IEBAIGJ1c19kbWFtYXBfc3luYyhidXNf ZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19kbWFzeW5jX29wX3Qgb3ApPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG9wICZhbXA7IEJVU19ETUFTWU5DX1BSRVdS SVRFKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGJw YWdlICE9IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB0ZW1wdmFkZHIgPSBOVUxMOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9ICh2b2lkICopYnBhZ2UtJmd0O2Rh dGF2YWRkcjs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqBkYXRhdmFkZHIgPSBicGFnZS0mZ3Q7ZGF0YXZhZGRyOzxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChkYXRhdmFkZHIgPT0gTlVMTCkg ezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHRlbXB2YWRkciA9IHBtYXBfcXVpY2tfZW50ZXJfcGFnZSg8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBicGFnZS0mZ3Q7ZGF0YXBhZ2UpOzxicj4NCkBAIC03NDEsOCArNzQxLDcgQEAgYnVzX2RtYW1h cF9zeW5jKGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgYnVzX2RtYXN5bmNf b3BfdCBvcCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFnZS0mZ3Q7ZGF0YW9mZnM7PGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCi3CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGRhdGF2YWRk ciw8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAodm9pZCAqKWJwYWdlLSZndDt2YWRkciwgYnBhZ2UtJmd0O2RhdGFjb3VudCk7PGJyPg0K K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNvcHkoZGF0 YXZhZGRyLCBicGFnZS0mZ3Q7dmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCjxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1w dmFkZHIgIT0gTlVMTCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwbWFwX3F1aWNrX3JlbW92ZV9wYWdlKDx3YnI+dGVtcHZh ZGRyKTs8YnI+DQpAQCAtNzU0LDcgKzc1Myw3IEBAIGJ1c19kbWFtYXBfc3luYyhidXNfZG1hX3Rh Z190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIGJ1c19kbWFzeW5jX29wX3Qgb3ApPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKG9wICZhbXA7IEJVU19ETUFTWU5DX1BPU1RSRUFEKSB7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGJwYWdlICE9 IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCB0ZW1wdmFkZHIgPSBOVUxMOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9ICh2b2lkICopYnBhZ2UtJmd0O2RhdGF2YWRk cjs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBk YXRhdmFkZHIgPSBicGFnZS0mZ3Q7ZGF0YXZhZGRyOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmIChkYXRhdmFkZHIgPT0gTlVMTCkgezxicj4N CsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIHRlbXB2YWRkciA9IHBtYXBfcXVpY2tfZW50ZXJfcGFnZSg8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBicGFn ZS0mZ3Q7ZGF0YXBhZ2UpOzxicj4NCkBAIC03NjIsOCArNzYxLDcgQEAgYnVzX2RtYW1hcF9zeW5j KGJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgYnVzX2RtYXN5bmNfb3BfdCBv cCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBicGFnZS0mZ3Q7ZGF0YW9mZnM7PGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCi3CoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KCh2b2lkICopYnBhZ2Ut Jmd0O3ZhZGRyLDxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGRhdGF2YWRkciwgYnBhZ2UtJmd0O2RhdGFjb3VudCk7PGJyPg0KK8KgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNvcHkoYnBhZ2UtJmd0 O3ZhZGRyLCBkYXRhdmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCjxicj4NCsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1wdmFkZHIg IT0gTlVMTCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCBwbWFwX3F1aWNrX3JlbW92ZV9wYWdlKDx3YnI+dGVtcHZhZGRyKTs8 YnI+DQpkaWZmIC0tZ2l0IGEvc3lzL3Jpc2N2L3Jpc2N2L2J1c2RtYV88d2JyPmJvdW5jZS5jIGIv c3lzL3Jpc2N2L3Jpc2N2L2J1c2RtYV88d2JyPmJvdW5jZS5jPGJyPg0KaW5kZXggMGYyZDU5MmY0 ZTUyLi40NTJjZWFkM2M2YjYgMTAwNjQ0PGJyPg0KLS0tIGEvc3lzL3Jpc2N2L3Jpc2N2L2J1c2Rt YV88d2JyPmJvdW5jZS5jPGJyPg0KKysrIGIvc3lzL3Jpc2N2L3Jpc2N2L2J1c2RtYV88d2JyPmJv dW5jZS5jPGJyPg0KQEAgLTY3Myw3ICs2NzMsNyBAQCBib3VuY2VfYnVzX2RtYW1hcF9sb2FkX2J1 ZmZlcig8d2JyPmJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm9pZCAqYnVm LDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGFkZHJfbmVlZHNfYm91bmNlKGRt YXQsIGN1cmFkZHIpKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg c2dzaXplID0gcm91bmR1cDIoc2dzaXplLCBkbWF0LSZndDtjb21tb24uYWxpZ25tZW50KTs8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBzZ3NpemUgPSBNSU4oc2dzaXpl LCBidWZsZW4pOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cmFk ZHIgPSBhZGRfYm91bmNlX3BhZ2UoZG1hdCwgbWFwLCAodm1fb2Zmc2V0X3Qpa3ZhZGRyLCBjdXJh ZGRyLDxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cmFkZHIgPSBh ZGRfYm91bmNlX3BhZ2UoZG1hdCwgbWFwLCBrdmFkZHIsIGN1cmFkZHIsPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2dzaXplKTs8YnI+DQrCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCB9IGVsc2UgaWYgKChkbWF0LSZndDtib3VuY2VfZmxhZ3MgJmFtcDsgQkZf Q09IRVJFTlQpID09IDApIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBpZiAobWFwLSZndDtzeW5jX2NvdW50ICZndDsgMCkgezxicj4NCkBAIC04NTAsMTkgKzg1MCwx OCBAQCBib3VuY2VfYnVzX2RtYW1hcF9zeW5jKGJ1c188d2JyPmRtYV90YWdfdCBkbWF0LCBidXNf ZG1hbWFwX3QgbWFwLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICgob3AgJmFtcDsg QlVTX0RNQVNZTkNfUFJFV1JJVEUpICE9IDApIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCB3aGlsZSAoYnBhZ2UgIT0gTlVMTCkgezxicj4NCsKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlbXB2YWRkciA9IE5VTEw7PGJyPg0K LcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRy ID0gKHZvaWQgKilicGFnZS0mZ3Q7ZGF0YXZhZGRyOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9IGJwYWdlLSZndDtkYXRhdmFk ZHI7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg aWYgKGRhdGF2YWRkciA9PSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVtcHZhZGRyID0gcG1hcF9xdWlja19l bnRlcl9wYWdlKDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZndDtkYXRhcGFnZSk7PGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0 YXZhZGRyID0gdGVtcHZhZGRyICsgYnBhZ2UtJmd0O2RhdGFvZmZzOzxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH08YnI+DQo8YnI+DQotwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiY29weShkYXRhdmFkZHIs PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgKHZvaWQgKilicGFnZS0mZ3Q7dmFkZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCivC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGRhdGF2 YWRkciwgYnBhZ2UtJmd0O3ZhZGRyLCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodGVtcHZhZGRyICE9 IE5VTEwpPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgcG1hcF9xdWlja19yZW1vdmVfcGFnZSg8d2JyPnRlbXB2YWRkcik7PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChk bWF0LSZndDtib3VuY2VfZmxhZ3MgJmFtcDsgQkZfQ09IRVJFTlQpID09IDApPGJyPg0KLcKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1 X2RjYWNoZV93Yl9yYW5nZShicGFnZS0mZ3Q7PHdicj52YWRkciw8YnI+DQorwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjcHVfZGNhY2hl X3diX3JhbmdlKCh2bV88d2JyPm9mZnNldF90KWJwYWdlLSZndDt2YWRkciw8YnI+DQrCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCBicGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCBicGFnZSA9IFNUQUlMUV9ORVhUKGJwYWdlLCBsaW5rcyk7PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCkBAIC04NzAsNyAr ODY5LDcgQEAgYm91bmNlX2J1c19kbWFtYXBfc3luYyhidXNfPHdicj5kbWFfdGFnX3QgZG1hdCwg YnVzX2RtYW1hcF90IG1hcCw8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IGVsc2UgaWYg KChvcCAmYW1wOyBCVVNfRE1BU1lOQ19QUkVSRUFEKSAhPSAwKSB7PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgd2hpbGUgKGJwYWdlICE9IE5VTEwpIHs8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAoKGRtYXQtJmd0 O2JvdW5jZV9mbGFncyAmYW1wOyBCRl9DT0hFUkVOVCkgPT0gMCk8YnI+DQotwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBjcHVfZGNhY2hl X3diaW52X3JhbmdlKGJwYWdlLSZndDs8d2JyPnZhZGRyLDxicj4NCivCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNwdV9kY2FjaGVfd2Jp bnZfcmFuZ2UoKHZtXzx3YnI+b2Zmc2V0X3QpYnBhZ2UtJmd0O3ZhZGRyLDxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlID0gU1RBSUxRX05FWFQoYnBhZ2UsIGxpbmtzKTs8YnI+ DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9PGJyPg0KQEAgLTg3OSwxOCAr ODc4LDE3IEBAIGJvdW5jZV9idXNfZG1hbWFwX3N5bmMoYnVzXzx3YnI+ZG1hX3RhZ190IGRtYXQs IGJ1c19kbWFtYXBfdCBtYXAsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChvcCAm YW1wOyBCVVNfRE1BU1lOQ19QT1NUUkVBRCkgIT0gMCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIHdoaWxlIChicGFnZSAhPSBOVUxMKSB7PGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKChkbWF0LSZndDtib3Vu Y2VfZmxhZ3MgJmFtcDsgQkZfQ09IRVJFTlQpID09IDApPGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1X2RjYWNoZV9pbnZf cmFuZ2UoYnBhZ2UtJmd0Ozx3YnI+dmFkZHIsPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgY3B1X2RjYWNoZV9pbnZfcmFuZ2Uo KHZtXzx3YnI+b2Zmc2V0X3QpYnBhZ2UtJmd0O3ZhZGRyLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGJwYWdlLSZn dDtkYXRhY291bnQpOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIHRlbXB2YWRkciA9IE5VTEw7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyID0gKHZvaWQgKilicGFnZS0mZ3Q7ZGF0 YXZhZGRyOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoGRhdGF2YWRkciA9IGJwYWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGRhdGF2YWRkciA9PSBOVUxMKSB7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgdGVtcHZhZGRyID0gcG1hcF9xdWlja19lbnRlcl9wYWdlKDxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IGJwYWdlLSZndDtkYXRhcGFnZSk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YXZhZGRyID0gdGVtcHZhZGRyICsgYnBh Z2UtJmd0O2RhdGFvZmZzOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIH08YnI+DQo8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBiY29weSgodm9pZCAqKWJwYWdlLSZndDt2YWRkciw8YnI+DQotwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkYXRhdmFk ZHIsIGJwYWdlLSZndDtkYXRhY291bnQpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGJwYWdlLSZndDt2YWRkciwgZGF0YXZhZGRyLCBi cGFnZS0mZ3Q7ZGF0YWNvdW50KTs8YnI+DQo8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpZiAodGVtcHZhZGRyICE9IE5VTEwpPGJyPg0KwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcG1h cF9xdWlja19yZW1vdmVfcGFnZSg8d2JyPnRlbXB2YWRkcik7PGJyPg0KZGlmZiAtLWdpdCBhL3N5 cy94ODYveDg2L2J1c2RtYV9ib3VuY2UuYyBiL3N5cy94ODYveDg2L2J1c2RtYV9ib3VuY2UuYzxi cj4NCmluZGV4IGJjNDhjNjA0NDhkYS4uYmQ3MDBkNGQ1NWJlIDEwMDY0NDxicj4NCi0tLSBhL3N5 cy94ODYveDg2L2J1c2RtYV9ib3VuY2UuYzxicj4NCisrKyBiL3N5cy94ODYveDg2L2J1c2RtYV9i b3VuY2UuYzxicj4NCkBAIC02ODcsNyArNjg3LDcgQEAgYm91bmNlX2J1c19kbWFtYXBfbG9hZF9i dWZmZXIoPHdicj5idXNfZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsIHZvaWQgKmJ1 Ziw8YnI+DQrCoHs8YnI+DQrCoCDCoCDCoCDCoCBidXNfc2l6ZV90IHNnc2l6ZTs8YnI+DQrCoCDC oCDCoCDCoCB2bV9wYWRkcl90IGN1cmFkZHI7PGJyPg0KLcKgIMKgIMKgIMKgdm1fb2Zmc2V0X3Qg a3ZhZGRyLCB2YWRkcjs8YnI+DQorwqAgwqAgwqAgwqBjaGFyICprdmFkZHIsICp2YWRkcjs8YnI+ DQrCoCDCoCDCoCDCoCBpbnQgZXJyb3I7PGJyPg0KPGJyPg0KwqAgwqAgwqAgwqAgaWYgKG1hcCA9 PSBOVUxMKTxicj4NCkBAIC03MDUsMTcgKzcwNSwxNyBAQCBib3VuY2VfYnVzX2RtYW1hcF9sb2Fk X2J1ZmZlcig8d2JyPmJ1c19kbWFfdGFnX3QgZG1hdCwgYnVzX2RtYW1hcF90IG1hcCwgdm9pZCAq YnVmLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIH08YnI+DQrCoCDCoCDCoCDCoCB9PGJy Pg0KPGJyPg0KLcKgIMKgIMKgIMKgdmFkZHIgPSAodm1fb2Zmc2V0X3QpYnVmOzxicj4NCivCoCDC oCDCoCDCoHZhZGRyID0gYnVmOzxicj4NCsKgIMKgIMKgIMKgIHdoaWxlIChidWZsZW4gJmd0OyAw KSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyo8YnI+DQrCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCogR2V0IHRoZSBwaHlzaWNhbCBhZGRyZXNzIGZvciB0aGlzIHNlZ21lbnQuPGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAqLzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIGlmIChwbWFwID09IGtlcm5lbF9wbWFwKSB7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgY3VyYWRkciA9IHBtYXBfa2V4dHJhY3QodmFkZHIpOzxicj4NCivCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cmFkZHIgPSBwbWFwX2tleHRyYWN0KCh2 bV9vZmZzZXRfdCk8d2JyPnZhZGRyKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCBrdmFkZHIgPSB2YWRkcjs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB9IGVs c2Ugezxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGN1cmFkZHIgPSBw bWFwX2V4dHJhY3QocG1hcCwgdmFkZHIpOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGt2YWRkciA9IDA7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgY3VyYWRkciA9IHBtYXBfZXh0cmFjdChwbWFwLCAodm1fb2Zmc2V0X3QpdmFkZHIpOzxi cj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGt2YWRkciA9IE5VTEw7PGJy Pg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIC8qPGJyPg0KQEAgLTg3OSw3ICs4NzksNyBAQCBib3VuY2VfYnVzX2RtYW1hcF9zeW5j KGJ1c188d2JyPmRtYV90YWdfdCBkbWF0LCBidXNfZG1hbWFwX3QgbWFwLDxicj4NCsKgIMKgIMKg IMKgIGlmICgob3AgJmFtcDsgQlVTX0RNQVNZTkNfUFJFV1JJVEUpICE9IDApIHs8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCB3aGlsZSAoYnBhZ2UgIT0gTlVMTCkgezxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlbXB2YWRkciA9IE5VTEw7PGJyPg0KLcKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyID0gKHZvaWQgKilicGFnZS0m Z3Q7ZGF0YXZhZGRyOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGRh dGF2YWRkciA9IGJwYWdlLSZndDtkYXRhdmFkZHI7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgZGF0YWNvdW50MSA9IGJwYWdlLSZndDtkYXRhY291bnQ7PGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKGRhdGF2YWRkciA9PSBOVUxMKSB7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGVt cHZhZGRyID08YnI+DQpAQCAtODg5LDggKzg4OSw3IEBAIGJvdW5jZV9idXNfZG1hbWFwX3N5bmMo YnVzXzx3YnI+ZG1hX3RhZ190IGRtYXQsIGJ1c19kbWFtYXBfdCBtYXAsPGJyPg0KwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YWNvdW50MSk7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCi3C oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGJjb3B5KGRhdGF2YWRkciw8YnI+DQot wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAodm9pZCAqKWJwYWdlLSZn dDt2YWRkciwgZGF0YWNvdW50MSk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgYmNvcHkoZGF0YXZhZGRyLCBicGFnZS0mZ3Q7dmFkZHIsIGRhdGFjb3VudDEpOzxicj4N Cjxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1wdmFkZHIg IT0gTlVMTCk8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCBwbWFwX3F1aWNrX3JlbW92ZV9wYWdlKDx3YnI+dGVtcHZhZGRyKTs8YnI+DQpAQCAtOTA3 LDggKzkwNiw3IEBAIGJvdW5jZV9idXNfZG1hbWFwX3N5bmMoYnVzXzx3YnI+ZG1hX3RhZ190IGRt YXQsIGJ1c19kbWFtYXBfdCBtYXAsPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAqLzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRhdGF2 YWRkciA9IHBtYXBfcXVpY2tfZW50ZXJfcGFnZShicGFnZS0mZ3Q7PHdicj5kYXRhcGFnZVsxXSk7 PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YWNvdW50MiA9IGJw YWdlLSZndDtkYXRhY291bnQgLSBkYXRhY291bnQxOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGJjb3B5KGRhdGF2YWRkciw8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAodm9pZCAqKShicGFnZS0mZ3Q7dmFkZHIgKyBkYXRhY291 bnQxKSwgZGF0YWNvdW50Mik7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgYmNvcHkoZGF0YXZhZGRyLCBicGFnZS0mZ3Q7dmFkZHIgKyBkYXRhY291bnQxLCBkYXRhY291 bnQyKTs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwbWFwX3F1aWNr X3JlbW92ZV9wYWdlKDx3YnI+ZGF0YXZhZGRyKTs8YnI+DQo8YnI+DQrCoG5leHRfdzo8YnI+DQpA QCAtOTIwLDcgKzkxOCw3IEBAIG5leHRfdzo8YnI+DQrCoCDCoCDCoCDCoCBpZiAoKG9wICZhbXA7 IEJVU19ETUFTWU5DX1BPU1RSRUFEKSAhPSAwKSB7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgd2hpbGUgKGJwYWdlICE9IE5VTEwpIHs8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCB0ZW1wdmFkZHIgPSBOVUxMOzxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoGRhdGF2YWRkciA9ICh2b2lkICopYnBhZ2UtJmd0O2RhdGF2YWRkcjs8YnI+ DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBkYXRhdmFkZHIgPSBicGFnZS0m Z3Q7ZGF0YXZhZGRyOzxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRh dGFjb3VudDEgPSBicGFnZS0mZ3Q7ZGF0YWNvdW50Ozxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIGlmIChkYXRhdmFkZHIgPT0gTlVMTCkgezxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHRlbXB2YWRkciA9PGJyPg0KQEAg LTkzMCw4ICs5MjgsNyBAQCBuZXh0X3c6PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YWNvdW50MSk7PGJyPg0KwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfTxicj4NCjxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGJjb3B5KCh2b2lkICopYnBhZ2UtJmd0O3ZhZGRyLCBkYXRhdmFkZHIs PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YWNvdW50 MSk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNvcHkoYnBhZ2Ut Jmd0O3ZhZGRyLCBkYXRhdmFkZHIsIGRhdGFjb3VudDEpOzxicj4NCjxicj4NCsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlmICh0ZW1wdmFkZHIgIT0gTlVMTCk8YnI+DQrCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwbWFwX3F1aWNrX3Jl bW92ZV9wYWdlKDx3YnI+dGVtcHZhZGRyKTs8YnI+DQpAQCAtOTQ4LDggKzk0NSw3IEBAIG5leHRf dzo8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCovPGJyPg0KwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGF0YXZhZGRyID0gcG1hcF9xdWlja19l bnRlcl9wYWdlKGJwYWdlLSZndDs8d2JyPmRhdGFwYWdlWzFdKTs8YnI+DQrCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBkYXRhY291bnQyID0gYnBhZ2UtJmd0O2RhdGFjb3VudCAt IGRhdGFjb3VudDE7PGJyPg0KLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYmNv cHkoKHZvaWQgKikoYnBhZ2UtJmd0O3ZhZGRyICsgZGF0YWNvdW50MSksPGJyPg0KLcKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgZGF0YXZhZGRyLCBkYXRhY291bnQyKTs8 YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBiY29weShicGFnZS0mZ3Q7 dmFkZHIgKyBkYXRhY291bnQxLCBkYXRhdmFkZHIsIGRhdGFjb3VudDIpOzxicj4NCsKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHBtYXBfcXVpY2tfcmVtb3ZlX3BhZ2UoPHdicj5k YXRhdmFkZHIpOzxicj4NCjxicj4NCsKgbmV4dF9yOjxicj4NCjxicj4NCjwvYmxvY2txdW90ZT4N Cg== --0000000000005df1ee0650899b12--