Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vBmq9-0059EX-Jx for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 04:22:17 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vBmq8-00401n-Gl for pgsql-hackers@arkaria.postgresql.org; Thu, 23 Oct 2025 04:22:15 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vBmq7-00401J-UA for pgsql-hackers@lists.postgresql.org; Thu, 23 Oct 2025 04:22:15 +0000 Received: from mail-vs1-xe32.google.com ([2607:f8b0:4864:20::e32]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vBmq5-003HJi-0Z for pgsql-hackers@postgresql.org; Thu, 23 Oct 2025 04:22:14 +0000 Received: by mail-vs1-xe32.google.com with SMTP id ada2fe7eead31-5db221488bfso387945137.1 for ; Wed, 22 Oct 2025 21:22:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761193331; x=1761798131; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6MtWw2nWTuxlO2B4uymMF5SNpzwr9PHxDWzrMXnqF0U=; b=Bihe/oLTCHOWeLITCMv7hwro3QhrfdpaflKlXE45ltVPSmzq00B1QDWg+gMyOE/hXw FN6CVRn9MxCyjlf8MHNb5EQsZ2zpIDduVKXXps/UHAj93mNdJoqCt8Y1ztEsvARU6RMo Gb/kG1F6jWZkRSX8iT+NA41DzFb+Ff8z4qqHN5jUVNcATxWCvqel3AW2isllkzEJ/+Sm 0ELGGR1QKPKoMQ2MSwbwNIDsCe0K05jPUhuLIARYEc9UDEC97f5OOie2c+WhjvHA5gvj YUS1dpHOqmIkwORKWm3/32Cxi6JW/dB+DY3EgVoQg01hyu8p8KbbBF9ubD+/J4hJPRYd mOZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761193331; x=1761798131; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=6MtWw2nWTuxlO2B4uymMF5SNpzwr9PHxDWzrMXnqF0U=; b=JOTRHy41rgDubJmbRyTgch8EB+SAN0NZ1/DYsQf8Hq66KmtEO4xw1yh8E45gVyzQ+1 NDrSDQXVup+BuDix5o3GDfQyUtPyAlw1/mGSSMtYSu3v+QL7bePrpRFEqhdb4wg+3Hl8 0sEOfzmLwsBoN+O+cmVzJ58fvFC/HC0iMOo21rdiQKqNvOVF3HA8xAS/Qqk73HzEM4j0 fTps4SODqFxZfQTAgBUS29O5cvlMtf5gErufbr4ZmK0ox8mfgd+8kvvFkOVRPtTgQeSq 7lPIkPd9t0ilW7B2zlBSZYA+0qotwY1Q6mMjO9XnNIMozOBGTaHzmyvE7OWMTTYJw48B y6XA== X-Gm-Message-State: AOJu0YyM5oO0cYHBm03R9NPAJF5iUcoTsAmjodR6RKmnR1vQMutOjawF 9xRrKHKz6iMoQgN7UQTFw4owcipFgrpqIAGuIeS74A/dm3UL+SRGIdBZXQTdpEQkLLdVx4l75at dZCvKkSFxaV79uOUwUauQXM/kDOsenao= X-Gm-Gg: ASbGncuXrV3n2u+waCe5zCFG3NY8nI1HHed96zWMTw6vcbTmNXrzR8eERWtlNJ+Fx9g qUyrSreEoLSAwin6mzWX2McV79yBnjHIkA1DUfbGhJT9pCKJp1XVfz+ZJELItCQ6Z5AWZyovBxy zCkH4tY7pKF72nY+AcI15YE1RoBgJcd3yYWraFRWtyuUmPr2hS0WbvdNZ8i6+2j0d/Kz+Jrit27 TWZWc41sq3oGi/PpFNFax7bAQqdOWMDdak1BF815G04sbldBSTvJp/v/aoGMMmdfRheJD77sthG /5jgJeSNx/V8QyqNVYpu9PmfSW7C3zKVtm7VpJf9a1RkJa0xVV81MXi1Y123m+qAfPipVysFdo/ MGMwy4/w3zwJuvh+KD2LB6sCJAK9NpIHZX2Kz2yprUvZEqUrfrsMw2ctS+90Snnr88OA7PNI0tG sOnA== X-Google-Smtp-Source: AGHT+IFT6gJEcVOLks3elNjqXmol56O8BDtmVlqJ2eTR1Z2J1HhZhymkFxJvt+9bPqaXJLeqtkFBqljMeNPvu3IGad0= X-Received: by 2002:a05:6102:1454:20b0:5d7:de7d:1dd with SMTP id ada2fe7eead31-5d7de7d1c79mr5959173137.6.1761193331397; Wed, 22 Oct 2025 21:22:11 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: jian he Date: Thu, 23 Oct 2025 12:21:34 +0800 X-Gm-Features: AWmQ_blnt_d0zUD3k1kAWoZAdzTZSUzC6tKXPWunPo6BMF1mNvGJdoxreb8H1hE Message-ID: Subject: Re: [PATCH] pg_get_domain_ddl: DDL reconstruction function for CREATE DOMAIN statement To: Tim Waizenegger Cc: pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000e6326b0641cbc6a1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000e6326b0641cbc6a1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Oct 22, 2025 at 5:32=E2=80=AFPM Tim Waizenegger wrote: > > updated patch is attached > I=E2=80=99ve done some refactoring, hope it=E2=80=99s now more intuitive to= you. Since a domain=E2=80=99s base type can itself be another domain, it=E2=80= =99s better to use appendStringInfo(&buf, "CREATE DOMAIN %s AS %s", generate_qualified_type_name(domain_oid), generate_qualified_type_name(typForm->typbasetype)); then the domain's base type is also fully qualified. I also refactored the logic for printing domain constraints, which should r= educe syscache lookups or table scans compared to your version. please check the attached. --000000000000e6326b0641cbc6a1 Content-Type: application/octet-stream; name="v2-0001-refactor-pg_get_domain_ddl.no-cfbot" Content-Disposition: attachment; filename="v2-0001-refactor-pg_get_domain_ddl.no-cfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh2x0f2l0 RnJvbSA4YTBjZjMyNmNhOWU3OWFmN2EzMjljYzU4NDUwM2Y4NjFlY2I1ODZlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IFRodSwgMjMgT2N0IDIwMjUgMTI6MTA6NDAgKzA4MDAKU3ViamVjdDogW1BBVENIIHYy IDEvMV0gcmVmYWN0b3IgcGdfZ2V0X2RvbWFpbl9kZGwKCmRpc2N1c3Npb246IGh0dHBzOi8vcG9z dGdyLmVzL20vQ0FQZ3FNMVY0TFcycWlETFBzdXNiN3Mwa1liU0RKakg1VHQrLVp6Vm1QVTd4VjBU Sk5RQG1haWwuZ21haWwuY29tCi0tLQogZG9jL3NyYy9zZ21sL2Z1bmMvZnVuYy1pbmZvLnNnbWwg ICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAg ICB8IDIxNyArKysrKysrKystLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9vYmplY3RfZGRsLm91dCB8ICA5OCArKysrKy0tLS0tCiAzIGZpbGVzIGNoYW5nZWQsIDEzOCBp bnNlcnRpb25zKCspLCAxODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2Z1bmMvZnVuYy1pbmZvLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZnVuYy9mdW5jLWluZm8uc2dtbApp bmRleCA5YTkzN2RmOTYwZC4uOWM3NmExZTg5ODYgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9m dW5jL2Z1bmMtaW5mby5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9mdW5jL2Z1bmMtaW5mby5zZ21s CkBAIC0zODI3LDggKzM4MjcsOCBAQCBhY2wgICAgICB8IHtwb3N0Z3Jlcz1hcndkRHh0bS9wb3N0 Z3Jlcyxmb289ci9wb3N0Z3Jlc30KICAgICAgICAgPGluZGV4dGVybT4KICAgICAgICAgIDxwcmlt YXJ5PnBnX2dldF9kb21haW5fZGRsPC9wcmltYXJ5PgogICAgICAgICA8L2luZGV4dGVybT4KLSAg ICAgICAgPGZ1bmN0aW9uPnBnX2dldF9kb21haW5fZGRsPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVy PmRvbWFpbjwvcGFyYW1ldGVyPiA8dHlwZT50ZXh0PC90eXBlPiApCi0gICAgICAgIDxyZXR1cm52 YWx1ZT5yZWd0eXBlPC9yZXR1cm52YWx1ZT4KKyAgICAgICAgPGZ1bmN0aW9uPnBnX2dldF9kb21h aW5fZGRsPC9mdW5jdGlvbj4gKCA8cGFyYW1ldGVyPmRvbWFpbjwvcGFyYW1ldGVyPiA8dHlwZT5y ZWd0eXBlPC90eXBlPiApCisgICAgICAgIDxyZXR1cm52YWx1ZT50ZXh0PC9yZXR1cm52YWx1ZT4K ICAgICAgICA8L3BhcmE+CiAgICAgICAgPHBhcmE+CiAgICAgICAgIFJlY29uc3RydWN0cyB0aGUg Y3JlYXRpbmcgY29tbWFuZCBmb3IgYSBkb21haW4uCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK aW5kZXggYjJkNjkzNWNiYmMuLmIwMzM2ODBlN2Y4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCkBAIC0xMzc0MSwyMSArMTM3NDEsNzIgQEAgZ2V0X3JhbmdlX3BhcnRib3VuZF9zdHJpbmco TGlzdCAqYm91bmRfZGF0dW1zKQogCiAKIC8qCi0gKiBIZWxwZXIgZnVuY3Rpb24gdG8gc2NhbiBk b21haW4gY29uc3RyYWludHMKKyAqIHBnX2dldF9kb21haW5fZGRsIC0gR2V0IENSRUFURSBET01B SU4gc3RhdGVtZW50IGZvciBhIGRvbWFpbgogICovCi1zdGF0aWMgdm9pZAotc2Nhbl9kb21haW5f Y29uc3RyYWludHMoT2lkIGRvbWFpbl9vaWQsIExpc3QgKip2YWxpZGNvbnMsIExpc3QgKippbnZh bGlkY29ucykKK0RhdHVtCitwZ19nZXRfZG9tYWluX2RkbChQR19GVU5DVElPTl9BUkdTKQogewor CVN0cmluZ0luZm9EYXRhIGJ1ZjsKKwlTdHJpbmdJbmZvRGF0YSBjb25zdHJfYnVmOworCU9pZAkJ CWRvbWFpbl9vaWQgPSBQR19HRVRBUkdfT0lEKDApOworCUhlYXBUdXBsZQl0eXBlVHVwbGU7CisJ SGVhcFR1cGxlCWJhc2VUeXBlVHVwbGU7CisJRm9ybV9wZ190eXBlIHR5cEZvcm07CisJRm9ybV9w Z190eXBlIGJhc2VUeXBlRm9ybTsKKwlPaWQJCQliYXNlQ29sbGF0aW9uID0gSW52YWxpZE9pZDsK KwlOb2RlCSAgICpkZWZhdWx0RXhwcjsKIAlSZWxhdGlvbgljb25zdHJhaW50UmVsOwogCVN5c1Nj YW5EZXNjIHNzY2FuOwogCVNjYW5LZXlEYXRhIHNrZXk7CiAJSGVhcFR1cGxlCWNvbnN0cmFpbnRU dXA7CiAKLQkqdmFsaWRjb25zID0gTklMOwotCSppbnZhbGlkY29ucyA9IE5JTDsKKwkvKiBMb29r IHVwIHRoZSBkb21haW4gaW4gcGdfdHlwZSAqLworCXR5cGVUdXBsZSA9IFNlYXJjaFN5c0NhY2hl MShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKGRvbWFpbl9vaWQpKTsKKwlpZiAoIUhlYXBUdXBs ZUlzVmFsaWQodHlwZVR1cGxlKSkKKwkJUEdfUkVUVVJOX05VTEwoKTsKKworCS8qIEJ1aWxkIHRo ZSBEREwgc3RhdGVtZW50ICovCisJaW5pdFN0cmluZ0luZm8oJmJ1Zik7CisJaW5pdFN0cmluZ0lu Zm8oJmNvbnN0cl9idWYpOworCisJdHlwRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVCh0 eXBlVHVwbGUpOworCisJYXBwZW5kU3RyaW5nSW5mbygmYnVmLCAiQ1JFQVRFIERPTUFJTiAlcyBB UyAlcyIsCisJCQkJCSBnZW5lcmF0ZV9xdWFsaWZpZWRfdHlwZV9uYW1lKGRvbWFpbl9vaWQpLAor CQkJCQkgZ2VuZXJhdGVfcXVhbGlmaWVkX3R5cGVfbmFtZSh0eXBGb3JtLT50eXBiYXNldHlwZSkp OworCisJLyogQWRkIGNvbGxhdGlvbiBpZiBpdCBkaWZmZXJzIGZyb20gYmFzZSB0eXBlJ3MgY29s bGF0aW9uICovCisJaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKKwl7CisJ CS8qIEdldCBiYXNlIHR5cGUncyBjb2xsYXRpb24gZm9yIGNvbXBhcmlzb24gKi8KKwkJYmFzZVR5 cGVUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKHR5cEZv cm0tPnR5cGJhc2V0eXBlKSk7CisKKwkJQXNzZXJ0KEhlYXBUdXBsZUlzVmFsaWQoYmFzZVR5cGVU dXBsZSkpOworCisJCWJhc2VUeXBlRm9ybSA9IChGb3JtX3BnX3R5cGUpIEdFVFNUUlVDVChiYXNl VHlwZVR1cGxlKTsKKwkJYmFzZUNvbGxhdGlvbiA9IGJhc2VUeXBlRm9ybS0+dHlwY29sbGF0aW9u OworCisJCVJlbGVhc2VTeXNDYWNoZShiYXNlVHlwZVR1cGxlKTsKKworCQkvKiBPbmx5IGFkZCBD T0xMQVRFIGlmIGRvbWFpbidzIGNvbGxhdGlvbiBkaWZmZXJzIGZyb20gYmFzZSB0eXBlJ3MgKi8K KwkJaWYgKHR5cEZvcm0tPnR5cGNvbGxhdGlvbiAhPSBiYXNlQ29sbGF0aW9uKQorCQkJYXBwZW5k U3RyaW5nSW5mbygmYnVmLCAiIENPTExBVEUgJXMiLAorCQkJCQkJCSBnZW5lcmF0ZV9jb2xsYXRp b25fbmFtZSh0eXBGb3JtLT50eXBjb2xsYXRpb24pKTsKKwl9CisKKwkvKiBHZXQgZGVmYXVsdCBl eHByZXNzaW9uICovCisJZGVmYXVsdEV4cHIgPSBnZXRfdHlwZGVmYXVsdChkb21haW5fb2lkKTsK KworCS8qIEFkZCBkZWZhdWx0IHZhbHVlIGlmIHByZXNlbnQgKi8KKwlpZiAoZGVmYXVsdEV4cHIg IT0gTlVMTCkKKwl7CisJCWNoYXIgKmRlZmF1bHRWYWx1ZSA9IGRlcGFyc2VfZXhwcmVzc2lvbl9w cmV0dHkoZGVmYXVsdEV4cHIsIE5JTCwKKwkJCQkJCQkJCQkJCQkgICBmYWxzZSwgZmFsc2UsIDAs IDApOworCisJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiBERUZBVUxUICVzIiwgZGVmYXVsdFZh bHVlKTsKKwl9CiAKIAljb25zdHJhaW50UmVsID0gdGFibGVfb3BlbihDb25zdHJhaW50UmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKLQogCVNjYW5LZXlJbml0KCZza2V5LAogCQkJCUFudW1f cGdfY29uc3RyYWludF9jb250eXBpZCwKIAkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfT0lE RVEsCkBAIC0xMzc3MCwxNDQgKzEzODIxLDUwIEBAIHNjYW5fZG9tYWluX2NvbnN0cmFpbnRzKE9p ZCBkb21haW5fb2lkLCBMaXN0ICoqdmFsaWRjb25zLCBMaXN0ICoqaW52YWxpZGNvbnMpCiAKIAl3 aGlsZSAoSGVhcFR1cGxlSXNWYWxpZChjb25zdHJhaW50VHVwID0gc3lzdGFibGVfZ2V0bmV4dChz c2NhbikpKQogCXsKKwkJY2hhcgkgICAqY29uc3RyYWludERlZjsKKwogCQlGb3JtX3BnX2NvbnN0 cmFpbnQgY29uID0gKEZvcm1fcGdfY29uc3RyYWludCkgR0VUU1RSVUNUKGNvbnN0cmFpbnRUdXAp OwogCiAJCWlmIChjb24tPmNvbnZhbGlkYXRlZCkKLQkJCSp2YWxpZGNvbnMgPSBsYXBwZW5kX29p ZCgqdmFsaWRjb25zLCBjb24tPm9pZCk7CisJCXsKKwkJCWNvbnN0cmFpbnREZWYgPSBwZ19nZXRf Y29uc3RyYWludGRlZl93b3JrZXIoY29uLT5vaWQsIGZhbHNlLAorCQkJCQkJCQkJCQkJCQlQUkVU VFlGTEFHX1BBUkVOLAorCQkJCQkJCQkJCQkJCQl0cnVlKTsKKwkJCWlmIChjb25zdHJhaW50RGVm KQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmJ1ZiwgIiBDT05TVFJBSU5UICVzICVzIiwKKwkJCQkJ CQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKKwkJCQkJCQkJIGNv bnN0cmFpbnREZWYpOworCQl9CiAJCWVsc2UKLQkJCSppbnZhbGlkY29ucyA9IGxhcHBlbmRfb2lk KCppbnZhbGlkY29ucywgY29uLT5vaWQpOwotCX0KKwkJeworCQkJY29uc3RyYWludERlZiA9IHBn X2dldF9jb25zdHJhaW50ZGVmX3dvcmtlcihjb24tPm9pZCwgdHJ1ZSwKKwkJCQkJCQkJCQkJCQkJ UFJFVFRZRkxBR19QQVJFTiwKKwkJCQkJCQkJCQkJCQkJdHJ1ZSk7CisJCQlpZiAoY29uc3RyYWlu dERlZikKKwkJCXsKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZjb25zdHJfYnVmLCBjb25z dHJhaW50RGVmKTsKIAorCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb25zdHJfYnVmLCAnOycp OworCQkJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZjb25zdHJfYnVmLCAnXG4nKTsKKwkJCX0KKwkJ fQorCX0KIAlzeXN0YWJsZV9lbmRzY2FuKHNzY2FuKTsKIAl0YWJsZV9jbG9zZShjb25zdHJhaW50 UmVsLCBBY2Nlc3NTaGFyZUxvY2spOwotfQogCi0vKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIGJ1 aWxkIENSRUFURSBET01BSU4gc3RhdGVtZW50Ci0gKi8KLXN0YXRpYyB2b2lkCi1idWlsZF9jcmVh dGVfZG9tYWluX3N0YXRlbWVudChTdHJpbmdJbmZvIGJ1ZiwgRm9ybV9wZ190eXBlIHR5cEZvcm0s Ci0JCQkJCQkJIE5vZGUgKmRlZmF1bHRFeHByLCBMaXN0ICp2YWxpZENvbnN0cmFpbnRzKQotewot CUhlYXBUdXBsZQliYXNlVHlwZVR1cGxlOwotCUZvcm1fcGdfdHlwZSBiYXNlVHlwZUZvcm07Ci0J T2lkCQkJYmFzZUNvbGxhdGlvbiA9IEludmFsaWRPaWQ7CisJYXBwZW5kU3RyaW5nSW5mb0NoYXIo JmJ1ZiwgJzsnKTsKIAotCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiQ1JFQVRFIERPTUFJTiAlcy4l cyBBUyAlcyIsCi0JCQkJCSBxdW90ZV9pZGVudGlmaWVyKGdldF9uYW1lc3BhY2VfbmFtZSh0eXBG b3JtLT50eXBuYW1lc3BhY2UpKSwKLQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoTmFtZVN0cih0eXBG b3JtLT50eXBuYW1lKSksCi0JCQkJCSBmb3JtYXRfdHlwZV9iZSh0eXBGb3JtLT50eXBiYXNldHlw ZSkpOwotCi0JLyogQWRkIGNvbGxhdGlvbiBpZiBpdCBkaWZmZXJzIGZyb20gYmFzZSB0eXBlJ3Mg Y29sbGF0aW9uICovCi0JaWYgKE9pZElzVmFsaWQodHlwRm9ybS0+dHlwY29sbGF0aW9uKSkKLQl7 Ci0JCS8qIEdldCBiYXNlIHR5cGUncyBjb2xsYXRpb24gZm9yIGNvbXBhcmlzb24gKi8KLQkJYmFz ZVR5cGVUdXBsZSA9IFNlYXJjaFN5c0NhY2hlMShUWVBFT0lELCBPYmplY3RJZEdldERhdHVtKHR5 cEZvcm0tPnR5cGJhc2V0eXBlKSk7Ci0JCWlmIChIZWFwVHVwbGVJc1ZhbGlkKGJhc2VUeXBlVHVw bGUpKQotCQl7Ci0JCQliYXNlVHlwZUZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJVQ1QoYmFz ZVR5cGVUdXBsZSk7Ci0JCQliYXNlQ29sbGF0aW9uID0gYmFzZVR5cGVGb3JtLT50eXBjb2xsYXRp b247Ci0JCQlSZWxlYXNlU3lzQ2FjaGUoYmFzZVR5cGVUdXBsZSk7Ci0JCX0KLQotCQkvKiBPbmx5 IGFkZCBDT0xMQVRFIGlmIGRvbWFpbidzIGNvbGxhdGlvbiBkaWZmZXJzIGZyb20gYmFzZSB0eXBl J3MgKi8KLQkJaWYgKHR5cEZvcm0tPnR5cGNvbGxhdGlvbiAhPSBiYXNlQ29sbGF0aW9uKQotCQl7 Ci0JCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBDT0xMQVRFICVzIiwKLQkJCQkJCQkgZ2VuZXJh dGVfY29sbGF0aW9uX25hbWUodHlwRm9ybS0+dHlwY29sbGF0aW9uKSk7Ci0JCX0KLQl9Ci0KLQkv KiBBZGQgZGVmYXVsdCB2YWx1ZSBpZiBwcmVzZW50ICovCi0JaWYgKGRlZmF1bHRFeHByICE9IE5V TEwpCi0JewotCQljaGFyICpkZWZhdWx0VmFsdWUgPSBkZXBhcnNlX2V4cHJlc3Npb25fcHJldHR5 KGRlZmF1bHRFeHByLCBOSUwsIGZhbHNlLCBmYWxzZSwgMCwgMCk7Ci0JCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiIERFRkFVTFQgJXMiLCBkZWZhdWx0VmFsdWUpOwotCX0KLQotCS8qIEFkZCB2YWxp ZCBjb25zdHJhaW50cyAqLwotCUxpc3RDZWxsICpsYzsKLQlmb3JlYWNoKGxjLCB2YWxpZENvbnN0 cmFpbnRzKQotCXsKLQkJT2lkCQkJY29uc3RyYWludE9pZCA9IGxmaXJzdF9vaWQobGMpOwotCQlI ZWFwVHVwbGUJY29uc3RyYWludFR1cDsKLQkJRm9ybV9wZ19jb25zdHJhaW50IGNvbjsKLQkJY2hh cgkgICAqY29uc3RyYWludERlZjsKLQotCQkvKiBMb29rIHVwIHRoZSBjb25zdHJhaW50IGluZm8g Ki8KLQkJY29uc3RyYWludFR1cCA9IFNlYXJjaFN5c0NhY2hlMShDT05TVFJPSUQsIE9iamVjdElk R2V0RGF0dW0oY29uc3RyYWludE9pZCkpOwotCQlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoY29uc3Ry YWludFR1cCkpCi0JCQljb250aW51ZTsJLyogY29uc3RyYWludCB3YXMgZHJvcHBlZCBjb25jdXJy ZW50bHkgKi8KLQotCQljb24gPSAoRm9ybV9wZ19jb25zdHJhaW50KSBHRVRTVFJVQ1QoY29uc3Ry YWludFR1cCk7Ci0JCWNvbnN0cmFpbnREZWYgPSBwZ19nZXRfY29uc3RyYWludGRlZl93b3JrZXIo Y29uc3RyYWludE9pZCwgZmFsc2UsIFBSRVRUWUZMQUdfUEFSRU4sIHRydWUpOwotCi0JCWFwcGVu ZFN0cmluZ0luZm8oYnVmLCAiIENPTlNUUkFJTlQgJXMgJXMiLAotCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIoTmFtZVN0cihjb24tPmNvbm5hbWUpKSwKLQkJCQkJCSBjb25zdHJhaW50RGVmKTsKLQot CQlSZWxlYXNlU3lzQ2FjaGUoY29uc3RyYWludFR1cCk7Ci0JfQotCi0JYXBwZW5kU3RyaW5nSW5m b0NoYXIoYnVmLCAnOycpOwotfQotCi0vKgotICogSGVscGVyIGZ1bmN0aW9uIHRvIGFkZCBBTFRF UiBET01BSU4gc3RhdGVtZW50cyBmb3IgaW52YWxpZCBjb25zdHJhaW50cwotICovCi1zdGF0aWMg dm9pZAotYWRkX2FsdGVyX2RvbWFpbl9zdGF0ZW1lbnRzKFN0cmluZ0luZm8gYnVmLCBMaXN0ICpp bnZhbGlkQ29uc3RyYWludHMpCi17Ci0JTGlzdENlbGwgKmxjOwotCi0JZm9yZWFjaChsYywgaW52 YWxpZENvbnN0cmFpbnRzKQorCWlmIChjb25zdHJfYnVmLmxlbiAhPSAwKQogCXsKLQkJT2lkIGNv bnN0cmFpbnRPaWQgPSBsZmlyc3Rfb2lkKGxjKTsKLQkJY2hhciAqYWx0ZXJTdG10ID0gcGdfZ2V0 X2NvbnN0cmFpbnRkZWZfd29ya2VyKGNvbnN0cmFpbnRPaWQsIHRydWUsIFBSRVRUWUZMQUdfUEFS RU4sIHRydWUpOworCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcigmYnVmLCAnXG4nKTsKKwkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZygmYnVmLCBjb25zdHJfYnVmLmRhdGEpOwogCi0JCWlmIChhbHRlclN0 bXQpCi0JCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIlxuJXM7IiwgYWx0ZXJTdG10KTsKKwkJLyog dHJ1bmNhdGUgdGhlIGxhc3QgbmV3bGluZSAqLworCQlpZiAoYnVmLmxlbiA+IDAgJiYgYnVmLmRh dGFbYnVmLmxlbiAtIDFdID09ICdcbicpCisJCQlidWYuZGF0YVstLShidWYubGVuKV0gPSAnXDAn OwogCX0KLX0KLQotLyoKLSAqIHBnX2dldF9kb21haW5fZGRsIC0gR2V0IENSRUFURSBET01BSU4g c3RhdGVtZW50IGZvciBhIGRvbWFpbgotICovCi1EYXR1bQotcGdfZ2V0X2RvbWFpbl9kZGwoUEdf RlVOQ1RJT05fQVJHUykKLXsKLQlTdHJpbmdJbmZvRGF0YSBidWY7Ci0JT2lkCQkJZG9tYWluX29p ZCA9IFBHX0dFVEFSR19PSUQoMCk7Ci0JSGVhcFR1cGxlCXR5cGVUdXBsZTsKLQlGb3JtX3BnX3R5 cGUgdHlwRm9ybTsKLQlOb2RlCSAgICpkZWZhdWx0RXhwcjsKLQlMaXN0CSAgICp2YWxpZENvbnN0 cmFpbnRzOwotCUxpc3QJICAgKmludmFsaWRDb25zdHJhaW50czsKLQotCS8qIExvb2sgdXAgdGhl IGRvbWFpbiBpbiBwZ190eXBlICovCi0JdHlwZVR1cGxlID0gU2VhcmNoU3lzQ2FjaGUxKFRZUEVP SUQsIE9iamVjdElkR2V0RGF0dW0oZG9tYWluX29pZCkpOwotCWlmICghSGVhcFR1cGxlSXNWYWxp ZCh0eXBlVHVwbGUpKQotCQlQR19SRVRVUk5fTlVMTCgpOwotCi0JdHlwRm9ybSA9IChGb3JtX3Bn X3R5cGUpIEdFVFNUUlVDVCh0eXBlVHVwbGUpOwotCi0JLyogR2V0IGRlZmF1bHQgZXhwcmVzc2lv biAqLwotCWRlZmF1bHRFeHByID0gZ2V0X3R5cGRlZmF1bHQoZG9tYWluX29pZCk7Ci0KLQkvKiBT Y2FuIGZvciB2YWxpZCBhbmQgaW52YWxpZCBjb25zdHJhaW50cyAqLwotCXNjYW5fZG9tYWluX2Nv bnN0cmFpbnRzKGRvbWFpbl9vaWQsICZ2YWxpZENvbnN0cmFpbnRzLCAmaW52YWxpZENvbnN0cmFp bnRzKTsKLQotCS8qIEJ1aWxkIHRoZSBEREwgc3RhdGVtZW50ICovCi0JaW5pdFN0cmluZ0luZm8o JmJ1Zik7Ci0JYnVpbGRfY3JlYXRlX2RvbWFpbl9zdGF0ZW1lbnQoJmJ1ZiwgdHlwRm9ybSwgZGVm YXVsdEV4cHIsIHZhbGlkQ29uc3RyYWludHMpOwotCi0JLyogQWRkIEFMVEVSIERPTUFJTiBzdGF0 ZW1lbnRzIGZvciBpbnZhbGlkIGNvbnN0cmFpbnRzICovCi0JaWYgKGxpc3RfbGVuZ3RoKGludmFs aWRDb25zdHJhaW50cykgPiAwKQotCQlhZGRfYWx0ZXJfZG9tYWluX3N0YXRlbWVudHMoJmJ1Ziwg aW52YWxpZENvbnN0cmFpbnRzKTsKIAogCS8qIENsZWFudXAgKi8KLQlsaXN0X2ZyZWUodmFsaWRD b25zdHJhaW50cyk7Ci0JbGlzdF9mcmVlKGludmFsaWRDb25zdHJhaW50cyk7CiAJUmVsZWFzZVN5 c0NhY2hlKHR5cGVUdXBsZSk7CiAKIAlQR19SRVRVUk5fVEVYVF9QKGNzdHJpbmdfdG9fdGV4dChi dWYuZGF0YSkpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vYmplY3Rf ZGRsLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2JqZWN0X2RkbC5vdXQKaW5kZXgg M2RjMWYxYmMwNDkuLjhlYjE0Y2M1MDU4IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL29iamVjdF9kZGwub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb2Jq ZWN0X2RkbC5vdXQKQEAgLTEwLDI1ICsxMCwyNSBAQCBDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfdXNf cG9zdGFsX2NvZGUgQVMgVEVYVAogICAgIE9SIFZBTFVFIH4gJ15cZHs1fS1cZHs0fSQnCiAgICAg KTsKIFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc191c19wb3N0YWxfY29kZScpOwot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfdXNf cG9zdGFsX2NvZGUgQVMgdGV4dCBERUZBVUxUICcwMDAwMCc6OnRleHQgQ09OU1RSQUlOVCByZWdy ZXNzX3VzX3Bvc3RhbF9jb2RlX2NoZWNrIENIRUNLIChWQUxVRSB+ICdeXGR7NX0kJzo6dGV4dCBP UiBWQUxVRSB+ICdeXGR7NX0tXGR7NH0kJzo6dGV4dCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfdXNf cG9zdGFsX2NvZGUgQVMgcGdfY2F0YWxvZy50ZXh0IERFRkFVTFQgJzAwMDAwJzo6dGV4dCBDT05T VFJBSU5UIHJlZ3Jlc3NfdXNfcG9zdGFsX2NvZGVfY2hlY2sgQ0hFQ0sgKFZBTFVFIH4gJ15cZHs1 fSQnOjp0ZXh0IE9SIFZBTFVFIH4gJ15cZHs1fS1cZHs0fSQnOjp0ZXh0KTsKICgxIHJvdykKIAog Q1JFQVRFIERPTUFJTiByZWdyZXNzX2RvbWFpbl9ub3RfbnVsbCBBUyBJTlQgTk9UIE5VTEw7CiBT RUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF9udWxsJyk7Ci0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5f ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIENSRUFU RSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX25vdF9udWxsIEFTIGludGVnZXIgQ09OU1RS QUlOVCByZWdyZXNzX2RvbWFpbl9ub3RfbnVsbF9ub3RfbnVsbCBOT1QgTlVMTDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5f ZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCist LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3NfZG9tYWluX25vdF9udWxsIEFTIHBn X2NhdGFsb2cuaW50NCBDT05TVFJBSU5UIHJlZ3Jlc3NfZG9tYWluX25vdF9udWxsX25vdF9udWxs IE5PVCBOVUxMOwogKDEgcm93KQogCiBDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX2NoZWNr IEFTIElOVAogICAgIENPTlNUUkFJTlQgcmVncmVzc19hIENIRUNLIChWQUxVRSA8IDEwMCkKICAg ICBDT05TVFJBSU5UIHJlZ3Jlc3NfYiBDSEVDSyAoVkFMVUUgPiAxMCk7CiBTRUxFQ1QgcGdfZ2V0 X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX2NoZWNrJyk7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVz c19kb21haW5fY2hlY2sgQVMgaW50ZWdlciBDT05TVFJBSU5UIHJlZ3Jlc3NfYSBDSEVDSyAoVkFM VUUgPCAxMDApIENPTlNUUkFJTlQgcmVncmVzc19iIENIRUNLIChWQUxVRSA+IDEwKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19kb21haW5fY2hlY2sgQVMgcGdfY2F0YWxv Zy5pbnQ0IENPTlNUUkFJTlQgcmVncmVzc19hIENIRUNLIChWQUxVRSA8IDEwMCkgQ09OU1RSQUlO VCByZWdyZXNzX2IgQ0hFQ0sgKFZBTFVFID4gMTApOwogKDEgcm93KQogCiBDUkVBVEUgRE9NQUlO ICJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIiBBUyBJTlQKQEAgLTM2LDkgKzM2LDkgQEAgQ1JF QVRFIERPTUFJTiAicmVncmVzc19kb21haW4gd2l0aCBzcGFjZSIgQVMgSU5UCiAgICAgQ09OU1RS QUlOVCAicmVncmVzc19Db25zdHJhaW50IEIiIENIRUNLIChWQUxVRSA+IDEwKQogICAgIENPTlNU UkFJTlQgInJlZ3Jlc3NfQ29uc3RyYWludEMiIENIRUNLIChWQUxVRSAhPSA1NSk7CiBTRUxFQ1Qg cGdfZ2V0X2RvbWFpbl9kZGwoJyJyZWdyZXNzX2RvbWFpbiB3aXRoIHNwYWNlIicpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJsaWMuInJlZ3Jlc3NfZG9tYWluIHdp dGggc3BhY2UiIEFTIGludGVnZXIgQ09OU1RSQUlOVCByZWdyZXNzX2EgQ0hFQ0sgKFZBTFVFIDwg MTAwKSBDT05TVFJBSU5UICJyZWdyZXNzX0NvbnN0cmFpbnQgQiIgQ0hFQ0sgKFZBTFVFID4gMTAp IENPTlNUUkFJTlQgInJlZ3Jlc3NfQ29uc3RyYWludEMiIENIRUNLIChWQUxVRSA8PiA1NSk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9k ZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJs aWMuInJlZ3Jlc3NfZG9tYWluIHdpdGggc3BhY2UiIEFTIHBnX2NhdGFsb2cuaW50NCBDT05TVFJB SU5UIHJlZ3Jlc3NfYSBDSEVDSyAoVkFMVUUgPCAxMDApIENPTlNUUkFJTlQgInJlZ3Jlc3NfQ29u c3RyYWludCBCIiBDSEVDSyAoVkFMVUUgPiAxMCkgQ09OU1RSQUlOVCAicmVncmVzc19Db25zdHJh aW50QyIgQ0hFQ0sgKFZBTFVFIDw+IDU1KTsKICgxIHJvdykKIAogLS0gVGVzdCBlcnJvciBjYXNl cwpAQCAtNTUsNjAgKzU1LDYwIEBAIFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbChOVUxMKTsgIC0t IHNob3VsZCByZXR1cm4gTlVMTAogLS0gVGVzdCBkb21haW5zIHdpdGggbm8gY29uc3RyYWludHMK IENSRUFURSBET01BSU4gcmVncmVzc19zaW1wbGVfZG9tYWluIEFTIHRleHQ7CiBTRUxFQ1QgcGdf Z2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3Nfc2ltcGxlX2RvbWFpbicpOwotICAgICAgICAgICAgICAg ICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJs aWMucmVncmVzc19zaW1wbGVfZG9tYWluIEFTIHRleHQ7CisgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JF QVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19zaW1wbGVfZG9tYWluIEFTIHBnX2NhdGFsb2cudGV4 dDsKICgxIHJvdykKIAogLS0gVGVzdCBkb21haW4gb3ZlciBhbm90aGVyIGRvbWFpbgogQ1JFQVRF IERPTUFJTiByZWdyZXNzX2Jhc2VfZG9tYWluIEFTIHZhcmNoYXIoMTApOwogQ1JFQVRFIERPTUFJ TiByZWdyZXNzX2Rlcml2ZWRfZG9tYWluIEFTIHJlZ3Jlc3NfYmFzZV9kb21haW4gQ0hFQ0sgKExF TkdUSChWQUxVRSkgPiAzKTsKIFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19kZXJp dmVkX2RvbWFpbicpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KLSBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2Rlcml2ZWRfZG9t YWluIEFTIHJlZ3Jlc3NfYmFzZV9kb21haW4gQ09OU1RSQUlOVCByZWdyZXNzX2Rlcml2ZWRfZG9t YWluX2NoZWNrIENIRUNLIChsZW5ndGgoVkFMVUU6OnRleHQpID4gMyk7CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dl dF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19kZXJpdmVkX2RvbWFpbiBBUyBwdWJsaWMu cmVncmVzc19iYXNlX2RvbWFpbiBDT05TVFJBSU5UIHJlZ3Jlc3NfZGVyaXZlZF9kb21haW5fY2hl Y2sgQ0hFQ0sgKGxlbmd0aChWQUxVRTo6dGV4dCkgPiAzKTsKICgxIHJvdykKIAogLS0gVGVzdCBk b21haW4gd2l0aCBjb21wbGV4IGRlZmF1bHQgZXhwcmVzc2lvbnMKIENSRUFURSBTRVFVRU5DRSBy ZWdyZXNzX3Rlc3Rfc2VxOwogQ1JFQVRFIERPTUFJTiByZWdyZXNzX3NlcV9kb21haW4gQVMgaW50 IERFRkFVTFQgbmV4dHZhbCgncmVncmVzc190ZXN0X3NlcScpOwotU0VMRUNUIHBnX2dldF9kb21h aW5fZGRsKCdyZWdyZXNzX3NlcV9kb21haW4nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19zZXFfZG9tYWluIEFTIGludGVnZXIg REVGQVVMVCBuZXh0dmFsKCdyZWdyZXNzX3Rlc3Rfc2VxJzo6cmVnY2xhc3MpOwotKDEgcm93KQot Ci0tLSBUZXN0IGRvbWFpbiB3aXRoIGEgcmVuYW1lZCBzZXF1ZW5jZSBhcyBkZWZhdWx0IGV4cHJl c3Npb24KLUFMVEVSIFNFUVVFTkNFIHJlZ3Jlc3NfdGVzdF9zZXEgUkVOQU1FIFRPIHJlZ3Jlc3Nf dGVzdF9zZXFfcmVuYW1lZDsKIFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19zZXFf ZG9tYWluJyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw Z19nZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K LSBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX3NlcV9kb21haW4gQVMgaW50ZWdlciBERUZB VUxUIG5leHR2YWwoJ3JlZ3Jlc3NfdGVzdF9zZXFfcmVuYW1lZCc6OnJlZ2NsYXNzKTsKKyBDUkVB VEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX3NlcV9kb21haW4gQVMgcGdfY2F0YWxvZy5pbnQ0IERF RkFVTFQgbmV4dHZhbCgncmVncmVzc190ZXN0X3NlcSc6OnJlZ2NsYXNzKTsKKygxIHJvdykKKwor LS0gVGVzdCBkb21haW4gd2l0aCBhIHJlbmFtZWQgc2VxdWVuY2UgYXMgZGVmYXVsdCBleHByZXNz aW9uCitBTFRFUiBTRVFVRU5DRSByZWdyZXNzX3Rlc3Rfc2VxIFJFTkFNRSBUTyByZWdyZXNzX3Rl c3Rfc2VxX3JlbmFtZWQ7CitTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3Nfc2VxX2Rv bWFpbicpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGljLnJlZ3Jlc3Nfc2VxX2RvbWFpbiBB UyBwZ19jYXRhbG9nLmludDQgREVGQVVMVCBuZXh0dmFsKCdyZWdyZXNzX3Rlc3Rfc2VxX3JlbmFt ZWQnOjpyZWdjbGFzcyk7CiAoMSByb3cpCiAKIC0tIFRlc3QgZG9tYWluIHdpdGggdHlwZSBtb2Rp ZmllcnMKIENSRUFURSBET01BSU4gcmVncmVzc19wcmVjaXNlX251bWVyaWMgQVMgbnVtZXJpYygx MCwyKSBERUZBVUxUIDAuMDA7CiBTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfcHJl Y2lzZV9udW1lcmljJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWlu X2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBDUkVBVEUg RE9NQUlOIHB1YmxpYy5yZWdyZXNzX3ByZWNpc2VfbnVtZXJpYyBBUyBudW1lcmljIERFRkFVTFQg MC4wMDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19wcmVjaXNlX251bWVyaWMgQVMg cGdfY2F0YWxvZy4ibnVtZXJpYyIgREVGQVVMVCAwLjAwOwogKDEgcm93KQogCiAtLSBUZXN0IGRv bWFpbiBvdmVyIGFycmF5IHR5cGUKIENSRUFURSBET01BSU4gcmVncmVzc19pbnRfYXJyYXlfZG9t YWluIEFTIGludFtdIENIRUNLIChhcnJheV9sZW5ndGgoVkFMVUUsIDEpIDw9IDUpOwogU0VMRUNU IHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2ludF9hcnJheV9kb21haW4nKTsKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19n ZXRfZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBDUkVBVEUgRE9N QUlOIHB1YmxpYy5yZWdyZXNzX2ludF9hcnJheV9kb21haW4gQVMgaW50ZWdlcltdIENPTlNUUkFJ TlQgcmVncmVzc19pbnRfYXJyYXlfZG9tYWluX2NoZWNrIENIRUNLIChhcnJheV9sZW5ndGgoVkFM VUUsIDEpIDw9IDUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19p bnRfYXJyYXlfZG9tYWluIEFTIHBnX2NhdGFsb2cuX2ludDQgQ09OU1RSQUlOVCByZWdyZXNzX2lu dF9hcnJheV9kb21haW5fY2hlY2sgQ0hFQ0sgKGFycmF5X2xlbmd0aChWQUxVRSwgMSkgPD0gNSk7 CiAoMSByb3cpCiAKIC0tIFRlc3QgZG9tYWluIGluIG5vbi1wdWJsaWMgc2NoZW1hCiBDUkVBVEUg U0NIRU1BIHJlZ3Jlc3NfdGVzdF9zY2hlbWE7CiBDUkVBVEUgRE9NQUlOIHJlZ3Jlc3NfdGVzdF9z Y2hlbWEucmVncmVzc19zY2hlbWFfZG9tYWluIEFTIHRleHQgREVGQVVMVCAndGVzdCc7CiBTRUxF Q1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfdGVzdF9zY2hlbWEucmVncmVzc19zY2hlbWFf ZG9tYWluJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21h aW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQotIENSRUFURSBET01BSU4gcmVncmVzc190ZXN0X3NjaGVtYS5yZWdy ZXNzX3NjaGVtYV9kb21haW4gQVMgdGV4dCBERUZBVUxUICd0ZXN0Jzo6dGV4dDsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRfZG9tYWluX2RkbCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcmVncmVzc190ZXN0X3NjaGVtYS5y ZWdyZXNzX3NjaGVtYV9kb21haW4gQVMgcGdfY2F0YWxvZy50ZXh0IERFRkFVTFQgJ3Rlc3QnOjp0 ZXh0OwogKDEgcm93KQogCiAtLSBUZXN0IGRvbWFpbiB3aXRoIG11bHRpcGxlIGNvbnN0cmFpbnQg dHlwZXMgY29tYmluZWQKQEAgLTExOCwxOCArMTE4LDE4IEBAIENSRUFURSBET01BSU4gcmVncmVz c19jb21wcmVoZW5zaXZlX2RvbWFpbiBBUyB2YXJjaGFyKDUwKQogICAgIENIRUNLIChMRU5HVEgo VkFMVUUpID49IDUpCiAgICAgQ0hFQ0sgKFZBTFVFICF+ICdeXHMqJCcpOyAgLS0gbm90IGp1c3Qg d2hpdGVzcGFjZQogU0VMRUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2NvbXByZWhlbnNp dmVfZG9tYWluJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGdfZ2V0X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19jb21wcmVoZW5zaXZlX2RvbWFp biBBUyBjaGFyYWN0ZXIgdmFyeWluZyBERUZBVUxUICdkZWZhdWx0X3ZhbHVlJzo6Y2hhcmFjdGVy IHZhcnlpbmcgQ09OU1RSQUlOVCByZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluX25vdF9udWxs IE5PVCBOVUxMIENPTlNUUkFJTlQgcmVncmVzc19jb21wcmVoZW5zaXZlX2RvbWFpbl9jaGVjayBD SEVDSyAobGVuZ3RoKFZBTFVFOjp0ZXh0KSA+PSA1KSBDT05TVFJBSU5UIHJlZ3Jlc3NfY29tcHJl aGVuc2l2ZV9kb21haW5fY2hlY2sxIENIRUNLIChWQUxVRTo6dGV4dCAhfiAnXlxzKiQnOjp0ZXh0 KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0 X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluIEFT IHBnX2NhdGFsb2cuInZhcmNoYXIiIERFRkFVTFQgJ2RlZmF1bHRfdmFsdWUnOjpjaGFyYWN0ZXIg dmFyeWluZyBDT05TVFJBSU5UIHJlZ3Jlc3NfY29tcHJlaGVuc2l2ZV9kb21haW5fbm90X251bGwg Tk9UIE5VTEwgQ09OU1RSQUlOVCByZWdyZXNzX2NvbXByZWhlbnNpdmVfZG9tYWluX2NoZWNrIENI RUNLIChsZW5ndGgoVkFMVUU6OnRleHQpID49IDUpIENPTlNUUkFJTlQgcmVncmVzc19jb21wcmVo ZW5zaXZlX2RvbWFpbl9jaGVjazEgQ0hFQ0sgKFZBTFVFOjp0ZXh0ICF+ICdeXHMqJCc6OnRleHQp OwogKDEgcm93KQogCiAtLSBUZXN0IGRvbWFpbiBvdmVyIGNvbXBvc2l0ZSB0eXBlCiBDUkVBVEUg VFlQRSByZWdyZXNzX2FkZHJlc3NfdHlwZSBBUyAoc3RyZWV0IHRleHQsIGNpdHkgdGV4dCwgemlw Y29kZSB0ZXh0KTsKIENSRUFURSBET01BSU4gcmVncmVzc19hZGRyZXNzX2RvbWFpbiBBUyByZWdy ZXNzX2FkZHJlc3NfdHlwZSBDSEVDSyAoKFZBTFVFKS56aXBjb2RlIH4gJ15cZHs1fSQnKTsKIFNF TEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19hZGRyZXNzX2RvbWFpbicpOwotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCi0gQ1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19hZGRyZXNzX2Rv bWFpbiBBUyByZWdyZXNzX2FkZHJlc3NfdHlwZSBDT05TVFJBSU5UIHJlZ3Jlc3NfYWRkcmVzc19k b21haW5fY2hlY2sgQ0hFQ0sgKChWQUxVRSkuemlwY29kZSB+ICdeXGR7NX0kJzo6dGV4dCk7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENSRUFURSBET01BSU4gcHVibGlj LnJlZ3Jlc3NfYWRkcmVzc19kb21haW4gQVMgcHVibGljLnJlZ3Jlc3NfYWRkcmVzc190eXBlIENP TlNUUkFJTlQgcmVncmVzc19hZGRyZXNzX2RvbWFpbl9jaGVjayBDSEVDSyAoKFZBTFVFKS56aXBj b2RlIH4gJ15cZHs1fSQnOjp0ZXh0KTsKICgxIHJvdykKIAogLS0gVGVzdCBkb21haW4gd2l0aCBO T1QgVkFMSUQgY29uc3RyYWludApAQCAtMTM4LDcgKzEzOCw3IEBAIEFMVEVSIERPTUFJTiByZWdy ZXNzX2RvbWFpbl9ub3RfdmFsaWQgQUREIENPTlNUUkFJTlQgY2hlY2tfcG9zaXRpdmUgQ0hFQ0sg KFZBTFVFCiBTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF92YWxp ZCcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf ZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAt LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBDUkVBVEUg RE9NQUlOIHB1YmxpYy5yZWdyZXNzX2RvbWFpbl9ub3RfdmFsaWQgQVMgaW50ZWdlcjsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworIENSRUFURSBET01BSU4g cHVibGljLnJlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCBBUyBwZ19jYXRhbG9nLmludDQ7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgQUxURVIgRE9NQUlOIHB1YmxpYy5y ZWdyZXNzX2RvbWFpbl9ub3RfdmFsaWQgQUREIENPTlNUUkFJTlQgY2hlY2tfcG9zaXRpdmUgQ0hF Q0sgKFZBTFVFID4gMCkgTk9UIFZBTElEOwogKDEgcm93KQogCkBAIC0xNDYsMTggKzE0NiwxOCBA QCBTRUxFQ1QgcGdfZ2V0X2RvbWFpbl9kZGwoJ3JlZ3Jlc3NfZG9tYWluX25vdF92YWxpZCcpOwog Q1JFQVRFIERPTUFJTiByZWdyZXNzX2RvbWFpbl9taXhlZCBBUyBpbnQgQ0hFQ0sgKFZBTFVFICE9 IDApOwogQUxURVIgRE9NQUlOIHJlZ3Jlc3NfZG9tYWluX21peGVkIEFERCBDT05TVFJBSU5UIGNo ZWNrX3JhbmdlIENIRUNLIChWQUxVRSBCRVRXRUVOIDEgQU5EIDEwMCkgTk9UIFZBTElEOwogU0VM RUNUIHBnX2dldF9kb21haW5fZGRsKCdyZWdyZXNzX2RvbWFpbl9taXhlZCcpOwotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBnX2dldF9kb21haW5fZGRs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g Q1JFQVRFIERPTUFJTiBwdWJsaWMucmVncmVzc19kb21haW5fbWl4ZWQgQVMgaW50ZWdlciBDT05T VFJBSU5UIHJlZ3Jlc3NfZG9tYWluX21peGVkX2NoZWNrIENIRUNLIChWQUxVRSA8PiAwKTsgICAg KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdf Z2V0X2RvbWFpbl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2RvbWFpbl9t aXhlZCBBUyBwZ19jYXRhbG9nLmludDQgQ09OU1RSQUlOVCByZWdyZXNzX2RvbWFpbl9taXhlZF9j aGVjayBDSEVDSyAoVkFMVUUgPD4gMCk7KwogIEFMVEVSIERPTUFJTiBwdWJsaWMucmVncmVzc19k b21haW5fbWl4ZWQgQUREIENPTlNUUkFJTlQgY2hlY2tfcmFuZ2UgQ0hFQ0sgKFZBTFVFID49IDEg QU5EIFZBTFVFIDw9IDEwMCkgTk9UIFZBTElEOwogKDEgcm93KQogCiAtLSBUZXN0IGRvbWFpbiB3 aXRoIGNvbGxhdGlvbgogQ1JFQVRFIERPTUFJTiByZWdyZXNzX2RvbWFpbl93aXRoX2NvbGxhdGUg QVMgdGV4dCBDT0xMQVRFICJDIjsKIFNFTEVDVCBwZ19nZXRfZG9tYWluX2RkbCgncmVncmVzc19k b21haW5fd2l0aF9jb2xsYXRlJyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBwZ19nZXRf ZG9tYWluX2RkbCAgICAgICAgICAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBD UkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2RvbWFpbl93aXRoX2NvbGxhdGUgQVMgdGV4dCBD T0xMQVRFICJDIjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X2RvbWFp bl9kZGwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyBDUkVBVEUgRE9NQUlOIHB1YmxpYy5yZWdyZXNzX2RvbWFpbl93aXRoX2NvbGxh dGUgQVMgcGdfY2F0YWxvZy50ZXh0IENPTExBVEUgIkMiOwogKDEgcm93KQogCiAtLSBDbGVhbnVw Ci0tIAoyLjM0LjEKCg== --000000000000e6326b0641cbc6a1--