From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 49277 invoked by alias); 24 Jun 2017 10:48:52 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 49106 invoked by uid 89); 24 Jun 2017 10:48:40 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-10.0 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_1,GIT_PATCH_2,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=comme, chaque, 0.9, nombre X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-yb0-f173.google.com Received: from mail-yb0-f173.google.com (HELO mail-yb0-f173.google.com) (209.85.213.173) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 24 Jun 2017 10:48:20 +0000 Received: by mail-yb0-f173.google.com with SMTP id b81so185299yba.2; Sat, 24 Jun 2017 03:48:13 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=GHJSn8xO7OLL9yu31ogt7sFISuoGMSbMxDSraYJY0Ks=; b=fCZs38DUcN6aExH4SFjrPVXbdQaa0O6S4P4DLtICAAXHNpjdAYp2VL3v+5vzZXzZH9 0we+BevMvz1y75If5o3XTjpI+0gAKXAzoiS1AZrwTcoRHOOYfmfdeg2jP+LqFYF4KufT d3/kSYGpIsXYCcOINSy1KdQGZlRqygO5/P8TwDA2EZVL1NPXawDDZz6L+8AUlKIQpeLc TclCqvH0mciqMDxRzhE+s/qzo8oo5FvlJKJQTwu+hHx/n9E3mFY/RaeA83PmUMAPCUYt Wsbm7akQv7obYJrocDP62b1tN6d2WXgd5iSz0HEtDeieZZ4umfoPgH35HD78qMHTJnuX Uowg== X-Gm-Message-State: AKS2vOzWZRtZFcA+PQdMt9pVqXY8S4TvFbZsL6rHGkN1ILYe5Et/RXZe M5d4GBZ7nZf3YFzF2CM/rh/adWyIQIRg X-Received: by 10.37.161.6 with SMTP id z6mr9624885ybh.106.1498301292197; Sat, 24 Jun 2017 03:48:12 -0700 (PDT) MIME-Version: 1.0 Received: by 10.129.87.132 with HTTP; Sat, 24 Jun 2017 03:48:11 -0700 (PDT) From: Paul Richard Thomas Date: Sat, 24 Jun 2017 10:48:00 -0000 Message-ID: Subject: [Patch, fortran] PR34640 - ICE when assigning item of a derived-component to a pointer To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="f403045c67c649fe5c0552b2742e" X-SW-Source: 2017-06/txt/msg01843.txt.bz2 --f403045c67c649fe5c0552b2742e Content-Type: text/plain; charset="UTF-8" Content-length: 5173 Dear All, Please find attached a draft patch for the above PR, together with PRs 40737, 55763, 57019 and 57116. These PRs constitute problems associated with the last F95 feature that gfortran does not completely implement. I want to sound out if this is acceptable as the way to fix these problems before going to the trouble of doing the final clean up; especially of trans.c (gfc_build_array_ref) and trans-array.c(build_array_ref). The problem concerns pointers to derived type array components. eg: pointer_array(:) => derived_array (:)%component At present gfortran uses a rather crude fix, where a 'span' variable with value of sizeof(element of derived_array) is used for pointer arithmetic to access elements of the array; &pointer_array(i) = &derived_array(1)%component + span*(i-1) The difficulty of using a variable 'span' is that it is not passed to procedures and it is not available to array pointer components. This patch fixes this by the introduction of a span field in the array descriptor. Note that this is only used for intrinsic type, pointer arrays in this version of the patch. A considerable simplification would arise from using the span field in class arrays too. This might well be one result of the clean up mentioned above. Tobias Burnus and I have been putting off fixing these PRs for a long time because of the pending array descriptor reform. However, work on fortran-dev has once again stopped and neither I nor, I think, anybody else has the time to restart this work anytime soon. pointer[1,2].f90 in the libgomp testsuite fail if this modification to array referencing is exposed to them. For the time being, trans-array.c(is_pointer_array) has: + if (flag_openmp) + return false; to switch off the modification. I will come back to this during the clean up, with the hope of putting it right. Bootstraps and regtests on FC23/x86_64 - OK to proceed to completion and submission? Paul 2017-06-24 Paul Thomas PR fortran/34640 PR fortran/40737 PR fortran/55763 PR fortran/57019 PR fortran/57116 * trans-array.c: Add SPAN_FIELD and update indices for subsequent fields. (gfc_conv_descriptor_span, gfc_conv_descriptor_span_get, gfc_conv_descriptor_span_set, is_pointer_array, get_array_span): New functions. (gfc_conv_scalarized_array_ref): If the expression is a subref array, make sure that info->descriptor is a descriptor type. Otherwise, if info->descriptor is a pointer array, set 'decl' and fix it if it is a component reference. (gfc_conv_array_ref): Similarly set 'decl'. (gfc_array_allocate): Set the span field if this is a pointer array. (gfc_conv_expr_descriptor): Set the span field for pointer assignments. * trans-array.h: Prototypes for gfc_conv_descriptor_span_get and gfc_conv_descriptor_span_set added. * trans.c (gfc_build_array_ref): GFC_DECL_SUBREF_ARRAY_P change to GFC_DECL_PTR_ARRAY_P and defreference if a PARM_DECL. trans-decl.c (gfc_get_symbol_decl): If a non-class pointer array, mark the declaration as a GFC_DECL_PTR_ARRAY_P. Remove the setting of GFC_DECL_SPAN. (gfc_trans_deferred_vars): Set the span field to zero in the originating scope. * trans-expr.c (gfc_trans_pointer_assignment): Remove code for setting of GFC_DECL_SPAN. Set the 'span' field for non-class pointers to class function results. Likewise for rank remap. * trans.h : Rename DECL_LANG_FLAG_6, GFC_DECL_SUBREF_ARRAY_P, as GFC_DECL_PTR_ARRAY_P. * trans-intrinsic.c (conv_expr_ref_to_caf_ref): Pick up the 'token' offset from the field decl in the descriptor. (conv_isocbinding_subroutine): Set the 'span' field. * trans-io.c (gfc_trans_transfer): Always scalarize pointer array io. * trans-stmt.c (trans_associate_var): Set the 'span' field. * trans-types.c (gfc_get_array_descriptor_base): Add the 'span' field to the array descriptor. (gfc_get_derived_type): Pointer array components are marked as GFC_DECL_PTR_ARRAY_P. (gfc_get_array_descr_info): Jump one more in the DECL_CHAIN to access the offset field. 2017-06-24 Paul Thomas PR fortran/34640 * gfortran.dg/assumed_type_2.f90: Adjust some of the tree dump checks. * gfortran.dg/no_arg_check_2.f90: Likewise. * gfortran.dg/pointer_array_1.f90: New test. * gfortran.dg/pointer_array_2.f90: New test. * gfortran.dg/pointer_array_component_1.f90: New test. * gfortran.dg/pointer_array_component_2.f90: New test. * gfortran.dg/goacc/kernels-alias-4.f95: Bump up both tree scan counts by 1. PR fortran/40737 * gfortran.dg/pointer_array_3.f90: New test. PR fortran/57116 * gfortran.dg/pointer_array_4.f90: New test. PR fortran/55763 * gfortran.dg/pointer_array_5.f90: New test. PR fortran/57019 * gfortran.dg/pointer_array_6.f90: New test. 2017-06-24 Paul Thomas PR fortran/34640 * libgfortran/libgfortran.h: Add span field to descriptor. -- "If you can't explain it simply, you don't understand it well enough" - Albert Einstein --f403045c67c649fe5c0552b2742e Content-Type: text/plain; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j4b5wdyq0 Content-length: 66714 SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWFycmF5LmMKPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwkocmV2 aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuYwko d29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX2FycmF5X2RhdGFw dHJfdHlwZSAodHJlZSBkZXNjKQoqKiogMTI1LDEzMiAqKioqCiAgI2RlZmlu ZSBEQVRBX0ZJRUxEIDAKICAjZGVmaW5lIE9GRlNFVF9GSUVMRCAxCiAgI2Rl ZmluZSBEVFlQRV9GSUVMRCAyCiEgI2RlZmluZSBESU1FTlNJT05fRklFTEQg MwohICNkZWZpbmUgQ0FGX1RPS0VOX0ZJRUxEIDQKCiAgI2RlZmluZSBTVFJJ REVfU1VCRklFTEQgMAogICNkZWZpbmUgTEJPVU5EX1NVQkZJRUxEIDEKLS0t IDEyNSwxMzMgLS0tLQogICNkZWZpbmUgREFUQV9GSUVMRCAwCiAgI2RlZmlu ZSBPRkZTRVRfRklFTEQgMQogICNkZWZpbmUgRFRZUEVfRklFTEQgMgohICNk ZWZpbmUgU1BBTl9GSUVMRCAzCiEgI2RlZmluZSBESU1FTlNJT05fRklFTEQg NAohICNkZWZpbmUgQ0FGX1RPS0VOX0ZJRUxEIDUKCiAgI2RlZmluZSBTVFJJ REVfU1VCRklFTEQgMAogICNkZWZpbmUgTEJPVU5EX1NVQkZJRUxEIDEKKioq KioqKioqKioqKioqIGdmY19jb252X2Rlc2NyaXB0b3JfZHR5cGUgKHRyZWUg ZGVzYykKKioqIDI0NCwyNDkgKioqKgotLS0gMjQ1LDI4MCAtLS0tCiAgCQkJ ICBkZXNjLCBmaWVsZCwgTlVMTF9UUkVFKTsKICB9CgorIHN0YXRpYyB0cmVl CisgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuICh0cmVlIGRlc2MpCisgewor ICAgdHJlZSB0eXBlOworICAgdHJlZSBmaWVsZDsKKworICAgdHlwZSA9IFRS RUVfVFlQRSAoZGVzYyk7CisgICBnY2NfYXNzZXJ0IChHRkNfREVTQ1JJUFRP Ul9UWVBFX1AgKHR5cGUpKTsKKworICAgZmllbGQgPSBnZmNfYWR2YW5jZV9j aGFpbiAoVFlQRV9GSUVMRFMgKHR5cGUpLCBTUEFOX0ZJRUxEKTsKKyAgIGdj Y19hc3NlcnQgKGZpZWxkICE9IE5VTExfVFJFRSAmJiBUUkVFX1RZUEUgKGZp ZWxkKSA9PSBnZmNfYXJyYXlfaW5kZXhfdHlwZSk7CisKKyAgIHJldHVybiBm b2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT01QT05FTlRfUkVG LCBUUkVFX1RZUEUgKGZpZWxkKSwKKyAJCQkgIGRlc2MsIGZpZWxkLCBOVUxM X1RSRUUpOworIH0KKworIHRyZWUKKyBnZmNfY29udl9kZXNjcmlwdG9yX3Nw YW5fZ2V0ICh0cmVlIGRlc2MpCisgeworICAgcmV0dXJuIGdmY19jb252X2Rl c2NyaXB0b3Jfc3BhbiAoZGVzYyk7CisgfQorCisgdm9pZAorIGdmY19jb252 X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKHN0bXRibG9ja190ICpibG9jaywgdHJl ZSBkZXNjLAorIAkJCQl0cmVlIHZhbHVlKQorIHsKKyAgIHRyZWUgdCA9IGdm Y19jb252X2Rlc2NyaXB0b3Jfc3BhbiAoZGVzYyk7CisgICBnZmNfYWRkX21v ZGlmeSAoYmxvY2ssIHQsIGZvbGRfY29udmVydCAoVFJFRV9UWVBFICh0KSwg dmFsdWUpKTsKKyB9CisKCiAgdHJlZQogIGdmY19jb252X2Rlc2NyaXB0b3Jf cmFuayAodHJlZSBkZXNjKQoqKioqKioqKioqKioqKiogZ2ZjX2NvbnZfc2hp ZnRfZGVzY3JpcHRvcl9sYm91bmQgKHN0bXRibAoqKiogNDcxLDQ3NiAqKioq Ci0tLSA1MDIsNTA4IC0tLS0KICAjdW5kZWYgREFUQV9GSUVMRAogICN1bmRl ZiBPRkZTRVRfRklFTEQKICAjdW5kZWYgRFRZUEVfRklFTEQKKyAjdW5kZWYg U1BBTl9GSUVMRAogICN1bmRlZiBESU1FTlNJT05fRklFTEQKICAjdW5kZWYg Q0FGX1RPS0VOX0ZJRUxECiAgI3VuZGVmIFNUUklERV9TVUJGSUVMRAoqKioq KioqKioqKioqKiogZ2ZjX2FkZF9zc190b19sb29wIChnZmNfbG9vcGluZm8g KiBsb29wLAoqKiogNzIwLDcyNSAqKioqCi0tLSA3NTIsODMxIC0tLS0KICB9 CgoKKyAvKiBSZXR1cm5zIHRydWUgaWYgdGhlIGV4cHJlc3Npb24gaXMgYW4g YXJyYXkgcG9pbnRlci4gICovCisKKyBzdGF0aWMgYm9vbAorIGlzX3BvaW50 ZXJfYXJyYXkgKHRyZWUgZXhwcikKKyB7CisgICBpZiAoZmxhZ19vcGVubXAp CisgICAgIHJldHVybiBmYWxzZTsKKworICAgaWYgKGV4cHIgPT0gTlVMTF9U UkVFCisgICAgICAgfHwgIUdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9U WVBFIChleHByKSkKKyAgICAgICB8fCBHRkNfQ0xBU1NfVFlQRV9QIChUUkVF X1RZUEUgKGV4cHIpKSkKKyAgICAgcmV0dXJuIGZhbHNlOworCisgICBpZiAo VFJFRV9DT0RFIChleHByKSA9PSBWQVJfREVDTAorICAgICAgICYmIEdGQ19E RUNMX1BUUl9BUlJBWV9QIChleHByKSkKKyAgICAgcmV0dXJuIHRydWU7CisK KyAgIGlmIChUUkVFX0NPREUgKGV4cHIpID09IFBBUk1fREVDTAorICAgICAg ICYmIEdGQ19ERUNMX1BUUl9BUlJBWV9QIChleHByKSkKKyAgICAgcmV0dXJu IHRydWU7CisKKyAgIC8qIFRoZSBmaWVsZCBkZWNsYXJhdGlvbiBpcyBtYXJr ZWQgYXMgYW4gcG9pbnRlciBhcnJheS4gICovCisgICBpZiAoVFJFRV9DT0RF IChleHByKSA9PSBDT01QT05FTlRfUkVGCisgICAgICAgJiYgR0ZDX0RFQ0xf UFRSX0FSUkFZX1AgKFRSRUVfT1BFUkFORCAoZXhwciwgMSkpCisgICAgICAg JiYgIUdGQ19DTEFTU19UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5E IChleHByLCAxKSkpKQorICAgICByZXR1cm4gdHJ1ZTsKKworICAgcmV0dXJu IGZhbHNlOworIH0KKworCisgLyogUmV0dXJuIHRoZSBzcGFuIG9mIGFuIGFy cmF5LiAgKi8KKworIHN0YXRpYyB0cmVlCisgZ2V0X2FycmF5X3NwYW4gKHRy ZWUgZGVzYywgZ2ZjX2V4cHIgKmV4cHIpCisgeworICAgdHJlZSB0bXA7CisK KyAgIGlmIChpc19wb2ludGVyX2FycmF5IChkZXNjKSkKKyAgICAgLyogVGhp cyB3aWxsIGhhdmUgdGhlIHNwYW4gZmllbGQgc2V0LiAgKi8KKyAgICAgdG1w ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX2dldCAoZGVzYyk7CisgICBl bHNlIGlmIChUUkVFX0NPREUgKGRlc2MpID09IENPTVBPTkVOVF9SRUYKKyAJ ICAgJiYgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGRlc2Mp KQorIAkgICAmJiBHRkNfQ0xBU1NfVFlQRV9QIChUUkVFX1RZUEUgKFRSRUVf T1BFUkFORCAoZGVzYywgMCkpKSkKKyAgICAgeworICAgICAgIC8qIFRoZSBk ZXNjcmlwdG9yIGlzIGEgY2xhc3MgX2RhdGEgZmllbGQgYW5kIHNvIHVzZSB0 aGUgdnRhYmxlCisgCSBzaXplIGZvciB0aGUgcmVjZWl2aW5nIHNwYW4gZmll bGQuICAqLworICAgICAgIHRtcCA9IGdmY19nZXRfdnB0cl9mcm9tX2V4cHIg KGRlc2MpOworICAgICAgIHRtcCA9IGdmY192cHRyX3NpemVfZ2V0ICh0bXAp OworICAgICB9CisgICBlbHNlIGlmIChleHByICYmIGV4cHItPmV4cHJfdHlw ZSA9PSBFWFBSX1ZBUklBQkxFCisgCSAgICYmIGV4cHItPnN5bXRyZWUtPm4u c3ltLT50cy50eXBlID09IEJUX0NMQVNTCisgCSAgICYmIGV4cHItPnJlZi0+ dHlwZSA9PSBSRUZfQ09NUE9ORU5UCisgCSAgICYmIGV4cHItPnJlZi0+bmV4 dC0+dHlwZSA9PSBSRUZfQVJSQVkKKyAJICAgJiYgZXhwci0+cmVmLT5uZXh0 LT5uZXh0ID09IE5VTEwKKyAJICAgJiYgQ0xBU1NfREFUQSAoZXhwci0+c3lt dHJlZS0+bi5zeW0pLT5hdHRyLmRpbWVuc2lvbikKKyAgICAgeworICAgICAg IC8qIER1bW15cyBjb21lIGluIHNvbWV0aW1lcyB3aXRoIHRoZSBkZXNjcmlw dG9yIGRldGFjaGVkIGZyb20KKyAJIHRoZSBjbGFzcyBmaWVsZCBvciBkZWNs YXJhdGlvbi4gICovCisgICAgICAgdG1wID0gZ2ZjX2NsYXNzX3ZwdHJfZ2V0 IChleHByLT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsKTsKKyAgICAg ICB0bXAgPSBnZmNfdnB0cl9zaXplX2dldCAodG1wKTsKKyAgICAgfQorICAg ZWxzZQorICAgICB7CisgICAgICAgLyogSWYgbm9uZSBvZiB0aGUgZmFuY3kg c3R1ZmYgd29ya3MsIHRoZSBzcGFuIGlzIHRoZSBlbGVtZW50CisgCSBzaXpl IG9mIHRoZSBhcnJheS4gICovCisgICAgICAgdG1wID0gZ2ZjX2dldF9lbGVt ZW50X3R5cGUgKFRSRUVfVFlQRSAoZGVzYykpOworICAgICAgIHRtcCA9IGZv bGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisgCQkJICBzaXpl X2luX2J5dGVzICh0bXApKTsKKyAgICAgfQorICAgcmV0dXJuIHRtcDsKKyB9 CisKKwogIC8qIEdlbmVyYXRlIGFuIGluaXRpYWxpemVyIGZvciBhIHN0YXRp YyBwb2ludGVyIG9yIGFsbG9jYXRhYmxlIGFycmF5LiAgKi8KCiAgdm9pZAoq KioqKioqKioqKioqKiogZ2ZjX2NvbnZfc2NhbGFyaXplZF9hcnJheV9yZWYg KGdmY19zZSAqCioqKiAzMjM5LDMyNDkgKioqKgogICAgICBpbmRleCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIFBMVVNfRVhQUiwgZ2Zj X2FycmF5X2luZGV4X3R5cGUsCiAgCQkJICAgICBpbmRleCwgaW5mby0+b2Zm c2V0KTsKCiEgICBpZiAoZXhwciAmJiAoaXNfc3VicmVmX2FycmF5IChleHBy KQogIAkgICAgICAgfHwgKGV4cHItPnRzLmRlZmVycmVkICYmIChleHByLT5l eHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRQogIAkJCQkJIHx8IGV4cHItPmV4 cHJfdHlwZSA9PSBFWFBSX0ZVTkNUSU9OKSkpKQogICAgICBkZWNsID0gZXhw ci0+c3ltdHJlZS0+bi5zeW0tPmJhY2tlbmRfZGVjbDsKCiAgICB0bXAgPSBi dWlsZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBp bmZvLT5kYXRhKTsKCiAgICAvKiBVc2UgdGhlIHZwdHIgJ3NpemUnIGZpZWxk IHRvIGFjY2VzcyBhIGNsYXNzIHRoZSBlbGVtZW50IG9mIGEgY2xhc3MKLS0t IDMzNDUsMzM3MSAtLS0tCiAgICAgIGluZGV4ID0gZm9sZF9idWlsZDJfbG9j IChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLCBnZmNfYXJyYXlfaW5kZXhf dHlwZSwKICAJCQkgICAgIGluZGV4LCBpbmZvLT5vZmZzZXQpOwoKISAgIGlm IChleHByICYmICgoaXNfc3VicmVmX2FycmF5IChleHByKQohIAkJJiYgR0ZD X0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKGluZm8tPmRlc2NyaXB0 b3IpKSkKICAJICAgICAgIHx8IChleHByLT50cy5kZWZlcnJlZCAmJiAoZXhw ci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUKICAJCQkJCSB8fCBleHBy LT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTikpKSkKICAgICAgZGVjbCA9 IGV4cHItPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2RlY2w7CgorICAgLyog QSBwb2ludGVyIGFycmF5IGNvbXBvbmVudCBjYW4gYmUgZGV0ZWN0ZWQgZnJv bSBpdHMgZmllbGQgZGVjbC4gRml4CisgICAgICB0aGUgZGVzY3JpcHRvciwg bWFyayB0aGUgcmVzdWx0aW5nIHZhcmlhYmxlIGRlY2wgYW5kIHBhc3MgaXQg dG8KKyAgICAgIGdmY19idWlsZF9hcnJheV9yZWYuICAqLworICAgaWYgKGlz X3BvaW50ZXJfYXJyYXkgKGluZm8tPmRlc2NyaXB0b3IpKQorICAgICB7Cisg ICAgICAgaWYgKFRSRUVfQ09ERSAoaW5mby0+ZGVzY3JpcHRvcikgPT0gQ09N UE9ORU5UX1JFRikKKyAJeworIAkgIGRlY2wgPSBnZmNfZXZhbHVhdGVfbm93 IChpbmZvLT5kZXNjcmlwdG9yLCAmc2UtPnByZSk7CisgCSAgR0ZDX0RFQ0xf UFRSX0FSUkFZX1AgKGRlY2wpID0gMTsKKyAJICBUUkVFX1VTRUQgKGRlY2wp ID0gMTsKKyAJfQorICAgICAgIGlmIChkZWNsID09IE5VTExfVFJFRSkKKyAJ ZGVjbCA9IGluZm8tPmRlc2NyaXB0b3I7CisgICAgIH0KKwogICAgdG1wID0g YnVpbGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwg aW5mby0+ZGF0YSk7CgogICAgLyogVXNlIHRoZSB2cHRyICdzaXplJyBmaWVs ZCB0byBhY2Nlc3MgYSBjbGFzcyB0aGUgZWxlbWVudCBvZiBhIGNsYXNzCioq KioqKioqKioqKioqKiBnZmNfY29udl9hcnJheV9yZWYgKGdmY19zZSAqIHNl LCBnZmNfYXJyCioqKiAzMzUwLDMzNTUgKioqKgotLS0gMzQ3MiwzNDc4IC0t LS0KICAgIHRyZWUgb2Zmc2V0LCBjc3Rfb2Zmc2V0OwogICAgdHJlZSB0bXA7 CiAgICB0cmVlIHN0cmlkZTsKKyAgIHRyZWUgZGVjbCA9IE5VTExfVFJFRTsK ICAgIGdmY19zZSBpbmRleHNlOwogICAgZ2ZjX3NlIHRtcHNlOwogICAgZ2Zj X3N5bWJvbCAqIHN5bSA9IGV4cHItPnN5bXRyZWUtPm4uc3ltOwoqKioqKioq KioqKioqKiogZ2ZjX2NvbnZfYXJyYXlfcmVmIChnZmNfc2UgKiBzZSwgZ2Zj X2FycgoqKiogMzQ5NCwzNTAxICoqKioKICAgICAgb2Zmc2V0ID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLAogIAkJCSAg ICAgIGdmY19hcnJheV9pbmRleF90eXBlLCBvZmZzZXQsIGNzdF9vZmZzZXQp OwoKISAgIHNlLT5leHByID0gYnVpbGRfYXJyYXlfcmVmIChzZS0+ZXhwciwg b2Zmc2V0LCBzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MgPwohIAkJCQlOVUxM X1RSRUUgOiBzeW0tPmJhY2tlbmRfZGVjbCwgc2UtPmNsYXNzX3ZwdHIpOwog IH0KCgotLS0gMzYxNywzNjQzIC0tLS0KICAgICAgb2Zmc2V0ID0gZm9sZF9i dWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgUExVU19FWFBSLAogIAkJCSAg ICAgIGdmY19hcnJheV9pbmRleF90eXBlLCBvZmZzZXQsIGNzdF9vZmZzZXQp OwoKISAgIC8qIEEgcG9pbnRlciBhcnJheSBjb21wb25lbnQgY2FuIGJlIGRl dGVjdGVkIGZyb20gaXRzIGZpZWxkIGRlY2wuIEZpeAohICAgICAgdGhlIGRl c2NyaXB0b3IsIG1hcmsgdGhlIHJlc3VsdGluZyB2YXJpYWJsZSBkZWNsIGFu ZCBwYXNzIGl0IHRvCiEgICAgICBidWlsZF9hcnJheV9yZWYuICAqLwohICAg aWYgKCFleHByLT50cy5kZWZlcnJlZCAmJiAhc3ltLT5hdHRyLmNvZGltZW5z aW9uICYmIGlzX3BvaW50ZXJfYXJyYXkgKHNlLT5leHByKSkKISAgICAgewoh ICAgICAgIGlmIChUUkVFX0NPREUgKHNlLT5leHByKSA9PSBDT01QT05FTlRf UkVGKQohIAl7CiEgCSAgZGVjbCA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLT5l eHByLCAmc2UtPnByZSk7CiEgCSAgR0ZDX0RFQ0xfUFRSX0FSUkFZX1AgKGRl Y2wpID0gMTsKISAJICBUUkVFX1VTRUQgKGRlY2wpID0gMTsKISAJfQohICAg ICAgIGVsc2UKISAJZGVjbCA9IHNlLT5leHByOwohICAgICB9CiEgICBlbHNl IGlmIChleHByLT50cy5kZWZlcnJlZAohIAkgICB8fCAoc3ltLT50cy50eXBl ID09IEJUX0NIQVJBQ1RFUiAmJiBzeW0tPmF0dHIuc2VsZWN0X3R5cGVfdGVt cG9yYXJ5KSkKISAgICAgZGVjbCA9IHN5bS0+YmFja2VuZF9kZWNsOwohICAg ZWxzZSBpZiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTKQohICAgICBkZWNs ID0gTlVMTF9UUkVFOwohCiEgICBzZS0+ZXhwciA9IGJ1aWxkX2FycmF5X3Jl ZiAoc2UtPmV4cHIsIG9mZnNldCwgZGVjbCwgc2UtPmNsYXNzX3ZwdHIpOwog IH0KCgoqKioqKioqKioqKioqKiogZ2ZjX2FycmF5X2FsbG9jYXRlIChnZmNf c2UgKiBzZSwgZ2ZjX2V4cAoqKiogNTY0OCw1NjUzICoqKioKLS0tIDU3OTAs NTgwMyAtLS0tCiAgICBpZiAoZGltZW5zaW9uKQogICAgICBnZmNfY29udl9k ZXNjcmlwdG9yX29mZnNldF9zZXQgKCZzZXRfZGVzY3JpcHRvcl9ibG9jaywg c2UtPmV4cHIsIG9mZnNldCk7CgorICAgLyogUG9pbnRlciBhcnJheXMgbmVl ZCB0aGUgc3BhbiBmaWVsZCB0byBiZSBzZXQuICAqLworICAgaWYgKGlzX3Bv aW50ZXJfYXJyYXkgKHNlLT5leHByKSkKKyAgICAgeworICAgICAgIHRtcCA9 IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAoVFJFRV9U WVBFIChzZS0+ZXhwcikpKTsKKyAgICAgICB0bXAgPSBmb2xkX2NvbnZlcnQg KGdmY19hcnJheV9pbmRleF90eXBlLCB0bXApOworICAgICAgIGdmY19jb252 X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZzZXRfZGVzY3JpcHRvcl9ibG9jaywg c2UtPmV4cHIsIHRtcCk7CisgICAgIH0KKwogICAgc2V0X2Rlc2NyaXB0b3Ig PSBnZmNfZmluaXNoX2Jsb2NrICgmc2V0X2Rlc2NyaXB0b3JfYmxvY2spOwog ICAgaWYgKHN0YXR1cyAhPSBOVUxMX1RSRUUpCiAgICAgIHsKKioqKioqKioq KioqKioqIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoZ2ZjX3NlICpzZSwg Z2YKKioqIDY4NTEsNjg1NiAqKioqCi0tLSA3MDAxLDcwMTAgLS0tLQogIAkg ICAgICAvKiBBZGQgYW55IG9mZnNldHMgZnJvbSBzdWJyZWZlcmVuY2VzLiAg Ki8KICAJICAgICAgZ2ZjX2dldF9kYXRhcHRyX29mZnNldCAoJnNlLT5wcmUs IHNlLT5leHByLCBkZXNjLCBOVUxMX1RSRUUsCiAgCQkJCSAgICAgIHN1YnJl Zl9hcnJheV90YXJnZXQsIGV4cHIpOworCisgCSAgICAgIC8qIC4uLi5hbmQg c2V0IHRoZSBzcGFuIGZpZWxkLiAgKi8KKyAJICAgICAgdG1wID0gZ2V0X2Fy cmF5X3NwYW4gKGRlc2MsIGV4cHIpOworIAkgICAgICBnZmNfY29udl9kZXNj cmlwdG9yX3NwYW5fc2V0ICgmc2UtPnByZSwgc2UtPmV4cHIsIHRtcCk7CiAg CSAgICB9CiAgCSAgZWxzZSBpZiAoc2UtPndhbnRfcG9pbnRlcikKICAJICAg IHsKKioqKioqKioqKioqKioqIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAo Z2ZjX3NlICpzZSwgZ2YKKioqIDY4ODYsNjg5MyAqKioqCi0tLSA3MDQwLDcw NTggLS0tLQogIAkgICAgc2UtPnNzID0gc3M7CiAgCSAgZWxzZQogIAkgICAg Z2NjX2Fzc2VydCAoc2UtPnNzID09IHNzKTsKKworIAkgIGlmICghaXNfcG9p bnRlcl9hcnJheSAoc2UtPmV4cHIpKQorIAkgICAgeworIAkgICAgICB0bXAg PSBnZmNfZ2V0X2VsZW1lbnRfdHlwZSAoVFJFRV9UWVBFIChzZS0+ZXhwcikp OworIAkgICAgICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRl eF90eXBlLAorIAkJCQkgIHNpemVfaW5fYnl0ZXMgKHRtcCkpOworIAkgICAg ICBnZmNfY29udl9kZXNjcmlwdG9yX3NwYW5fc2V0ICgmc2UtPnByZSwgc2Ut PmV4cHIsIHRtcCk7CisgCSAgICB9CisKICAJICBzZS0+ZXhwciA9IGdmY19i dWlsZF9hZGRyX2V4cHIgKE5VTExfVFJFRSwgc2UtPmV4cHIpOwogIAkgIGdm Y19jb252X2V4cHIgKHNlLCBleHByKTsKKworCiAgCSAgZ2ZjX2ZyZWVfc3Nf Y2hhaW4gKHNzKTsKICAJICByZXR1cm47CiAgCX0KKioqKioqKioqKioqKioq IGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoZ2ZjX3NlICpzZSwgZ2YKKioq IDcxMDcsNzExNSAqKioqCiAgICAgICAgZGVzYyA9IGluZm8tPmRlc2NyaXB0 b3I7CiAgICAgICAgaWYgKHNlLT5kaXJlY3RfYnlyZWYgJiYgIXNlLT5ieXJl Zl9ub2Fzc2lnbikKICAJewohIAkgIC8qIEZvciBwb2ludGVyIGFzc2lnbm1l bnRzIHdlIGZpbGwgaW4gdGhlIGRlc3RpbmF0aW9uLiAgKi8KICAJICBwYXJt ID0gc2UtPmV4cHI7CiAgCSAgcGFybXR5cGUgPSBUUkVFX1RZUEUgKHBhcm0p OwogIAl9CiAgICAgICAgZWxzZQogIAl7Ci0tLSA3MjcyLDcyODQgLS0tLQog ICAgICAgIGRlc2MgPSBpbmZvLT5kZXNjcmlwdG9yOwogICAgICAgIGlmIChz ZS0+ZGlyZWN0X2J5cmVmICYmICFzZS0+YnlyZWZfbm9hc3NpZ24pCiAgCXsK ISAJICAvKiBGb3IgcG9pbnRlciBhc3NpZ25tZW50cyB3ZSBmaWxsIGluIHRo ZSBkZXN0aW5hdGlvbi4uLi4gICovCiAgCSAgcGFybSA9IHNlLT5leHByOwog IAkgIHBhcm10eXBlID0gVFJFRV9UWVBFIChwYXJtKTsKKworIAkgIC8qIC4u Li5hbmQgc2V0IHRoZSBzcGFuIGZpZWxkLiAgKi8KKyAJICB0bXAgPSBnZXRf YXJyYXlfc3BhbiAoZGVzYywgZXhwcik7CisgCSAgZ2ZjX2NvbnZfZGVzY3Jp cHRvcl9zcGFuX3NldCAoJmxvb3AucHJlLCBwYXJtLCB0bXApOwogIAl9CiAg ICAgICAgZWxzZQogIAl7CkluZGV4OiBnY2MvZm9ydHJhbi90cmFucy1hcnJh eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3Ry YW5zLWFycmF5LmgJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0cmFu L3RyYW5zLWFycmF5LmgJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioq IHZvaWQgZ2ZjX3RyYW5zX2FycmF5X2NvYm91bmRzICh0cmVlLCBzdG0KKioq IDE1NSwxNjAgKioqKgotLS0gMTU1LDE2MSAtLS0tCiAgdHJlZSBnZmNfY29u dl9kZXNjcmlwdG9yX2RhdGFfZ2V0ICh0cmVlKTsKICB0cmVlIGdmY19jb252 X2Rlc2NyaXB0b3JfZGF0YV9hZGRyICh0cmVlKTsKICB0cmVlIGdmY19jb252 X2Rlc2NyaXB0b3Jfb2Zmc2V0X2dldCAodHJlZSk7CisgdHJlZSBnZmNfY29u dl9kZXNjcmlwdG9yX3NwYW5fZ2V0ICh0cmVlKTsKICB0cmVlIGdmY19jb252 X2Rlc2NyaXB0b3JfZHR5cGUgKHRyZWUpOwogIHRyZWUgZ2ZjX2NvbnZfZGVz Y3JpcHRvcl9yYW5rICh0cmVlKTsKICB0cmVlIGdmY19nZXRfZGVzY3JpcHRv cl9kaW1lbnNpb24gKHRyZWUpOwoqKioqKioqKioqKioqKiogdHJlZSBnZmNf Y29udl9kZXNjcmlwdG9yX3Rva2VuICh0cmVlKTsKKioqIDE2NSwxNzAgKioq KgotLS0gMTY2LDE3MiAtLS0tCgogIHZvaWQgZ2ZjX2NvbnZfZGVzY3JpcHRv cl9kYXRhX3NldCAoc3RtdGJsb2NrX3QgKiwgdHJlZSwgdHJlZSk7CiAgdm9p ZCBnZmNfY29udl9kZXNjcmlwdG9yX29mZnNldF9zZXQgKHN0bXRibG9ja190 ICosIHRyZWUsIHRyZWUpOworIHZvaWQgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9z cGFuX3NldCAoc3RtdGJsb2NrX3QgKiwgdHJlZSwgdHJlZSk7CiAgdm9pZCBn ZmNfY29udl9kZXNjcmlwdG9yX3N0cmlkZV9zZXQgKHN0bXRibG9ja190ICos IHRyZWUsIHRyZWUsIHRyZWUpOwogIHZvaWQgZ2ZjX2NvbnZfZGVzY3JpcHRv cl9sYm91bmRfc2V0IChzdG10YmxvY2tfdCAqLCB0cmVlLCB0cmVlLCB0cmVl KTsKICB2b2lkIGdmY19jb252X2Rlc2NyaXB0b3JfdWJvdW5kX3NldCAoc3Rt dGJsb2NrX3QgKiwgdHJlZSwgdHJlZSwgdHJlZSk7CkluZGV4OiBnY2MvZm9y dHJhbi90cmFucy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9m b3J0cmFuL3RyYW5zLmMJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0 cmFuL3RyYW5zLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGdm Y19idWlsZF9hcnJheV9yZWYgKHRyZWUgYmFzZSwgdHJlZSBvZmYKKioqIDM1 OCwzNjUgKioqKgogICAgaWYgKChkZWNsICYmIChUUkVFX0NPREUgKGRlY2wp ID09IEZJRUxEX0RFQ0wKICAJCXx8IFZBUl9PUl9GVU5DVElPTl9ERUNMX1Ag KGRlY2wpCiAgCQl8fCBUUkVFX0NPREUgKGRlY2wpID09IFBBUk1fREVDTCkK ISAgICAgICAgJiYgKChHRkNfREVDTF9TVUJSRUZfQVJSQVlfUCAoZGVjbCkK ISAJICAgICYmICFpbnRlZ2VyX3plcm9wIChHRkNfREVDTF9TUEFOIChkZWNs KSkpCiAgCSAgIHx8IEdGQ19ERUNMX0NMQVNTIChkZWNsKQogIAkgICB8fCBz cGFuICE9IE5VTExfVFJFRSkpCiAgICAgICAgfHwgdnB0ciAhPSBOVUxMX1RS RUUpCi0tLSAzNTgsMzY0IC0tLS0KICAgIGlmICgoZGVjbCAmJiAoVFJFRV9D T0RFIChkZWNsKSA9PSBGSUVMRF9ERUNMCiAgCQl8fCBWQVJfT1JfRlVOQ1RJ T05fREVDTF9QIChkZWNsKQogIAkJfHwgVFJFRV9DT0RFIChkZWNsKSA9PSBQ QVJNX0RFQ0wpCiEgICAgICAgICYmICgoR0ZDX0RFQ0xfUFRSX0FSUkFZX1Ag KGRlY2wpKQogIAkgICB8fCBHRkNfREVDTF9DTEFTUyAoZGVjbCkKICAJICAg fHwgc3BhbiAhPSBOVUxMX1RSRUUpKQogICAgICAgIHx8IHZwdHIgIT0gTlVM TF9UUkVFKQoqKioqKioqKioqKioqKiogZ2ZjX2J1aWxkX2FycmF5X3JlZiAo dHJlZSBiYXNlLCB0cmVlIG9mZgoqKiogMzkwLDM5NyAqKioqCgogIAkgICAg ICBzcGFuID0gZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKGRlY2wpOwogIAkg ICAgfQohIAkgIGVsc2UgaWYgKEdGQ19ERUNMX1NVQlJFRl9BUlJBWV9QIChk ZWNsKSkKISAJICAgIHNwYW4gPSBHRkNfREVDTF9TUEFOIChkZWNsKTsKICAJ ICBlbHNlIGlmIChzcGFuKQogIAkgICAgc3BhbiA9IGZvbGRfY29udmVydCAo Z2ZjX2FycmF5X2luZGV4X3R5cGUsIHNwYW4pOwogIAkgIGVsc2UKLS0tIDM4 OSw0MDAgLS0tLQoKICAJICAgICAgc3BhbiA9IGdmY19jbGFzc192dGFiX3Np emVfZ2V0IChkZWNsKTsKICAJICAgIH0KISAJICBlbHNlIGlmIChHRkNfREVD TF9QVFJfQVJSQVlfUCAoZGVjbCkpCiEgCSAgICB7CiEgCSAgICAgIGlmIChU UkVFX0NPREUgKGRlY2wpID09IFBBUk1fREVDTCkKISAJCWRlY2wgPSBidWls ZF9mb2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLCBkZWNs KTsKISAJICAgICAgc3BhbiA9IGdmY19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9n ZXQgKGRlY2wpOwohIAkgICAgfQogIAkgIGVsc2UgaWYgKHNwYW4pCiAgCSAg ICBzcGFuID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwg c3Bhbik7CiAgCSAgZWxzZQpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtZGVj bC5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0cmFuL3Ry YW5zLWRlY2wuYwkocmV2aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRyYW4v dHJhbnMtZGVjbC5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBn ZmNfZ2V0X3N5bWJvbF9kZWNsIChnZmNfc3ltYm9sICogc3ltKQoqKiogMTUx NywxNTIyICoqKioKLS0tIDE1MTcsMTUyNSAtLS0tCiAgICAgICAgLyogRHVt bXkgdmFyaWFibGVzIHNob3VsZCBhbHJlYWR5IGhhdmUgYmVlbiBjcmVhdGVk LiAgKi8KICAgICAgICBnY2NfYXNzZXJ0IChzeW0tPmJhY2tlbmRfZGVjbCk7 CgorICAgICAgIGlmIChzeW0tPmF0dHIucG9pbnRlciAmJiBzeW0tPmF0dHIu ZGltZW5zaW9uICYmIHN5bS0+dHMudHlwZSAhPSBCVF9DTEFTUykKKyAJR0ZD X0RFQ0xfUFRSX0FSUkFZX1AgKHN5bS0+YmFja2VuZF9kZWNsKSA9IDE7CisK ICAgICAgICAvKiBDcmVhdGUgYSBjaGFyYWN0ZXIgbGVuZ3RoIHZhcmlhYmxl LiAgKi8KICAgICAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NIQVJBQ1RF UikKICAJewoqKioqKioqKioqKioqKiogZ2ZjX2dldF9zeW1ib2xfZGVjbCAo Z2ZjX3N5bWJvbCAqIHN5bSkKKioqIDE3NTEsMTc3NyAqKioqCiAgICBpZiAo c3ltLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUikKICAgICAgLyogQ2hhcmFj dGVyIHZhcmlhYmxlcyBuZWVkIHNwZWNpYWwgaGFuZGxpbmcuICAqLwogICAg ICBnZmNfYWxsb2NhdGVfbGFuZ19kZWNsIChkZWNsKTsKLSAgIGVsc2UgaWYg KHN5bS0+YXR0ci5zdWJyZWZfYXJyYXlfcG9pbnRlcikKLSAgICAgLyogV2Ug bmVlZCB0aGUgc3BhbiBmb3IgdGhlc2UgYmVhc3RzLiAgKi8KLSAgICAgZ2Zj X2FsbG9jYXRlX2xhbmdfZGVjbCAoZGVjbCk7CgohICAgaWYgKHN5bS0+YXR0 ci5zdWJyZWZfYXJyYXlfcG9pbnRlcikKISAgICAgewohICAgICAgIHRyZWUg c3BhbjsKISAgICAgICBHRkNfREVDTF9TVUJSRUZfQVJSQVlfUCAoZGVjbCkg PSAxOwohICAgICAgIHNwYW4gPSBidWlsZF9kZWNsIChpbnB1dF9sb2NhdGlv biwKISAJCQkgVkFSX0RFQ0wsIGNyZWF0ZV90bXBfdmFyX25hbWUgKCJzcGFu IiksCiEgCQkJIGdmY19hcnJheV9pbmRleF90eXBlKTsKISAgICAgICBnZmNf ZmluaXNoX3Zhcl9kZWNsIChzcGFuLCBzeW0pOwohICAgICAgIFRSRUVfU1RB VElDIChzcGFuKSA9IFRSRUVfU1RBVElDIChkZWNsKTsKISAgICAgICBERUNM X0FSVElGSUNJQUwgKHNwYW4pID0gMTsKCiEgICAgICAgR0ZDX0RFQ0xfU1BB TiAoZGVjbCkgPSBzcGFuOwohICAgICAgIEdGQ19UWVBFX0FSUkFZX1NQQU4g KFRSRUVfVFlQRSAoZGVjbCkpID0gc3BhbjsKISAgICAgfQoKICAgIGlmIChz eW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiEgCUdGQ19ERUNMX0NMQVNTKGRl Y2wpID0gMTsKCiAgICBzeW0tPmJhY2tlbmRfZGVjbCA9IGRlY2w7CgotLS0g MTc1NCwxNzcwIC0tLS0KICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0hB UkFDVEVSKQogICAgICAvKiBDaGFyYWN0ZXIgdmFyaWFibGVzIG5lZWQgc3Bl Y2lhbCBoYW5kbGluZy4gICovCiAgICAgIGdmY19hbGxvY2F0ZV9sYW5nX2Rl Y2wgKGRlY2wpOwoKISAgIGlmIChzeW0tPmFzc29jICYmIHN5bS0+YXR0ci5z dWJyZWZfYXJyYXlfcG9pbnRlcikKISAgICAgc3ltLT5hdHRyLnBvaW50ZXIg PSAxOwoKISAgIGlmIChzeW0tPmF0dHIucG9pbnRlciAmJiBzeW0tPmF0dHIu ZGltZW5zaW9uCiEgICAgICAgJiYgIXN5bS0+dHMuZGVmZXJyZWQKISAgICAg ICAmJiAhc3ltLT5hdHRyLnNlbGVjdF90eXBlX3RlbXBvcmFyeSkKISAgICAg R0ZDX0RFQ0xfUFRSX0FSUkFZX1AgKGRlY2wpID0gMTsKCiAgICBpZiAoc3lt LT50cy50eXBlID09IEJUX0NMQVNTKQohICAgICBHRkNfREVDTF9DTEFTUyhk ZWNsKSA9IDE7CgogICAgc3ltLT5iYWNrZW5kX2RlY2wgPSBkZWNsOwoKKioq KioqKioqKioqKioqIGdmY190cmFuc19kZWZlcnJlZF92YXJzIChnZmNfc3lt Ym9sICogcHIKKioqIDQyNjksNDI4MSAqKioqCiAgICAgICAgaWYgKHN5bS0+ YXNzb2MpCiAgCWNvbnRpbnVlOwoKISAgICAgICBpZiAoc3ltLT5hdHRyLnN1 YnJlZl9hcnJheV9wb2ludGVyCiEgCSAgJiYgR0ZDX0RFQ0xfU1BBTiAoc3lt LT5iYWNrZW5kX2RlY2wpCiEgCSAgJiYgIVRSRUVfU1RBVElDIChHRkNfREVD TF9TUEFOIChzeW0tPmJhY2tlbmRfZGVjbCkpKQogIAl7CiAgCSAgZ2ZjX2lu aXRfYmxvY2sgKCZ0bXBibG9jayk7CiEgCSAgZ2ZjX2FkZF9tb2RpZnkgKCZ0 bXBibG9jaywgR0ZDX0RFQ0xfU1BBTiAoc3ltLT5iYWNrZW5kX2RlY2wpLAoh IAkJCSAgYnVpbGRfaW50X2NzdCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIDAp KTsKICAJICBnZmNfYWRkX2luaXRfY2xlYW51cCAoYmxvY2ssIGdmY19maW5p c2hfYmxvY2sgKCZ0bXBibG9jayksCiAgCQkJCU5VTExfVFJFRSk7CiAgCX0K LS0tIDQyNjIsNDI3NiAtLS0tCiAgICAgICAgaWYgKHN5bS0+YXNzb2MpCiAg CWNvbnRpbnVlOwoKISAgICAgICBpZiAoc3ltLT5hdHRyLnBvaW50ZXIgJiYg c3ltLT5hdHRyLmRpbWVuc2lvbgohIAkgICYmICFzeW0tPmF0dHIudXNlX2Fz c29jCiEgCSAgJiYgIXN5bS0+YXR0ci5ob3N0X2Fzc29jCiEgCSAgJiYgIXN5 bS0+YXR0ci5kdW1teQohIAkgICYmIEdGQ19ERVNDUklQVE9SX1RZUEVfUCAo VFJFRV9UWVBFIChzeW0tPmJhY2tlbmRfZGVjbCkpKQogIAl7CiAgCSAgZ2Zj X2luaXRfYmxvY2sgKCZ0bXBibG9jayk7CiEgCSAgZ2ZjX2NvbnZfZGVzY3Jp cHRvcl9zcGFuX3NldCAoJnRtcGJsb2NrLCBzeW0tPmJhY2tlbmRfZGVjbCwK ISAJCQkJYnVpbGRfaW50X2NzdCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIDAp KTsKICAJICBnZmNfYWRkX2luaXRfY2xlYW51cCAoYmxvY2ssIGdmY19maW5p c2hfYmxvY2sgKCZ0bXBibG9jayksCiAgCQkJCU5VTExfVFJFRSk7CiAgCX0K SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1leHByLmMJKHJldmlz aW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwkod29y a2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX3RyYW5zX3BvaW50ZXJf YXNzaWdubWVudCAoZ2ZjX2V4cHIgKgoqKiogODIyMiw4MjI4ICoqKioKICAg IHN0bXRibG9ja190IGJsb2NrOwogICAgdHJlZSBkZXNjOwogICAgdHJlZSB0 bXA7Ci0gICB0cmVlIGRlY2w7CiAgICBib29sIHNjYWxhciwgbm9uX3Byb2Nf cG9pbnRlcl9hc3NpZ247CiAgICBnZmNfc3MgKnNzOwoKLS0tIDgyMjIsODIy NyAtLS0tCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNfcG9pbnRlcl9hc3Np Z25tZW50IChnZmNfZXhwciAqCioqKiA4NDExLDg0MzQgKioqKgogIAkgIGdm Y19jb252X2V4cHJfZGVzY3JpcHRvciAoJmxzZSwgZXhwcjIpOwogIAkgIHN0 cmxlbl9yaHMgPSBsc2Uuc3RyaW5nX2xlbmd0aDsKCiEgCSAgLyogSWYgdGhp cyBpcyBhIHN1YnJlZmVyZW5jZSBhcnJheSBwb2ludGVyIGFzc2lnbm1lbnQs IHVzZSB0aGUgcmhzCiEgCSAgICAgZGVzY3JpcHRvciBlbGVtZW50IHNpemUg Zm9yIHRoZSBsaHMgc3Bhbi4gICovCiEgCSAgaWYgKGV4cHIxLT5zeW10cmVl LT5uLnN5bS0+YXR0ci5zdWJyZWZfYXJyYXlfcG9pbnRlcikKISAJICAgIHsK ISAJICAgICAgZGVjbCA9IGV4cHIxLT5zeW10cmVlLT5uLnN5bS0+YmFja2Vu ZF9kZWNsOwohIAkgICAgICBnZmNfaW5pdF9zZSAoJnJzZSwgTlVMTCk7CiEg CSAgICAgIHJzZS5kZXNjcmlwdG9yX29ubHkgPSAxOwohIAkgICAgICBnZmNf Y29udl9leHByICgmcnNlLCBleHByMik7CiEgCSAgICAgIGlmIChleHByMS0+ dHMudHlwZSA9PSBCVF9DTEFTUykKISAJCXRyYW5zX2NsYXNzX3ZwdHJfbGVu X2Fzc2lnbm1lbnQgKCZibG9jaywgZXhwcjEsIGV4cHIyLCAmcnNlLAohIAkJ CQkJCSBOVUxMLCBOVUxMKTsKISAJICAgICAgdG1wID0gZ2ZjX2dldF9lbGVt ZW50X3R5cGUgKFRSRUVfVFlQRSAocnNlLmV4cHIpKTsKISAJICAgICAgdG1w ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgc2l6ZV9p bl9ieXRlcyAodG1wKSk7CiEgCSAgICAgIGlmICghSU5URUdFUl9DU1RfUCAo dG1wKSkKISAJCWdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZsc2UucG9zdCwg JnJzZS5wcmUpOwohIAkgICAgICBnZmNfYWRkX21vZGlmeSAoJmxzZS5wb3N0 LCBHRkNfREVDTF9TUEFOKGRlY2wpLCB0bXApOwohIAkgICAgfQohIAkgIGVs c2UgaWYgKGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQogIAkgICAgewog IAkgICAgICByc2UuZXhwciA9IE5VTExfVFJFRTsKICAJICAgICAgcnNlLnN0 cmluZ19sZW5ndGggPSBOVUxMX1RSRUU7Ci0tLSA4NDEwLDg0MTYgLS0tLQog IAkgIGdmY19jb252X2V4cHJfZGVzY3JpcHRvciAoJmxzZSwgZXhwcjIpOwog IAkgIHN0cmxlbl9yaHMgPSBsc2Uuc3RyaW5nX2xlbmd0aDsKCiEgCSAgaWYg KGV4cHIxLT50cy50eXBlID09IEJUX0NMQVNTKQogIAkgICAgewogIAkgICAg ICByc2UuZXhwciA9IE5VTExfVFJFRTsKICAJICAgICAgcnNlLnN0cmluZ19s ZW5ndGggPSBOVUxMX1RSRUU7CioqKioqKioqKioqKioqKiBnZmNfdHJhbnNf cG9pbnRlcl9hc3NpZ25tZW50IChnZmNfZXhwciAqCioqKiA4NDQ1LDg0NTEg KioqKgogIAkgICAgewogIAkgICAgICByc2UuZXhwciA9IGdmY19jbGFzc19k YXRhX2dldCAocnNlLmV4cHIpOwogIAkgICAgICBnZmNfYWRkX21vZGlmeSAo JmxzZS5wcmUsIGRlc2MsIHJzZS5leHByKTsKISAJICAgIH0KICAJICBlbHNl CiAgCSAgICB7CiAgCSAgICAgIGV4cHIxX3ZwdHIgPSB0cmFuc19jbGFzc192 cHRyX2xlbl9hc3NpZ25tZW50ICgmYmxvY2ssIGV4cHIxLAotLS0gODQyNyw4 NDM4IC0tLS0KICAJICAgIHsKICAJICAgICAgcnNlLmV4cHIgPSBnZmNfY2xh c3NfZGF0YV9nZXQgKHJzZS5leHByKTsKICAJICAgICAgZ2ZjX2FkZF9tb2Rp ZnkgKCZsc2UucHJlLCBkZXNjLCByc2UuZXhwcik7CiEgCSAgICAgIC8qIFNl dCB0aGUgbGhzIHNwYW4uICAqLwohIAkgICAgICB0bXAgPSBUUkVFX1RZUEUg KHJzZS5leHByKTsKISAJICAgICAgdG1wID0gVFlQRV9TSVpFX1VOSVQgKGdm Y19nZXRfZWxlbWVudF90eXBlICh0bXApKTsKISAJICAgICAgdG1wID0gZm9s ZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wKTsKISAJICAg ICAgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoJmxzZS5wcmUsIGRl c2MsIHRtcCk7CiEgIAkgICAgfQogIAkgIGVsc2UKICAJICAgIHsKICAJICAg ICAgZXhwcjFfdnB0ciA9IHRyYW5zX2NsYXNzX3ZwdHJfbGVuX2Fzc2lnbm1l bnQgKCZibG9jaywgZXhwcjEsCioqKioqKioqKioqKioqKiBnZmNfdHJhbnNf cG9pbnRlcl9hc3NpZ25tZW50IChnZmNfZXhwciAqCioqKiA4NDkxLDg0OTcg KioqKgogIAkJIGNvbnZlcnRlZCBpbiByc2UgYW5kIG5vdyBoYXZlIHRvIGJ1 aWxkIHRoZSBjb3JyZWN0IExIUwogIAkJIGRlc2NyaXB0b3IgZm9yIGl0LiAg Ki8KCiEgCSAgICAgIHRyZWUgZHR5cGUsIGRhdGE7CiAgCSAgICAgIHRyZWUg b2Zmcywgc3RyaWRlOwogIAkgICAgICB0cmVlIGxib3VuZCwgdWJvdW5kOwoK LS0tIDg0NzgsODQ4NCAtLS0tCiAgCQkgY29udmVydGVkIGluIHJzZSBhbmQg bm93IGhhdmUgdG8gYnVpbGQgdGhlIGNvcnJlY3QgTEhTCiAgCQkgZGVzY3Jp cHRvciBmb3IgaXQuICAqLwoKISAJICAgICAgdHJlZSBkdHlwZSwgZGF0YSwg c3BhbjsKICAJICAgICAgdHJlZSBvZmZzLCBzdHJpZGU7CiAgCSAgICAgIHRy ZWUgbGJvdW5kLCB1Ym91bmQ7CgoqKioqKioqKioqKioqKiogZ2ZjX3RyYW5z X3BvaW50ZXJfYXNzaWdubWVudCAoZ2ZjX2V4cHIgKgoqKiogODUwNCw4NTA5 ICoqKioKLS0tIDg0OTEsODUwOCAtLS0tCiAgCSAgICAgIGRhdGEgPSBnZmNf Y29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChyc2UuZXhwcik7CiAgCSAgICAg IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9zZXQgKCZibG9jaywgZGVzYywg ZGF0YSk7CgorIAkgICAgICAvKiBDb3B5IHRoZSBzcGFuLiAgKi8KKyAJICAg ICAgaWYgKFRSRUVfQ09ERSAocnNlLmV4cHIpID09IFZBUl9ERUNMCisgCQkg ICYmIEdGQ19ERUNMX1BUUl9BUlJBWV9QIChyc2UuZXhwcikpCisgCQlzcGFu ID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX2dldCAocnNlLmV4cHIpOwor IAkgICAgICBlbHNlCisgCQl7CisgCQkgIHRtcCA9IFRSRUVfVFlQRSAocnNl LmV4cHIpOworIAkJICB0bXAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9l bGVtZW50X3R5cGUgKHRtcCkpOworIAkJICBzcGFuID0gZm9sZF9jb252ZXJ0 IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgdG1wKTsKKyAJCX0KKyAJICAgICAg Z2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoJmJsb2NrLCBkZXNjLCBz cGFuKTsKKwogIAkgICAgICAvKiBDb3B5IG9mZnNldCBidXQgYWRqdXN0IGl0 IHN1Y2ggdGhhdCBpdCB3b3VsZCBjb3JyZXNwb25kCiAgCQkgdG8gYSBsYm91 bmQgb2YgemVyby4gICovCiAgCSAgICAgIG9mZnMgPSBnZmNfY29udl9kZXNj cmlwdG9yX29mZnNldF9nZXQgKHJzZS5leHByKTsKSW5kZXg6IGdjYy9mb3J0 cmFuL3RyYW5zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2Zv cnRyYW4vdHJhbnMuaAkocmV2aXNpb24gMjQ5MDUwKQotLS0gZ2NjL2ZvcnRy YW4vdHJhbnMuaAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogc3Ry dWN0IEdUWSgoKSkgbGFuZ19kZWNsIHsKKioqIDk4Miw5ODggKioqKgogICNk ZWZpbmUgR0ZDX0RFQ0xfQ09NTU9OX09SX0VRVUlWKG5vZGUpIERFQ0xfTEFO R19GTEFHXzMobm9kZSkKICAjZGVmaW5lIEdGQ19ERUNMX0NSQVlfUE9JTlRF RShub2RlKSBERUNMX0xBTkdfRkxBR180KG5vZGUpCiAgI2RlZmluZSBHRkNf REVDTF9SRVNVTFQobm9kZSkgREVDTF9MQU5HX0ZMQUdfNShub2RlKQohICNk ZWZpbmUgR0ZDX0RFQ0xfU1VCUkVGX0FSUkFZX1Aobm9kZSkgREVDTF9MQU5H X0ZMQUdfNihub2RlKQogICNkZWZpbmUgR0ZDX0RFQ0xfQVNTT0NJQVRFX1ZB Ul9QKG5vZGUpIERFQ0xfTEFOR19GTEFHXzcobm9kZSkKICAjZGVmaW5lIEdG Q19ERUNMX0NMQVNTKG5vZGUpIERFQ0xfTEFOR19GTEFHXzgobm9kZSkKCi0t LSA5ODIsOTg4IC0tLS0KICAjZGVmaW5lIEdGQ19ERUNMX0NPTU1PTl9PUl9F UVVJVihub2RlKSBERUNMX0xBTkdfRkxBR18zKG5vZGUpCiAgI2RlZmluZSBH RkNfREVDTF9DUkFZX1BPSU5URUUobm9kZSkgREVDTF9MQU5HX0ZMQUdfNChu b2RlKQogICNkZWZpbmUgR0ZDX0RFQ0xfUkVTVUxUKG5vZGUpIERFQ0xfTEFO R19GTEFHXzUobm9kZSkKISAjZGVmaW5lIEdGQ19ERUNMX1BUUl9BUlJBWV9Q KG5vZGUpIERFQ0xfTEFOR19GTEFHXzYobm9kZSkKICAjZGVmaW5lIEdGQ19E RUNMX0FTU09DSUFURV9WQVJfUChub2RlKSBERUNMX0xBTkdfRkxBR183KG5v ZGUpCiAgI2RlZmluZSBHRkNfREVDTF9DTEFTUyhub2RlKSBERUNMX0xBTkdf RkxBR184KG5vZGUpCgpJbmRleDogZ2NjL2ZvcnRyYW4vdHJhbnMtaW50cmlu c2ljLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4v dHJhbnMtaW50cmluc2ljLmMJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy9m b3J0cmFuL3RyYW5zLWludHJpbnNpYy5jCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKiBjb252X2V4cHJfcmVmX3RvX2NhZl9yZWYgKHN0bXRibG9j a190ICpiCioqKiAxMjI1LDEyMzQgKioqKgogIAkgICAgICAmJiByZWYtPnUu Yy5jb21wb25lbnQtPmF0dHIuZGltZW5zaW9uKQogIAkgICAgewogIAkgICAg ICB0cmVlIGFycl9kZXNjX3Rva2VuX29mZnNldDsKISAJICAgICAgLyogR2V0 IHRoZSB0b2tlbiBmcm9tIHRoZSBkZXNjcmlwdG9yLiAgKi8KISAJICAgICAg YXJyX2Rlc2NfdG9rZW5fb2Zmc2V0ID0gZ2ZjX2FkdmFuY2VfY2hhaW4gKAoh IAkJICAgIFRZUEVfRklFTERTIChUUkVFX1RZUEUgKHJlZi0+dS5jLmNvbXBv bmVudC0+YmFja2VuZF9kZWNsKSksCiEgCQkgICAgNCAvKiBDQUZfVE9LRU5f RklFTEQgICovKTsKICAJICAgICAgYXJyX2Rlc2NfdG9rZW5fb2Zmc2V0CiAg CQkgID0gY29tcHV0ZV9jb21wb25lbnRfb2Zmc2V0IChhcnJfZGVzY190b2tl bl9vZmZzZXQsCiAgCQkJCQkgICAgICBUUkVFX1RZUEUgKHRtcCkpOwotLS0g MTIyNSwxMjMzIC0tLS0KICAJICAgICAgJiYgcmVmLT51LmMuY29tcG9uZW50 LT5hdHRyLmRpbWVuc2lvbikKICAJICAgIHsKICAJICAgICAgdHJlZSBhcnJf ZGVzY190b2tlbl9vZmZzZXQ7CiEgCSAgICAgIC8qIEdldCB0aGUgdG9rZW4g ZmllbGQgZnJvbSB0aGUgZGVzY3JpcHRvci4gICovCiEgCSAgICAgIGFycl9k ZXNjX3Rva2VuX29mZnNldCA9IFRSRUVfT1BFUkFORCAoCiEgCQkgICAgZ2Zj X2NvbnZfZGVzY3JpcHRvcl90b2tlbiAocmVmLT51LmMuY29tcG9uZW50LT5i YWNrZW5kX2RlY2wpLCAxKTsKICAJICAgICAgYXJyX2Rlc2NfdG9rZW5fb2Zm c2V0CiAgCQkgID0gY29tcHV0ZV9jb21wb25lbnRfb2Zmc2V0IChhcnJfZGVz Y190b2tlbl9vZmZzZXQsCiAgCQkJCQkgICAgICBUUkVFX1RZUEUgKHRtcCkp OwoqKioqKioqKioqKioqKiogY29udl9pc29jYmluZGluZ19zdWJyb3V0aW5l IChnZmNfY29kZSAqYwoqKiogODEyOSw4MTM0ICoqKioKLS0tIDgxMjgsODEz OCAtLS0tCiAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZm cHRyc2UucHJlKTsKICAgIGRlc2MgPSBmcHRyc2UuZXhwcjsKCisgICAvKiBT ZXQgdGhlIHNwYW4gZmllbGQuICAqLworICAgdG1wID0gVFlQRV9TSVpFX1VO SVQgKGdmY19nZXRfZWxlbWVudF90eXBlIChUUkVFX1RZUEUgKGRlc2MpKSk7 CisgICB0bXAgPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJheV9pbmRleF90eXBl LCB0bXApOworICAgZ2ZjX2NvbnZfZGVzY3JpcHRvcl9zcGFuX3NldCAoJmJs b2NrLCBkZXNjLCB0bXApOworCiAgICAvKiBTZXQgZGF0YSB2YWx1ZSwgZHR5 cGUsIGFuZCBvZmZzZXQuICAqLwogICAgdG1wID0gR0ZDX1RZUEVfQVJSQVlf REFUQVBUUl9UWVBFIChUUkVFX1RZUEUgKGRlc2MpKTsKICAgIGdmY19jb252 X2Rlc2NyaXB0b3JfZGF0YV9zZXQgKCZibG9jaywgZGVzYywgZm9sZF9jb252 ZXJ0ICh0bXAsIGNwdHJzZS5leHByKSk7CkluZGV4OiBnY2MvZm9ydHJhbi90 cmFucy1pby5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0 cmFuL3RyYW5zLWlvLmMJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0 cmFuL3RyYW5zLWlvLmMJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioq IGdmY190cmFuc190cmFuc2ZlciAoZ2ZjX2NvZGUgKiBjb2RlKQoqKiogMjU2 MywyNTY4ICoqKioKLS0tIDI1NjMsMjU3NCAtLS0tCiAgCSAgZ2NjX2Fzc2Vy dCAocmVmICYmIHJlZi0+dHlwZSA9PSBSRUZfQVJSQVkpOwogIAl9CgorICAg ICAgIGlmIChleHByLT50cy50eXBlICE9IEJUX0NMQVNTCisgCSAmJiBleHBy LT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRQorIAkgJiYgZ2ZjX2V4cHJf YXR0ciAoZXhwcikucG9pbnRlcikKKyAJZ290byBzY2FsYXJpemU7CisKKwog ICAgICAgIGlmICghKGdmY19idF9zdHJ1Y3QgKGV4cHItPnRzLnR5cGUpCiAg CSAgICAgIHx8IGV4cHItPnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiAgCSAgICAm JiByZWYgJiYgcmVmLT5uZXh0ID09IE5VTEwKKioqKioqKioqKioqKioqIGdm Y190cmFuc190cmFuc2ZlciAoZ2ZjX2NvZGUgKiBjb2RlKQoqKiogMjU5Nywy NjAyICoqKioKLS0tIDI2MDMsMjYwOSAtLS0tCiAgCSAgZ290byBmaW5pc2hf YmxvY2tfbGFiZWw7CiAgCX0KCisgc2NhbGFyaXplOgogICAgICAgIC8qIElu aXRpYWxpemUgdGhlIHNjYWxhcml6ZXIuICAqLwogICAgICAgIHNzID0gZ2Zj X3dhbGtfZXhwciAoZXhwcik7CiAgICAgICAgZ2ZjX2luaXRfbG9vcGluZm8g KCZsb29wKTsKKioqKioqKioqKioqKioqIGdmY190cmFuc190cmFuc2ZlciAo Z2ZjX2NvZGUgKiBjb2RlKQoqKiogMjYxMiwyNjE4ICoqKioKLS0tIDI2MTks MjYyNyAtLS0tCgogICAgICAgIGdmY19jb3B5X2xvb3BpbmZvX3RvX3NlICgm c2UsICZsb29wKTsKICAgICAgICBzZS5zcyA9IHNzOworCiAgICAgICAgZ2Zj X2NvbnZfZXhwcl9yZWZlcmVuY2UgKCZzZSwgZXhwcik7CisKICAgICAgICBp ZiAoZXhwci0+dHMudHlwZSA9PSBCVF9DTEFTUykKICAJdnB0ciA9IGdmY19n ZXRfdnB0cl9mcm9tX2V4cHIgKHNzLT5pbmZvLT5kYXRhLmFycmF5LmRlc2Ny aXB0b3IpOwogICAgICAgIGVsc2UKSW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5z LXN0bXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJh bi90cmFucy1zdG10LmMJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy9mb3J0 cmFuL3RyYW5zLXN0bXQuYwkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioq KiogdHJhbnNfYXNzb2NpYXRlX3ZhciAoZ2ZjX3N5bWJvbCAqc3ltLCBnZgoq KiogMTYwMiwxNjA4ICoqKioKICAJICAgICAgOiBlLT5zeW10cmVlLT5uLnN5 bS0+YmFja2VuZF9kZWNsOwogIAkgIHRtcCA9IGdmY19nZXRfZWxlbWVudF90 eXBlIChUUkVFX1RZUEUgKHRtcCkpOwogIAkgIHRtcCA9IGZvbGRfY29udmVy dCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIHNpemVfaW5fYnl0ZXMgKHRtcCkp OwohIAkgIGdmY19hZGRfbW9kaWZ5ICgmc2UucHJlLCBHRkNfREVDTF9TUEFO KGRlc2MpLCB0bXApOwogIAl9CgogICAgICAgIC8qIERvbmUsIHJlZ2lzdGVy IHN0dWZmIGFzIGluaXQgLyBjbGVhbnVwIGNvZGUuICAqLwotLS0gMTYwMiwx NjA4IC0tLS0KICAJICAgICAgOiBlLT5zeW10cmVlLT5uLnN5bS0+YmFja2Vu ZF9kZWNsOwogIAkgIHRtcCA9IGdmY19nZXRfZWxlbWVudF90eXBlIChUUkVF X1RZUEUgKHRtcCkpOwogIAkgIHRtcCA9IGZvbGRfY29udmVydCAoZ2ZjX2Fy cmF5X2luZGV4X3R5cGUsIHNpemVfaW5fYnl0ZXMgKHRtcCkpOwohIAkgIGdm Y19jb252X2Rlc2NyaXB0b3Jfc3Bhbl9zZXQgKCZzZS5wcmUsIGRlc2MsIHRt cCk7CiAgCX0KCiAgICAgICAgLyogRG9uZSwgcmVnaXN0ZXIgc3R1ZmYgYXMg aW5pdCAvIGNsZWFudXAgY29kZS4gICovCkluZGV4OiBnY2MvZm9ydHJhbi90 cmFucy10eXBlcy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9m b3J0cmFuL3RyYW5zLXR5cGVzLmMJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdj Yy9mb3J0cmFuL3RyYW5zLXR5cGVzLmMJKHdvcmtpbmcgY29weSkKKioqKioq KioqKioqKioqIGdmY19nZXRfYXJyYXlfZGVzY3JpcHRvcl9iYXNlIChpbnQg ZGltZW4KKioqIDE3ODIsMTc4NyAqKioqCi0tLSAxNzgyLDE3OTMgLS0tLQog IAkJCQkgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsICZjaGFpbik7CiAgICBU UkVFX05PX1dBUk5JTkcgKGRlY2wpID0gMTsKCisgICAvKiBBZGQgdGhlIHNw YW4gY29tcG9uZW50LiAgKi8KKyAgIGRlY2wgPSBnZmNfYWRkX2ZpZWxkX3Rv X3N0cnVjdF8xIChmYXRfdHlwZSwKKyAJCQkJICAgIGdldF9pZGVudGlmaWVy ICgic3BhbiIpLAorIAkJCQkgICAgZ2ZjX2FycmF5X2luZGV4X3R5cGUsICZj aGFpbik7CisgICBUUkVFX05PX1dBUk5JTkcgKGRlY2wpID0gMTsKKwogICAg LyogQnVpbGQgdGhlIGFycmF5IHR5cGUgZm9yIHRoZSBzdHJpZGUgYW5kIGJv dW5kIGNvbXBvbmVudHMuICAqLwogICAgaWYgKGRpbWVuICsgY29kaW1lbiA+ IDApCiAgICAgIHsKKioqKioqKioqKioqKioqIGdmY19nZXRfZGVyaXZlZF90 eXBlIChnZmNfc3ltYm9sICogZGVyaXYKKioqIDI3MDgsMjcxMyAqKioqCi0t LSAyNzE0LDI3MjQgLS0tLQogICAgICAgIGlmICghYy0+YmFja2VuZF9kZWNs KQogIAljLT5iYWNrZW5kX2RlY2wgPSBmaWVsZDsKCisgICAgICAgaWYgKGMt PmF0dHIucG9pbnRlciAmJiBjLT5hdHRyLmRpbWVuc2lvbgorIAkgICYmICEo Yy0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisgCSAgICAgICAmJiBzdHJjbXAg KGMtPm5hbWUsICJfZGF0YSIpID09IDApKQorIAlHRkNfREVDTF9QVFJfQVJS QVlfUCAoYy0+YmFja2VuZF9kZWNsKSA9IDE7CisKICAgICAgICAvKiBEbyBu b3QgYWRkIGEgY2FmX3Rva2VuIGZpZWxkIGZvciBjbGFzc2VzJyBkYXRhIGNv bXBvbmVudHMuICAqLwogICAgICAgIGlmIChjb2RpbWVuICYmICFjLT5hdHRy LmRpbWVuc2lvbiAmJiAhYy0+YXR0ci5jb2RpbWVuc2lvbgogIAkgICYmIChj LT5hdHRyLmFsbG9jYXRhYmxlIHx8IGMtPmF0dHIucG9pbnRlcikKKioqKioq KioqKioqKioqIGdmY19nZXRfYXJyYXlfZGVzY3JfaW5mbyAoY29uc3RfdHJl ZSB0eXAKKioqIDMyMDMsMzIxOCAqKioqCiAgICBpZiAoaW5kaXJlY3QpCiAg ICAgIGJhc2VfZGVjbCA9IGJ1aWxkMSAoSU5ESVJFQ1RfUkVGLCBwdHlwZSwg YmFzZV9kZWNsKTsKCiEgICBpZiAoR0ZDX1RZUEVfQVJSQVlfU1BBTiAodHlw ZSkpCiEgICAgIGVsZW1fc2l6ZSA9IEdGQ19UWVBFX0FSUkFZX1NQQU4gKHR5 cGUpOwohICAgZWxzZQohICAgICBlbGVtX3NpemUgPSBmb2xkX2NvbnZlcnQg KGdmY19hcnJheV9pbmRleF90eXBlLCBUWVBFX1NJWkVfVU5JVCAoZXR5cGUp KTsKICAgIGZpZWxkID0gVFlQRV9GSUVMRFMgKFRZUEVfTUFJTl9WQVJJQU5U ICh0eXBlKSk7CiAgICBkYXRhX29mZiA9IGJ5dGVfcG9zaXRpb24gKGZpZWxk KTsKICAgIGZpZWxkID0gREVDTF9DSEFJTiAoZmllbGQpOwogICAgZmllbGQg PSBERUNMX0NIQUlOIChmaWVsZCk7CiAgICBkdHlwZV9vZmYgPSBieXRlX3Bv c2l0aW9uIChmaWVsZCk7CiAgICBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZpZWxk KTsKICAgIGRpbV9vZmYgPSBieXRlX3Bvc2l0aW9uIChmaWVsZCk7CiAgICBk aW1fc2l6ZSA9IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKFRSRUVfVFlQ RSAoZmllbGQpKSk7CiAgICBmaWVsZCA9IFRZUEVfRklFTERTIChUUkVFX1RZ UEUgKFRSRUVfVFlQRSAoZmllbGQpKSk7Ci0tLSAzMjE0LDMyMjcgLS0tLQog ICAgaWYgKGluZGlyZWN0KQogICAgICBiYXNlX2RlY2wgPSBidWlsZDEgKElO RElSRUNUX1JFRiwgcHR5cGUsIGJhc2VfZGVjbCk7CgohICAgZWxlbV9zaXpl ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgVFlQRV9T SVpFX1VOSVQgKGV0eXBlKSk7CiAgICBmaWVsZCA9IFRZUEVfRklFTERTIChU WVBFX01BSU5fVkFSSUFOVCAodHlwZSkpOwogICAgZGF0YV9vZmYgPSBieXRl X3Bvc2l0aW9uIChmaWVsZCk7CiAgICBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZp ZWxkKTsKICAgIGZpZWxkID0gREVDTF9DSEFJTiAoZmllbGQpOwogICAgZHR5 cGVfb2ZmID0gYnl0ZV9wb3NpdGlvbiAoZmllbGQpOwogICAgZmllbGQgPSBE RUNMX0NIQUlOIChmaWVsZCk7CisgICBmaWVsZCA9IERFQ0xfQ0hBSU4gKGZp ZWxkKTsKICAgIGRpbV9vZmYgPSBieXRlX3Bvc2l0aW9uIChmaWVsZCk7CiAg ICBkaW1fc2l6ZSA9IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKFRSRUVf VFlQRSAoZmllbGQpKSk7CiAgICBmaWVsZCA9IFRZUEVfRklFTERTIChUUkVF X1RZUEUgKFRSRUVfVFlQRSAoZmllbGQpKSk7CkluZGV4OiBnY2MvdGVzdHN1 aXRlL2dmb3J0cmFuLmRnL2Fzc3VtZWRfdHlwZV8yLmY5MAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2Fz c3VtZWRfdHlwZV8yLmY5MAkocmV2aXNpb24gMjQ5MDUwKQotLS0gZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9hc3N1bWVkX3R5cGVfMi5mOTAJKHdvcmtp bmcgY29weSkKKioqKioqKioqKioqKioqIGVuZAoqKiogMTUxLDE1OSAqKioq CiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9z Y2FsYXIgLiZzY2FsYXJfdDEsIiAxICJvcmlnaW5hbCIgfSB9CgogICEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC4m XFwoLlxcKHJlYWwua2luZD00Li4wOi4gLiByZXN0cmljdFxcKSBhcnJheV9y ZWFsX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KISAhIHsgZGctZmlu YWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuJlxcKC5c XChjaGFyYWN0ZXIua2luZD0xLi4wOi4uMToxLiAuXFwpIGFycmF5X2NoYXJf cHRyLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KICAhIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuJlxcKC5cXChzdHJ1 Y3QgdDIuMDouIC4gcmVzdHJpY3RcXCkgYXJyYXlfdDJfYWxsb2MuZGF0YSIg MSAib3JpZ2luYWwiIH0gfQohICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wLXRpbWVzICJzdWJfc2NhbGFyIC4mXFwoLlxcKHN0cnVjdCB0My4wOi4g LlxcKSBhcnJheV90M19wdHIuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQogICEg eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFy IC5cXChzdHJ1Y3QgdDEgLlxcKSBhcnJheV9jbGFzc190MV9hbGxvYy5fZGF0 YS5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAgISB7IGRnLWZpbmFsIHsgc2Nh bi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLlxcKHN0cnVjdCB0MSAu XFwpIFxcKGFycmF5X2NsYXNzX3QxX3B0ci5fZGF0YS5kYXQiIDEgIm9yaWdp bmFsIiB9IH0KCi0tLSAxNTEsMTU5IC0tLS0KICAhIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuJnNjYWxhcl90MSwi IDEgIm9yaWdpbmFsIiB9IH0KCiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZcXCguXFwocmVhbC5raW5kPTQu LjA6LiAuIHJlc3RyaWN0XFwpIGFycmF5X3JlYWxfYWxsb2MuZGF0YSIgMSAi b3JpZ2luYWwiIH0gfQohICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJzdWJfc2NhbGFyIC5cXChjaGFyYWN0ZXIua2luZD0xLi4xOjEu IC5cXCkgLmFycmF5X2NoYXJfcHRyLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0K ICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3Nj YWxhciAuJlxcKC5cXChzdHJ1Y3QgdDIuMDouIC4gcmVzdHJpY3RcXCkgYXJy YXlfdDJfYWxsb2MuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQohICEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC5cXChz dHJ1Y3QgdDMgLlxcKSAuYXJyYXlfdDNfcHRyLmRhdGEiIDEgIm9yaWdpbmFs IiB9IH0KICAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi c3ViX3NjYWxhciAuXFwoc3RydWN0IHQxIC5cXCkgYXJyYXlfY2xhc3NfdDFf YWxsb2MuX2RhdGEuZGF0YSIgMSAib3JpZ2luYWwiIH0gfQogICEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC5cXChz dHJ1Y3QgdDEgLlxcKSBcXChhcnJheV9jbGFzc190MV9wdHIuX2RhdGEuZGF0 IiAxICJvcmlnaW5hbCIgfSB9CgpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9nb2FjYy9rZXJuZWxzLWFsaWFzLTQuZjk1Cj09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29h Y2Mva2VybmVscy1hbGlhcy00LmY5NQkocmV2aXNpb24gMjQ5MDUwKQotLS0g Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9rZXJuZWxzLWFsaWFz LTQuZjk1CSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBwcm9ncmFt IG1haW4KKioqIDE2LDIwICoqKioKICBlbmQgcHJvZ3JhbSBtYWluCgogICEg T25seSB0aGUgb21wX2RhdGFfaSByZWxhdGVkIGxvYWRzIHNob3VsZCBiZSBh bm5vdGF0ZWQgd2l0aCBjbGlxdWVzLgohICEgeyBkZy1maW5hbCB7IHNjYW4t dHJlZS1kdW1wLXRpbWVzICJjbGlxdWUgMSBiYXNlIDEiIDMgImVhbGlhcyIg fSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/ biljbGlxdWUgMSBiYXNlIDAiIDQgImVhbGlhcyIgfSB9Ci0tLSAxNiwyMCAt LS0tCiAgZW5kIHByb2dyYW0gbWFpbgoKICAhIE9ubHkgdGhlIG9tcF9kYXRh X2kgcmVsYXRlZCBsb2FkcyBzaG91bGQgYmUgYW5ub3RhdGVkIHdpdGggY2xp cXVlcy4KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi Y2xpcXVlIDEgYmFzZSAxIiA0ICJlYWxpYXMiIH0gfQohICEgeyBkZy1maW5h bCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pY2xpcXVlIDEgYmFzZSAw IiA1ICJlYWxpYXMiIH0gfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9ub19hcmdfY2hlY2tfMi5mOTAKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9ub19hcmdfY2hlY2tf Mi5mOTAJKHJldmlzaW9uIDI0OTA1MCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvbm9fYXJnX2NoZWNrXzIuZjkwCSh3b3JraW5nIGNvcHkpCioq KioqKioqKioqKioqKiBlbmQKKioqIDEzMywxNDEgKioqKgogICEgeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJzdWJfc2NhbGFyIC4mc2Nh bGFyX3QxLCIgMSAib3JpZ2luYWwiIH0gfQoKICAhIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuJlxcKC5cXChyZWFs LmtpbmQ9NC4uMDouIC4gcmVzdHJpY3RcXCkgYXJyYXlfcmVhbF9hbGxvYy5k YXRhIiAxICJvcmlnaW5hbCIgfSB9CiEgISB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZcXCguXFwoY2hhcmFjdGVy LmtpbmQ9MS4uMDouLjE6MS4gLlxcKSBhcnJheV9jaGFyX3B0ci5kYXRhIiAx ICJvcmlnaW5hbCIgfSB9CiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZcXCguXFwoc3RydWN0IHQyLjA6LiAu IHJlc3RyaWN0XFwpIGFycmF5X3QyX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFs IiB9IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi c3ViX3NjYWxhciAuJlxcKC5cXChzdHJ1Y3QgdDMuMDouIC5cXCkgYXJyYXlf dDNfcHRyLmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KICAhIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuXFwoc3RydWN0 IHQxIC5cXCkgYXJyYXlfY2xhc3NfdDFfYWxsb2MuX2RhdGEuZGF0YSIgMSAi b3JpZ2luYWwiIH0gfQogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICJzdWJfc2NhbGFyIC5cXChzdHJ1Y3QgdDEgLlxcKSBcXChhcnJh eV9jbGFzc190MV9wdHIuX2RhdGEuZGF0IiAxICJvcmlnaW5hbCIgfSB9Cgot LS0gMTMzLDE0MSAtLS0tCiAgISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZzY2FsYXJfdDEsIiAxICJvcmlnaW5h bCIgfSB9CgogICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJzdWJfc2NhbGFyIC4mXFwoLlxcKHJlYWwua2luZD00Li4wOi4gLiByZXN0 cmljdFxcKSBhcnJheV9yZWFsX2FsbG9jLmRhdGEiIDEgIm9yaWdpbmFsIiB9 IH0KISAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAic3Vi X3NjYWxhciAuXFwoY2hhcmFjdGVyLmtpbmQ9MS4uMToxLiAuXFwpIC5hcnJh eV9jaGFyX3B0ci5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAgISB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIgLiZcXCgu XFwoc3RydWN0IHQyLjA6LiAuIHJlc3RyaWN0XFwpIGFycmF5X3QyX2FsbG9j LmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KISAhIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuXFwoc3RydWN0IHQzIC5c XCkgLmFycmF5X3QzX3B0ci5kYXRhIiAxICJvcmlnaW5hbCIgfSB9CiAgISB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgInN1Yl9zY2FsYXIg LlxcKHN0cnVjdCB0MSAuXFwpIGFycmF5X2NsYXNzX3QxX2FsbG9jLl9kYXRh LmRhdGEiIDEgIm9yaWdpbmFsIiB9IH0KICAhIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcC10aW1lcyAic3ViX3NjYWxhciAuXFwoc3RydWN0IHQxIC5c XCkgXFwoYXJyYXlfY2xhc3NfdDFfcHRyLl9kYXRhLmRhdCIgMSAib3JpZ2lu YWwiIH0gfQoKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9p bnRlcl9hcnJheV8xLmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfMS5mOTAJ KG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9w b2ludGVyX2FycmF5XzEuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioq KioqKgoqKiogMCAqKioqCi0tLSAxLDYwIC0tLS0KKyAhIHsgZGctZG8gcnVu IH0KKyAhCisgISBDaGVjayB0aGUgZml4IGZvciBQUjM0NjQwIGNvbW1lbnRz IDEgYW5kIDMuCisgIQorICEgVGhpcyBpbnZvbHZlcyBwYXNzaW5nIGFuZCBy ZXR1cm5pbmcgcG9pbnRlciBhcnJheSBjb21wb25lbnRzIHRoYXQKKyAhIHBv aW50IHRvIGNvbXBvbmVudHMgb2YgYXJyYXlzIG9mIGRlcml2ZWQgdHlwZXMu CisgIQorIE1PRFVMRSB0ZXN0CisgICBJTVBMSUNJVCBOT05FCisgICBUWVBF IDo6IG15X3R5cGUKKyAgICAgSU5URUdFUiA6OiB2YWx1ZQorICAgICBpbnRl Z2VyIDo6IHRhZworICAgRU5EIFRZUEUKKyBDT05UQUlOUworICAgU1VCUk9V VElORSBnZXRfdmFsdWVzKHZhbHVlcywgc3dpdGNoKQorICAgICBJTlRFR0VS LCBQT0lOVEVSIDo6IHZhbHVlcyg6KQorICAgICBpbnRlZ2VyIDo6IHN3aXRj aAorICAgICBUWVBFKG15X3R5cGUpLCBQT0lOVEVSIDo6IGQoOikKKyAgICAg YWxsb2NhdGUgKGQsIHNvdXJjZSA9IFtteV90eXBlKDEsMTAxKSwgbXlfdHlw ZSgyLDEwMildKQorICAgICBpZiAoc3dpdGNoIC5lcS4gMSkgdGhlbgorICAg ICAgIHZhbHVlcyA9PiBkKDopJXZhbHVlCisgICAgICAgaWYgKGFueSAodmFs dWVzIC5uZS4gWzEsMl0pKSBwcmludCAqLCB2YWx1ZXMoMikKKyAgICAgZWxz ZQorICAgICAgIHZhbHVlcyA9PiBkKDopJXRhZworICAgICAgIGlmIChhbnkg KHZhbHVlcyAubmUuIFsxMDEsMTAyXSkpIGNhbGwgYWJvcnQKKyAgICAgZW5k IGlmCisgICBFTkQgU1VCUk9VVElORQorCisgICBmdW5jdGlvbiByZXR1cm5f dmFsdWVzKHN3aXRjaCkgcmVzdWx0ICh2YWx1ZXMpCisgICAgIElOVEVHRVIs IFBPSU5URVIgOjogdmFsdWVzKDopCisgICAgIGludGVnZXIgOjogc3dpdGNo CisgICAgIFRZUEUobXlfdHlwZSksIFBPSU5URVIgOjogZCg6KQorICAgICBh bGxvY2F0ZSAoZCwgc291cmNlID0gW215X3R5cGUoMSwxMDEpLCBteV90eXBl KDIsMTAyKV0pCisgICAgIGlmIChzd2l0Y2ggLmVxLiAxKSB0aGVuCisgICAg ICAgdmFsdWVzID0+IGQoOikldmFsdWUKKyAgICAgICBpZiAoYW55ICh2YWx1 ZXMgLm5lLiBbMSwyXSkpIGNhbGwgYWJvcnQKKyAgICAgZWxzZQorICAgICAg IHZhbHVlcyA9PiBkKDopJXRhZworICAgICAgIGlmIChhbnkgKHZhbHVlcyhb MiwxXSkgLm5lLiBbMTAyLDEwMV0pKSBjYWxsIGFib3J0CisgICAgIGVuZCBp ZgorICAgRU5EIGZ1bmN0aW9uCisgRU5EIE1PRFVMRQorCisgICB1c2UgdGVz dAorICAgaW50ZWdlciwgcG9pbnRlciA6OiB4KDopCisgICB0eXBlIDo6IHlv dXJfdHlwZQorICAgICBpbnRlZ2VyLCBwb2ludGVyIDo6IHgoOikKKyAgIGVu ZCB0eXBlCisgICB0eXBlKHlvdXJfdHlwZSkgOjogeQorCisgICBjYWxsIGdl dF92YWx1ZXMgKHgsIDEpCisgICBpZiAoYW55ICh4IC5uZS4gWzEsMl0pKSBj YWxsIGFib3J0CisgICBjYWxsIGdldF92YWx1ZXMgKHkleCwgMikKKyAgIGlm IChhbnkgKHkleCAubmUuIFsxMDEsMTAyXSkpIGNhbGwgYWJvcnQKKworICAg eCA9PiByZXR1cm5fdmFsdWVzICgyKQorICAgaWYgKGFueSAoeCAubmUuIFsx MDEsMTAyXSkpIGNhbGwgYWJvcnQKKyAgIHkleCA9PiByZXR1cm5fdmFsdWVz ICgxKQorICAgaWYgKGFueSAoeSV4IC5uZS4gWzEsMl0pKSBjYWxsIGFib3J0 CisgZW5kCkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50 ZXJfYXJyYXlfMi5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2Nj L3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5XzIuZjkwCShu b25leGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9p bnRlcl9hcnJheV8yLmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioq KioKKioqIDAgKioqKgotLS0gMSwxNDMgLS0tLQorICEgeyBkZy1kbyBjb21w aWxlIH0KKyAhCisgISBUZXN0IHRoZSBmaXggZm9yIFBSNDA3MzcgYXMgcGFy dCBvZiB0aGUgb3ZlcmFsbCBmaXggZm9yIFBSMzQ2NDAuCisgIQorICEgQ29u dHJpYnV0ZWQgYnkgRGF2aWQgSG91Z2ggIDxkaDQ1OEBvYWthcHBsZS5uZXQ+ CisgIQorIG1vZHVsZSB0ZXN0bW9kCisKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIg Ojogc3RhbmRhcmRfaW50ZWdlciA9IDEKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIg OjogaW50ID0gS0lORCggc3RhbmRhcmRfaW50ZWdlcikKKworIGludGVnZXIs IHBhcmFtZXRlciA6OiBpOCAgPSBzZWxlY3RlZF9pbnRfa2luZCgxMikKKyBp bnRlZ2VyLCBwYXJhbWV0ZXIgOjogaTQgID0gc2VsZWN0ZWRfaW50X2tpbmQo OCkKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogaTIgID0gc2VsZWN0ZWRfaW50 X2tpbmQoNCkKKworIGludGVnZXIsIHBhcmFtZXRlciA6OiBzdGFuZGFyZF9y ZWFsID0gMS4KKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogc3RkX3JlYWwgPSBL SU5EKCBzdGFuZGFyZF9yZWFsKQorCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6 IHI4ICA9IHNlbGVjdGVkX3JlYWxfa2luZCgxMikKKyBpbnRlZ2VyLCBwYXJh bWV0ZXIgOjogcjQgID0gc2VsZWN0ZWRfcmVhbF9raW5kKDYpCisgaW50ZWdl ciwgcGFyYW1ldGVyIDo6IGRvdWJsZSAgPSBzZWxlY3RlZF9yZWFsX2tpbmQo MjApCisKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogbmFtZV9zdHJpbmdfbGVu Z3RoID0gNDAKKyBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogZmlsZV9uYW1lX2xl bmd0aCA9IDYwCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6IHRleHRfc3RyaW5n X2xlbmd0aCA9IDgwCisgaW50ZWdlciwgcGFyYW1ldGVyIDo6IG1heF9rd2Rf bGd0aCA9IGZpbGVfbmFtZV9sZW5ndGgKKworIGludGVnZXIoaW50KSA6OiBi eXRlc19wZXJfaW50ICA9IDQKKyBpbnRlZ2VyKGludCkgOjogYnl0ZXNfcGVy X3JlYWwgPSA4CisgaW50ZWdlcihpbnQpIDo6IHdvcmtjb21tLCBzcGluY29t bQorCisgICAgaW50ZWdlcihpbnQpLCBwYXJhbWV0ZXIgOjogbmJfZGlyZWN0 aW9ucyA9IDMsICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZGlyZWN0aW9uX3ggPSAxLCAgICAmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGlyZWN0aW9uX3kgPSAyLCAgICAmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uX3ogPSAzLCAgICAmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbmJfZ2hvc3RfY2VsbHMgPSA1 ICAgICAhIG1pZ2h0IGJlIGRpZmZlcmVudCBmb3IgdGhlIGxhZ3JhbmdlIHN0 ZXA/CisKKyAgICBpbnRlZ2VyKGludCksIHBhcmFtZXRlciA6OiBlbmRzID0g NCwgICAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbG93ZXJfZ2hvc3QgPSAxLCAgICAgJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxvd2VyX2ludGVyaW9yID0gMiwgICYKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9pbnRlcmlvciA9IDMsICAm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBwZXJfZ2hvc3Qg PSA0CisKKyAgICAhIE5laWdoYm9ycworICAgIGludGVnZXIoaW50KSwgcGFy YW1ldGVyIDo6IHNpZGUgPSAyLCAgICAgICAmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbG93ZXJfZW5kID0gMSwgICYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1cHBlcl9lbmQgPSAyCisKKworICAgIGlu dGVnZXIoaW50KSwgcGFyYW1ldGVyIDo6IG5iX3ZhcmlhYmxlcyA9IDUsICAg ICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb192YXIgPSAx LCAgICAgICAgICAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXRzX3ZhciA9IDIsICAgICAgICAgJgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVfdmFyID0gMywgICAgICAgICAgICYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1cDFfdmFyID0gNCwgICAgICAgICAmCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXAyX3ZhciA9IDUsICAg ICAgICAgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpc192 YXIgPSA2LCAgICAgICAgICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBlY3NfdmFyID0gNywgICAgICAgICAmCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcF92YXIgPSA4LCAgICAgICAgICAgJgorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNfdmFyID0gOSwgICAgICAgICAg ICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl92YXJfc29y dGllID0gOQorCisgICAgdHlwZSA6OiBWQVJJQUJMRVNfTElHTkUKKyAgICAg ICBzZXF1ZW5jZQorICAgICAgIHJlYWwsIHBvaW50ZXIsIGRpbWVuc2lvbigg OiwgOikgOjogbAorICAgIGVuZCB0eXBlIFZBUklBQkxFU19MSUdORQorCisg ICAgdHlwZSBWQVJJQUJMRVNfTUFJTExFCisgICAgICAgc2VxdWVuY2UKKyAg ICAgICByZWFsKHI4KSwgZGltZW5zaW9uKCBuYl92YXJpYWJsZXMpIDo6IGNl bGxfdmFyCisgICAgZW5kIHR5cGUgVkFSSUFCTEVTX01BSUxMRQorCisgICAg aW50ZWdlcihpbnQpLCBkaW1lbnNpb24oIG5iX2RpcmVjdGlvbnMpIDo6ICYK KyAgICAgICAgICBmaXJzdF9yZWFsX2NlbGwsICAgICYgICEgd2l0aG91dCBn aG9zdCBjZWxscworICAgICAgICAgIGxhc3RfcmVhbF9jZWxsLCAgICAgJiAg IQorICAgICAgICAgIG5iX3JlYWxfY2VsbHMsICAgICAgJiAgIQorICAgICAg ICAgIGZpcnN0X3dvcmtfY2VsbCwgICAgJiAgISBpbmNsdWRpbmcgZ2hvc3Qg Y2VsbHMKKyAgICAgICAgICBsYXN0X3dvcmtfY2VsbCwgICAgICYgICEKKyAg ICAgICAgICBuYl93b3JrX2NlbGxzLCAgICAgICYgICEKKyAgICAgICAgICBn bG9iYWxfbmJfY2VsbHMgICAgICAgICEgbnVtYmVyIG9mIHJlYWwgY2VsbHMs IGZvciB0aGUgZW50aXJlIGdyaWQKKworICAgIGludGVnZXIoaW50KSA6OiBk aW1fcHJvYmxlbWUgICEgZGltZW5zaW9uIGR1IHByb2JsZW1lICgxLCAyIG91 IDMpCisKKyAgICBpbnRlZ2VyKGludCkgOjogbGFyZ2VzdF9sb2NhbF9zaXpl ICAgISB0aGUgbGFyZ2VzdCBvZiB0aGUgMyBkaW1lbnNpb25zIG9mIHRoZSBs b2NhbCBncmlkCisKKyAgICAhIEh5ZHJvIHZhcmlhYmxlcyBvZiB0aGUgYWN0 dWFsIGRvbWFpbgorICAgICEgVGhlcmUgYXJlIDMgY29waWVzIG9mIHRoZXNl LCBmb3IgdXNlIGFjY29yZGluZyB0byBjdXJyZW50IHdvcmsgZGlyZWN0aW9u CisgICAgdHlwZSAoVkFSSUFCTEVTX01BSUxMRSksIGFsbG9jYXRhYmxlLCB0 YXJnZXQsIGRpbWVuc2lvbiggOiwgOiwgOikgOjogICYKKyAgICAgICAgICAg ICBIeWRyb192YXJzX1hZWiwgICYKKyAgICAgICAgICAgICBIeWRyb192YXJz X1laWCwgICYKKyAgICAgICAgICAgICBIeWRyb192YXJzX1pYWQorCisgICAg ISBQb2ludGVycyB0byBjdXJyZW50IGFuZCBuZXh0IEh5ZHJvIHZhciBhcnJh eXMKKyAgICB0eXBlIChWQVJJQUJMRVNfTUFJTExFKSwgcG9pbnRlciwgZGlt ZW5zaW9uKCA6LCA6LCA6KSA6OiBIeWRyb192YXJzLCAgICAgICYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBIeWRyb192YXJzX25leHQKKworICAgICEgV2hpY2ggb2Yg dGhlc2UgMyBjb3BpZXMgb2YgdGhlIDNEIGFycmF5cyBoYXMgYmVlbiB1cGRh dGVkIGxhc3QKKyAgICBpbnRlZ2VyKGludCkgOjogbGFzdF91cGRhdGVkXzNE X2FycmF5ID0gMAorCisgICAgcmVhbChyOCksIHBvaW50ZXIsIGRpbWVuc2lv biggOikgOjogICAgICAgICYKKyAgICAgICAgICAhIFZhcmlhYmxlcyAicGVy bWFuZW50ZXMiIChlbnRyYW50IGRhbnMgbGEgcHJvamVjdGlvbikKKyAgICAg ICAgICBSbywgICAgICAmICEgZGVuc2l0ZQorICAgICAgICAgIEV0cywgICAg ICYgISBlbmVyZ2llIHRvdGFsZSBzcGVjaWZpcXVlCisgICAgICAgICAgVW0s ICAgICAgJiAhIHZpdGVzc2UgYXV4IG1haWxsZXMsIGRhbnMgbGEgZGlyZWN0 aW9uIGRlIHRyYXZhaWwKKyAgICAgICAgICBYbiwgICAgICAmICEgYWJzY2lz c2UgZW4gZmluIGRlIHBhcyBkZSB0ZW1wcworICAgICAgICAgICEgVmFyaWFi bGVzIGVuIGxlY3R1cmUgc2V1bGVtZW50CisgICAgICAgICAgVW1fcDEsICAg JiAhIHZpdGVzc2UgYXV4IG1haWxsZXMsIGRhbnMgbGVzIGRpcmVjdGlvbnMK KyAgICAgICAgICBVbV9wMiwgICAmICEgICAgICAgICAgICAgICAgICAgICAg b3J0aG9nb25hbGVzCisgICAgICAgICAgWGEsICAgICAgJiAhIGFic2Npc3Nl cyBkZXMgbm9ldWRzIGVuIGRlYnV0IGRlIHBhcyBkZSB0ZW1wcworICAgICAg ICAgIER4YSwgICAgICYgISBsb25ndWV1ciBkZXMgbWFpbGxlcyBlbiBkZWJ1 dCBkZSBwYXMgZGUgdGVtcHMKKyAgICAgICAgICBVX2R4YSAgICAgICEgaW52 ZXJzZXMgZGVzIGxvbmd1ZXVycyBkZXMgbWFpbGxlcworCisgZW5kIG1vZHVs ZSB0ZXN0bW9kCisKKworIHN1YnJvdXRpbmUgVEZfQURfU1BMSVRUSU5HX0RS SVZFUl9QTEFORQorCisgdXNlIHRlc3Rtb2QKKworIGltcGxpY2l0IG5vbmUK KyBzYXZlCisKKyAgICByZWFsKHI4KSwgYWxsb2NhdGFibGUsIGRpbWVuc2lv biggOikgOjogICYKKyAgICAgICAgICAhIFZhcmlhYmxlcyBtYWlsbGUgcmVj YWxjdWxlZXMgYSBjaGFxdWUgcGFzIGRlIHRlbXBzCisgICAgICAgICAgRWlz LCAgICAgJiAhIGVuZXJnaWUgaW50ZXJuZSBzcGVjaWZpcXVlIChzZXVsZW1l bnQgcG91ciBjYWxjdWxlciBsYSBwcmVzc2lvbikKKyAgICAgICAgICBWaXRf c29uLCAmICEgY29tbWUgc29uIG5vbSBsJ2luZGlxdWUKKyAgICAgICAgICBD X2ZfbCwgICAmICEgbm9tYnJlIGRlIENvdXJhbnQKKyAgICAgICAgICBQbSwg ICAgICAmICEgcHJlc3Npb24gYXV4IG1haWxsZXMKKyAgICAgICAgICAhIFZh cmlhYmxlcyBhdXggbm9ldWRzCisgICAgICAgICAgVW4sICAgICAgJiAhIHZp dGVzc2UgZGVzIG5vZXVkcworICAgICAgICAgIFBuICAgICAgICAgISBwcmVz c2lvbiBhdXggbm9ldWRzCisKKworIGludGVnZXIoaW50KSA6OiBpLCBqLCBr CisgaW50ZWdlcihpbnQpIDo6IGZpcnN0X2NlbGwsIGxhc3RfY2VsbAorCisg ICAgICAgICAgUm8gPT4gSHlkcm9fdmFycyggZmlyc3RfY2VsbDpsYXN0X2Nl bGwsIGosIGspJWNlbGxfdmFyKCByb192YXIpCisgICAgICAgICAgRXRzID0+ IEh5ZHJvX3ZhcnMoIGZpcnN0X2NlbGw6bGFzdF9jZWxsLCBqLCBrKSVjZWxs X3ZhciggZXRzX3ZhcikKKyAgICAgICAgICBVbSA9PiBIeWRyb192YXJzKCBm aXJzdF9jZWxsOmxhc3RfY2VsbCwgaiwgayklY2VsbF92YXIoIHVfdmFyKQor ICAgICAgICAgIFVtX3AxID0+IEh5ZHJvX3ZhcnMoIGZpcnN0X2NlbGw6bGFz dF9jZWxsLCBqLCBrKSVjZWxsX3ZhciggdXAxX3ZhcikKKyAgICAgICAgICBV bV9wMiA9PiBIeWRyb192YXJzKCBmaXJzdF9jZWxsOmxhc3RfY2VsbCwgaiwg ayklY2VsbF92YXIoIHVwMl92YXIpCisKKyBlbmQgc3Vicm91dGluZSBURl9B RF9TUExJVFRJTkdfRFJJVkVSX1BMQU5FCisKSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV8zLmY5MAo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3Bv aW50ZXJfYXJyYXlfMy5mOTAJKG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5XzMuZjkwCSh3b3JraW5n IGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDUxIC0t LS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0IHRoZSBmaXggZm9y IFBSNDA3MzcgY29tbWVudCAxNyBhcyBwYXJ0IG9mIHRoZSBvdmVyYWxsIGZp eCBmb3IgUFIzNDY0MC4KKyAhCisgISBDb250cmlidXRlZCBieSBKb3NoIEh5 a2VzICA8am9zaHVhaHlrZXNAeWFob28uY29tPgorICEKKyAgICBtb2R1bGUg dGVzdF9tb2QKKyAhCisgICAgdHlwZSB0MQorICAgICAgIGNoYXJhY3Rlcig4 KSAgOjogc3RyaW5nCisgICAgZW5kIHR5cGUgdDEKKyAhCisgICAgdHlwZSB0 MgorICAgICAgaW50ZWdlciA6OiB0YWIKKyAgICAgIHR5cGUodDEpLCBwb2lu dGVyIDo6IGZwKDopCisgICAgZW5kIHR5cGUgdDIKKyAhCisgICAgdHlwZSB0 MworICAgICAgIGludGVnZXIgOjogdGFiCisgICAgICAgdHlwZSh0MiksIHBv aW50ZXIgOjogYXMKKyAgICBlbmQgdHlwZSB0MworICEKKyAgICB0eXBlKHQz KSwgcG9pbnRlciA6OiBhc190eXAoOikgPT4gbnVsbCgpCisgIQorICAgIGNo YXJhY3Rlcig4KSwgIHBvaW50ZXIsIHB1YmxpYyA6OiBwKDopCisgIQorICAg IGNvbnRhaW5zCisgIQorICAgIHN1YnJvdXRpbmUgYXNfc2V0X2FsaWFzIChp KQorICEKKyAgICBpbXBsaWNpdCBub25lCisgIQorICAgIGludGVnZXIsIGlu dGVudChpbikgICAgOjogaQorICEKKyAgICAgIGFsbG9jYXRlIChhc190eXAo MikpCisgICAgICBhbGxvY2F0ZSAoYXNfdHlwKDEpJWFzKQorICAgICAgYWxs b2NhdGUgKGFzX3R5cCgxKSVhcyVmcCgyKSwgc291cmNlID0gW3QxKCJhYmNk ZWZnaCIpLHQxKCJpamtsbW5vcCIpXSkKKyAgICAgIHAgPT4gYXNfdHlwKGkp JWFzJWZwKDopJXN0cmluZworICEKKyAgICBlbmQgc3Vicm91dGluZSBhc19z ZXRfYWxpYXMKKyAhCisgICAgZW5kIG1vZHVsZSB0ZXN0X21vZAorCisgICAg cHJvZ3JhbSB0ZXN0X3Byb2cKKyAgICB1c2UgdGVzdF9tb2QKKyAgICBjYWxs IGFzX3NldF9hbGlhcygxKQorICAgIGlmIChhbnkgKHAgLm5lLiBbImFiY2Rl ZmdoIiwiaWprbG1ub3AiXSkpIGNhbGwgYWJvcnQKKyAgICBkZWFsbG9jYXRl IChhc190eXAoMSklYXMlZnApCisgICAgZGVhbGxvY2F0ZSAoYXNfdHlwKDEp JWFzKQorICAgIGRlYWxsb2NhdGUgKGFzX3R5cCkKKyAgICBlbmQgcHJvZ3Jh bSB0ZXN0X3Byb2cKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcv cG9pbnRlcl9hcnJheV80LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cioq KiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfNC5m OTAJKG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9wb2ludGVyX2FycmF5XzQuZjkwCSh3b3JraW5nIGNvcHkpCioqKioqKioq KioqKioqKgoqKiogMCAqKioqCi0tLSAxLDc1IC0tLS0KKyAhIHsgZGctZG8g cnVuIH0KKyAhCisgISBUZXN0IHRoZSBmaXggZm9yIFBSNTcxMTYgYXMgcGFy dCBvZiB0aGUgb3ZlcmFsbCBmaXggZm9yIFBSMzQ2NDAuCisgIQorICEgQ29u dHJpYnV0ZWQgYnkgUmVpbmhvbGQgQmFkZXIgIDxCYWRlckBscnouZGU+Cisg IQorIG1vZHVsZSBtb2RfcnR0aV9wdHIKKyAgIGltcGxpY2l0IG5vbmUKKyAg IHR5cGUgOjogZm9vCisgICAgICByZWFsIDo6IHYKKyAgICAgIGludGVnZXIg OjogaQorICAgZW5kIHR5cGUgZm9vCisgY29udGFpbnMKKyAgIHN1YnJvdXRp bmUgZXh0cmFjdCh0aGlzLCB2LCBpYykKKyAgICAgY2xhc3MoKiksIHRhcmdl dCA6OiB0aGlzKDopCisgICAgIHJlYWwsIHBvaW50ZXIgOjogdig6KQorICAg ICBpbnRlZ2VyIDo6IGljCisgICAgIHNlbGVjdCB0eXBlICh0aGlzKQorICAg ICB0eXBlIGlzIChyZWFsKQorICAgICAgICB2ID0+IHRoaXMoaWM6KQorICAg ICBjbGFzcyBpcyAoZm9vKQorICAgICAgICB2ID0+IHRoaXMoaWM6KSV2Cisg ICAgIGVuZCBzZWxlY3QKKyAgIGVuZCBzdWJyb3V0aW5lIGV4dHJhY3QKKyBl bmQgbW9kdWxlCisKKyBwcm9ncmFtIHByb2dfcnR0aV9wdHIKKyAgIHVzZSBt b2RfcnR0aV9wdHIKKyAgIGNsYXNzKCopLCBhbGxvY2F0YWJsZSwgdGFyZ2V0 IDo6IG8oOikKKyAgIHJlYWwsIHBvaW50ZXIgOjogdig6KQorCisgICBhbGxv Y2F0ZShvKDMpLCBzb3VyY2U9WzEuMCwgMi4wLCAzLjBdKQorICAgY2FsbCBl eHRyYWN0KG8sIHYsIDIpCisgICBpZiAoc2l6ZSh2KSA9PSAyIC5hbmQuIGFs bCAodiA9PSBbMi4wLCAzLjBdKSkgdGhlbgorICAgICAgZGVhbGxvY2F0ZShv KQorICAgZWxzZQorICAgICAgY2FsbCBhYm9ydAorICAgZW5kIGlmCisKKyAg IGFsbG9jYXRlKG8oMyksIHNvdXJjZT1bZm9vKDEuMCwgMSksIGZvbyg0LjAs IDQpLCBmb28oNS4wLCA1KV0pCisgICBjYWxsIGV4dHJhY3QobywgdiwgMikK KyAgIGlmIChzaXplKHYpID09IDIgLmFuZC4gYWxsICh2ID09IFs0LjAsIDUu MF0pKSB0aGVuCisgICAgICBkZWFsbG9jYXRlKG8pCisgICBlbHNlCisgICAg ICBjYWxsIGFib3J0CisgICBlbmQgaWYKKworICEgVGhlIHJlc3QgdGVzdHMg dGhlIGNhc2UgaW4gY29tbWVudCAyIDxqYW51c0BnY2MuZ251Lm9yZz4KKwor ICAgY2FsbCBleHRyYWN0MSAodiwgMSkKKyAgIGlmIChhbnkgKHYgLz0gWzEu MCwgMi4wXSkpIGNhbGwgYWJvcnQKKyAgIGNhbGwgZXh0cmFjdDEgKHYsIDIp ICAhIENhbGwgdG8gZGVhbGxvY2F0ZSBwb2ludGVyLgorCisgY29udGFpbnMK KyAgIHN1YnJvdXRpbmUgZXh0cmFjdDEodiwgZmxhZykKKyAgICAgdHlwZSA6 OiBmb28KKyAgICAgICAgcmVhbCA6OiB2CisgICAgICAgIGNoYXJhY3Rlcig0 KSA6OiBzdHIKKyAgICAgZW5kIHR5cGUKKyAgICAgY2xhc3MoZm9vKSwgcG9p bnRlciwgc2F2ZSA6OiB0aGlzKDopCisgICAgIHJlYWwsIHBvaW50ZXIgOjog dig6KQorICAgICBpbnRlZ2VyIDo6IGZsYWcKKworICAgICBpZiAoZmxhZyA9 PSAxKSB0aGVuCisgICAgICAgYWxsb2NhdGUgKHRoaXMoMiksIHNvdXJjZSA9 IFtmb28gKDEuMCwgIm9uZSAiKSwgZm9vICgyLjAsICJ0d28gIildKQorICAg ICAgIHNlbGVjdCB0eXBlICh0aGlzKQorICAgICAgICAgY2xhc3MgaXMgKGZv bykKKyAgICAgICAgICAgdiA9PiB0aGlzKDE6MikldgorICAgICAgIGVuZCBz ZWxlY3QKKyAgICAgZWxzZQorICAgICAgIGRlYWxsb2NhdGUgKHRoaXMpCisg ICAgIGVuZCBpZgorICAgZW5kIHN1YnJvdXRpbmUKKworIGVuZCBwcm9ncmFt IHByb2dfcnR0aV9wdHIKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvcG9pbnRlcl9hcnJheV81LmY5MAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 CioqKiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlf NS5mOTAJKG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9wb2ludGVyX2FycmF5XzUuZjkwCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDY1IC0tLS0KKyAhIHsgZGct ZG8gcnVuIH0KKyAhCisgISBUZXN0IHRoZSBmaXggZm9yIFBSNTU3NjMgY29t bWVudCA5IGFzIHBhcnQgb2YgdGhlIG92ZXJhbGwgZml4IGZvciBQUjM0NjQw LgorICEKKyAhIENvbnRyaWJ1dGVkIGJ5IFRvYmlhcyBCdXJudXMgIDxidXJu dXNAZ2NjLmdudS5vcmc+CisgIQorICAgcHJvZ3JhbSBjaGFuZ2VfZmllbGRf dHlwZQorICAgICB1c2UsIGludHJpbnNpYyA6OiBpc29fY19iaW5kaW5nCisg ICAgIGltcGxpY2l0IG5vbmUKKyAgICAgUkVBTChraW5kPWNfZmxvYXQpLCBQ T0lOVEVSIDo6IHZlY3Rvcl9jb21wKDopCisgICAgIFRZUEUsIEJJTkQoQykg Ojogc2NhbGFyX3ZlY3RvcgorICAgICAgICBSRUFMKGtpbmQ9Y19mbG9hdCkg Ojogc2NhbGFyCisgICAgICAgIFJFQUwoa2luZD1jX2Zsb2F0KSA6OiB2ZWMo MykKKyAgICAgRU5EIFRZUEUKKyAgICAgVFlQRSwgQklORChDKSA6OiBzY2Fs YXJfdmVjdG9yX21hdHJpeAorICAgICAgICBSRUFMKGtpbmQ9Y19mbG9hdCkg Ojogc2NhbGFyCisgICAgICAgIFJFQUwoa2luZD1jX2Zsb2F0KSA6OiB2ZWMo MykKKyAgICAgICAgUkVBTChraW5kPWNfZmxvYXQpIDo6IG1hdCgzLDMpCisg ICAgIEVORCBUWVBFCisgICAgIENMQVNTKCopLCBBTExPQ0FUQUJMRSwgVEFS R0VUIDo6IG9uZV9kX2ZpZWxkKDopCisgICAgIHJlYWwsIHBvaW50ZXIgOjog djEoOikKKworICAgICBhbGxvY2F0ZShvbmVfZF9maWVsZCgzKSwgJgorICAg ICAgICAgICAgICBzb3VyY2UgPSAoLyBzY2FsYXJfdmVjdG9yKCAxLjAsICgv IC0xLjAsIDAuMCwgMS4wIC8pICksICYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgc2NhbGFyX3ZlY3RvciggMS4xLCAoLyAtMS4yLCAwLjIsIDAuOSAv KSApLCAmCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNjYWxhcl92ZWN0 b3IoIDEuMiwgKC8gLTEuNCwgMC40LCAwLjggLykgKSAgLykgKQorCisgICAg IGNhbGwgZXh0cmFjdF92ZWMob25lX2RfZmllbGQsIDEsIDIpCisgICAgIGlm IChhbnkgKGFicyAodmVjdG9yX2NvbXAgLSBbMC4wLDAuMiwwLjRdKSAuZ3Qu IDFlLTQpKSBjYWxsIGFib3J0CisgICAgIGRlYWxsb2NhdGUob25lX2RfZmll bGQpICAgISB2MSBiZWNvbWVzIHVuZGVmaW5lZAorCisgICAgIGFsbG9jYXRl KG9uZV9kX2ZpZWxkKDEpLCAmCisgICAgICAgICAgc291cmNlID0gKC8gc2Nh bGFyX3ZlY3Rvcl9tYXRyaXgoIDEuMCwgKC8gLTEuMCwgMC4wLCAxLjAgLyks ICYKKyAgICAgICAgICByZXNoYXBlKCAoLyAxLjAsIDAuMCwgMC4wLCAwLjAs IDEuMCwgMC4wLCAwLjAsIDAuMCwgMS4wIC8pLCAmCisgICAgICAgICAgICAg ICAgICAoLzMsIDMvKSApICkgLykgKQorCisgICAgIGNhbGwgZXh0cmFjdF92 ZWMob25lX2RfZmllbGQsIDIsIDEpCisgICAgIGlmIChhYnMgKHZlY3Rvcl9j b21wKDEpICsgMS4wKSA+IDFlLTQpIGNhbGwgYWJvcnQKKyAgICAgY2FsbCBl eHRyYWN0X3ZlYyhvbmVfZF9maWVsZCwgMiwgMykKKyAgICAgaWYgKGFicyAo dmVjdG9yX2NvbXAoMSkgLSAxLjApID4gMWUtNCkgY2FsbCBhYm9ydAorICAg ICBkZWFsbG9jYXRlKG9uZV9kX2ZpZWxkKSAgICEgdjEgYmVjb21lcyB1bmRl ZmluZWQKKyAgIGNvbnRhaW5zCisgICAgIHN1YnJvdXRpbmUgZXh0cmFjdF92 ZWMoZmllbGQsIHRhZywgaWMpCisgICAgICAgICB1c2UsIGludHJpbnNpYyA6 OiBpc29fY19iaW5kaW5nCisgICAgICAgICBDTEFTUygqKSwgVEFSR0VUIDo6 IGZpZWxkKDopCisgICAgICAgICBJTlRFR0VSKGtpbmQ9Y19pbnQpLCB2YWx1 ZSA6OiB0YWcsIGljCisKKyAgICAgICAgIHR5cGUoc2NhbGFyX3ZlY3Rvciks IHBvaW50ZXIgOjogc3YoOikKKyAgICAgICAgIHR5cGUoc2NhbGFyX3ZlY3Rv cl9tYXRyaXgpLCBwb2ludGVyIDo6IHN2bSg6KQorCisgICAgICAgICBzZWxl Y3QgdHlwZSAoZmllbGQpCisgICAgICAgICB0eXBlIGlzIChyZWFsKGNfZmxv YXQpKQorICAgICAgICAgICB2ZWN0b3JfY29tcCA9PiBmaWVsZAorICAgICAg ICAgY2xhc3MgZGVmYXVsdAorICAgICAgICAgICBzZWxlY3QgY2FzZSAodGFn KQorICAgICAgICAgICBjYXNlICgxKQorICAgICAgICAgICAgICBzdiA9PiBm aWVsZAorICAgICAgICAgICAgICB2ZWN0b3JfY29tcCA9PiBzdig6KSV2ZWMo aWMpCisgICAgICAgICAgIGNhc2UgKDIpCisgICAgICAgICAgICAgIHN2bSA9 PiBmaWVsZAorICAgICAgICAgICAgICB2ZWN0b3JfY29tcCA9PiBzdm0oOikl dmVjKGljKQorICAgICAgICAgICBlbmQgc2VsZWN0CisgICAgICAgICBlbmQg c2VsZWN0CisgICAgIGVuZCBzdWJyb3V0aW5lCisgICBlbmQgcHJvZ3JhbQpJ bmRleDogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5 XzYuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV82LmY5MAkobm9uZXhpc3Rl bnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJy YXlfNi5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqCioqKiAw ICoqKioKLS0tIDEsMjggLS0tLQorICEgeyBkZy1kbyBydW4gfQorICEKKyAh IFRlc3QgdGhlIGZpeCBmb3IgUFI1NzAxOSBjb21tZW50IDQgYXMgcGFydCBv ZiB0aGUgb3ZlcmFsbCBmaXggZm9yIFBSMzQ2NDAuCisgIQorICEgQ29udHJp YnV0ZWQgYnkgIDx0aGFtYnN1cEBnbWFpbC5jb20+CisgIQorICAgdHlwZSBj UGFydGljbGUKKyAgICAgcmVhbCg0KSA6OiB2KDMpCisgICBlbmR0eXBlIGNQ YXJ0aWNsZQorCisgICB0eXBlIHBDSXRlbQorICAgICB0eXBlKGNQYXJ0aWNs ZSkgOjogRWxlCisgICBlbmQgdHlwZSBwQ0l0ZW0KKworICAgdHlwZShwQ0l0 ZW0pLCB0YXJnZXQsIGRpbWVuc2lvbigxOjEsMToxKSA6OiBwQ2VsbEFycmF5 CisgICB0eXBlKGNQYXJ0aWNsZSksIHBvaW50ZXIsIGRpbWVuc2lvbig6LDop IDo6IHBBcnJheQorICAgcmVhbCg0KSwgcG9pbnRlciwgZGltZW5zaW9uKDop IDo6IHZfcG9pbnRlcgorICAgcmVhbCg0KSwgZGltZW5zaW9uKDMpIDo6IHZf cmVhbCA9IDk5LgorCisgICBwQXJyYXkgPT4gcENlbGxBcnJheSVFbGUKKyAg IHZfcG9pbnRlciA9PiBwQXJyYXkoMSwxKSV2OworICAgdl9wb2ludGVyID0g dl9yZWFsICFPSyAlJSUlJSUlJSUlJSUKKyAgIGlmIChhbnkgKGludCAocEFy cmF5KDEsMSkldikgLm5lLiA5OSkpIGNhbGwgYWJvcnQKKworICAgdl9yZWFs ID0gODgKKyAgIHBBcnJheSgxLDEpJXYgPSB2X3JlYWwgIVNFR0ZBVUxUICUl JSUlJSUlJSUlJSUlJSUlJSUlJSUlJQorICAgaWYgKGFueSAoaW50ICh2X3Bv aW50ZXIpIC5uZS4gODgpKSBjYWxsIGFib3J0CisgZW5kCkluZGV4OiBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfY29tcG9uZW50 XzEuZjkwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9hcnJheV9jb21wb25lbnRfMS5mOTAJ KG5vbmV4aXN0ZW50KQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9w b2ludGVyX2FycmF5X2NvbXBvbmVudF8xLmY5MAkod29ya2luZyBjb3B5KQoq KioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw0NyAtLS0tCisgISB7 IGRnLWRvIHJ1biB9CisgIQorICEgQ2hlY2sgdGhlIGZpeCBmb3IgUFIzNDY0 MCBjb21tZW50IDI4LgorICEKKyAhIFRoaXMgaW52b2x2ZXMgcG9pbnRlciBh cnJheSBjb21wb25lbnRzIHRoYXQgcG9pbnQgdG8gY29tcG9uZW50cyBvZiBh cnJheXMKKyAhIG9mIGRlcml2ZWQgdHlwZXMuCisgIQorICAgdHlwZSB2YXJf dGFibGVzCisgICAgICByZWFsLCBwb2ludGVyIDo6IHJ2YXIoOikKKyAgIGVu ZCB0eXBlCisKKyAgIHR5cGUgcmVhbF92YXJzCisgICAgICByZWFsIHIKKyAg ICAgIHJlYWwgOjogaW5kZXgKKyAgIGVuZCB0eXBlCisKKyAgIHR5cGUodmFy X3RhYmxlcykgOjogIHZ0YWJfcgorICAgdHlwZShyZWFsX3ZhcnMpLCAgdGFy Z2V0IDo6IHgoMikKKyAgIHJlYWwsIHBvaW50ZXIgOjogeig6KQorICAgcmVh bCA6OiB5KDIpCisKKyAgIHggPSBbcmVhbF92YXJzICgxMS4wLCAxLjApLCBy ZWFsX3ZhcnMgKDQyLjAsIDIuMCldCisgICB2dGFiX3IlcnZhciA9PiB4JXIK KyAgIGlmIChhbnkgKGFicyAodnRhYl9yJXJ2YXIgLSBbMTEuMCwgNDIuMF0p ID4gMS4wZS01KSkgY2FsbCBhYm9ydCAgISBDaGVjayBza2lwcGluZyAnaW5k ZXg7IGlzIE9LLgorCisgICB5ID0gdnRhYl9yJXJ2YXIKKyAgIGlmIChhbnkg KGFicyAoeSAtIFsxMS4wLCA0Mi4wXSkgPiAxLjBlLTUpKSBjYWxsIGFib3J0 ICAhIENoZWNrIHRoYXQgdGhlIGNvbXBvbmVudCBpcyB1c2FibGUgaW4gYXNz aWdubWVudC4KKworICAgY2FsbCBmb29iYXIgKHZ0YWJfciwgWzExLjAsIDQy LjBdKQorCisgICB2dGFiX3IgPSBiYXJmb28gKCkKKworICAgY2FsbCBmb29i YXIgKHZ0YWJfciwgWzExMS4wLCAxNDIuMF0pCisKKyBjb250YWlucworICAg c3Vicm91dGluZSBmb29iYXIgKHZ0YWIsIGFycmF5KQorICAgICB0eXBlKHZh cl90YWJsZXMpIDo6ICB2dGFiCisgICAgIHJlYWwgOjogYXJyYXkgKDopCisg ICAgIGlmIChhbnkgKGFicyAodnRhYiVydmFyIC0gYXJyYXkpID4gMS4wZS01 KSkgY2FsbCBhYm9ydCAgISBDaGVjayBwYXNzaW5nIGFzIGEgZHVtbXkuCisg ICAgIGlmIChhYnMgKHZ0YWIlcnZhcigyKSAtIGFycmF5KDIpKSA+IDEuMGUt NSkgY2FsbCBhYm9ydCAgISBDaGVjayBjb21wb25lbnQgcmVmZXJlbmNlLgor ICAgZW5kIHN1YnJvdXRpbmUKKworICAgZnVuY3Rpb24gYmFyZm9vICgpIHJl c3VsdChyZXMpCisgICAgIHR5cGUodmFyX3RhYmxlcykgOjogIHJlcworICAg ICBhbGxvY2F0ZSAocmVzJXJ2YXIoMiksIHNvdXJjZSA9IFsxMTEuMCwgMTQy LjBdKSAgISBDaGVjayBhbGxvY2F0aW9uCisgICBlbmQgZnVuY3Rpb24KKyBl bmQKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcG9pbnRlcl9h cnJheV9jb21wb25lbnRfMi5mOTAKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoq KiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9wb2ludGVyX2FycmF5X2Nv bXBvbmVudF8yLmY5MAkobm9uZXhpc3RlbnQpCi0tLSBnY2MvdGVzdHN1aXRl L2dmb3J0cmFuLmRnL3BvaW50ZXJfYXJyYXlfY29tcG9uZW50XzIuZjkwCSh3 b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAx LDQzIC0tLS0KKyAhIHsgZGctZG8gcnVuIH0KKyAhCisgISBUZXN0IHRoZSBm aXggZm9yIFBSMzQ2NDAuIEluIHRoZSBmaXJzdCB2ZXJzaW9uIG9mIHRoZSBm aXgsIHRoZSBmaXJzdAorICEgdGVzdGNhc2UgaW4gUFI1MTIxOCBmYWlsZWQg d2l0aCBhIHNlZ2ZhdWx0LiBUaGlzIHRlc3QgZXh0cmFjdHMgdGhlCisgISBm YWlsaW5nIHBhcnQgYW5kIGNoZWNrcyB0aGF0IGFsbCBpcyB3ZWxsLgorICEK KyAgIHR5cGUgdF9pbmZvX2Jsb2NrCisgICAgIGludGVnZXIgICAgICAgICAg ICAgICAgICAgICAgOjogbiAgICAgPSAgMCAgICAgICEgbnVtYmVyIG9mIGVs ZW1lbnRzCisgICBlbmQgdHlwZSB0X2luZm9fYmxvY2sKKyAgICEKKyAgIHR5 cGUgdF9kZWNfaW5mbworICAgICBpbnRlZ2VyICAgICAgICAgICAgICAgICAg ICAgIDo6IG4gICAgID0gIDAgICAgICAhIG51bWJlciBvZiBlbGVtZW50cwor ICAgICBpbnRlZ2VyICAgICAgICAgICAgICAgICAgICAgIDo6IG5fYiAgID0g IDAgICAgICAhIG51bWJlciBvZiBibG9ja3MKKyAgICAgdHlwZSAodF9pbmZv X2Jsb2NrKSAscG9pbnRlciA6OiBiICg6KSA9PiBOVUxMKCkgISBpbmZvIGJs b2NrcworICAgZW5kIHR5cGUgdF9kZWNfaW5mbworICAgIQorICAgdHlwZSB0 X3ZlY3Rvcl9zZWdtCisgICAgIGludGVnZXIgICAgICAgICAgIDo6IG4gICAg PSAgMCAgICAgICEgbnVtYmVyIG9mIGVsZW1lbnRzCisgICAgIHJlYWwgLHBv aW50ZXIgOjogeCg6KSA9PiBOVUxMKCkgISBjb2VmZmljaWVudHMKKyAgIGVu ZCB0eXBlIHRfdmVjdG9yX3NlZ20KKyAgICEKKyAgIHR5cGUgdF92ZWN0b3IK KyAgICAgdHlwZSAodF9kZWNfaW5mbykgICAgLHBvaW50ZXIgOjogaW5mbyAg ICA9PiBOVUxMKCkgICEgZGVjb21wb3NpdGlvbiBpbmZvCisgICAgIGludGVn ZXIgICAgICAgICAgICAgICAgICAgICAgIDo6IG4gICAgICAgPSAgMCAgICAg ICAhIG51bWJlciBvZiBlbGVtZW50cworICAgICBpbnRlZ2VyICAgICAgICAg ICAgICAgICAgICAgICA6OiBuX3MgICAgID0gIDAgICAgICAgISBudW1iZXIg b2Ygc2VnbWVudHMKKyAgICAgaW50ZWdlciAgICAgICAgICAgICAgICAgICAg ICAgOjogYWxsb2NfbCA9ICAwICAgICAgICEgYWxsb2NhdGlvbiBsZXZlbAor ICAgICB0eXBlICh0X3ZlY3Rvcl9zZWdtKSAscG9pbnRlciA6OiBzICg6KSAg ID0+IE5VTEwoKSAgISB2ZWN0b3IgYmxvY2tzCisgICBlbmQgdHlwZSB0X3Zl Y3RvcgorCisKKyAgIHR5cGUodF92ZWN0b3IpIDo6IHoKKyAgIHR5cGUodF92 ZWN0b3Jfc2VnbSksIHBvaW50ZXIgOjogc3MKKworICAgYWxsb2NhdGUgKHol cygyKSkKKyAgIGRvIGkgPSAxLCAyCisgICAgIHNzID0+IHolcyhpKQorICAg ICBhbGxvY2F0ZSAoc3MleCgyKSwgc291cmNlID0gWzEuMCwgMi4wXSpyZWFs KGkpKQorICAgZW5kIGRvCisKKyAhIFRoZXNlIGxpbmVzIHdvdWxkIHNlZ2Zh dWx0LgorICAgaWYgKGludCAoc3VtICh6JXMoMSkleCkpIC5uZS4gMykgY2Fs bCBhYm9ydAorICAgaWYgKGludCAoc3VtICh6JXMoMSkleCAqIHolcygyKSV4 KSkgLm5lLiAxMCkgY2FsbCBhYm9ydAorIGVuZAo= --f403045c67c649fe5c0552b2742e--