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.96) (envelope-from ) id 1wXzW6-003bds-0G for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 10:53:38 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wXzW3-001waS-26 for pgsql-hackers@arkaria.postgresql.org; Fri, 12 Jun 2026 10:53:35 +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.96) (envelope-from ) id 1wXzW2-001waI-2x for pgsql-hackers@lists.postgresql.org; Fri, 12 Jun 2026 10:53:35 +0000 Received: from mail-vs1-xe34.google.com ([2607:f8b0:4864:20::e34]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wXzVz-00000002KVY-0b6b for pgsql-hackers@postgresql.org; Fri, 12 Jun 2026 10:53:33 +0000 Received: by mail-vs1-xe34.google.com with SMTP id ada2fe7eead31-6cec1485789so264334137.0 for ; Fri, 12 Jun 2026 03:53:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781261610; cv=none; d=google.com; s=arc-20240605; b=PAvnwnsgWHAOsUmOWNvIfwV+EiuhlXssADu+rWO0AzjDWj6X5k8/4w/lJre7tDO8vA oJinfiJpFog/9rJYCHBllqn51B4CZnFvH6Bcgewh6WaGHX3Ovadm21kuoFxC8RrlTCTL xGLv3OyE3ZmXLebAomHqSKAvrpjNXLzHyMuVMqqACvEbINC38lFp/U8ruGNIC2pYJ0y8 4/iJ4iNFG3Ithau82JU1n5d27fb4GCIgeOkNNPcZUwNc7jrKFj9Oy7DZ5zZqSbn0FFv4 IUnJK7oSXX0IHPcp48Y1+MJwPixyNut5bmYW1WhXtMSsVM4U6CTviF/DHl4th2aNucKZ nlug== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=un0Q+5VVxDltz/JuNlb7ExyXnMSyLNnga/gKmJt/mbw=; fh=H1ld43wAW/m58W/CHWdbXK/XRUPeIkFJl9neKnIHft0=; b=Drh9vcTIU8FC+FLa5RahD3+/uJ7bNLi0SYcjNriiUahG/GZX07N2Udl0C1dMAeT6OC 3knUoYEOU/8Ki+Ifz97/w99VhFhC4qGBb3r4E6AWw1yvCYZZxoFw/MkCJEHAtwtYmbdE S9MSqWkW3b90iU1va2xo903tcSPW0jLtc7366Yn8Txo2I0wDqAdxHjAHAXlCPkxTquRa pmoTK8ONvDclVAwta/yVWAKAjbSdAuQ4dKIkV15tTtj6hU/snnwxO3dAzJTyzw1MUd+D sf1E18wX8ytbt2qEn7MpgrH9AG1UHgzJ34g6+sk//RGGeUknQi5F/07HiB5ZKGd1o9C7 Sw1g==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781261610; x=1781866410; 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=un0Q+5VVxDltz/JuNlb7ExyXnMSyLNnga/gKmJt/mbw=; b=EHQDYQQZItvn1zNGAZ3Szwn94ary1VE7FDuZsKh0SWwmHyUtXSv1eOTq8HwXFQPBoq haojbs+Yg9SuxhnuGMcYRMNXBevjT9KZZwyK8woRHzSbX0CDbXP000EK1DGwGSR/WWIs 1uwXng1fUnqm59YLkpgCOiHHmA4p0gihQSza3mZL2nHTVoLLsva9MMzw7OSK8lGseNZw Ljfo8/g1oBxDegjuDw4XzcJs4MS44lK+ihYVX2J2/wUPssqohiFL8qhWZH7pb/gaklMV 6Damz9Dx957jCvG++vjkhfk5kGuowbJg0VuOfECmWrMJxwRl9IajSq3ywjzfIPL6RDR/ 8L5A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781261610; x=1781866410; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=un0Q+5VVxDltz/JuNlb7ExyXnMSyLNnga/gKmJt/mbw=; b=jHatfqgLgYqZiGtW/FZr3RiYMAgQLHNZL3tVQXTo3KcJJSi2Yqm+tzyebFpEiyE71y BR7e0YiqArF1ZsExS0HZhLPm1DETejWc5rodpfZ5Ywc3CVw4b252TvWZR6BHqtpuuD0c sbXnBkNiF/3AIPH1RFOSRjKy9hBxHtuiEdqW6HcHqo1zKY4CxOnRxVtGgg2SOhCb4+/9 42f4w99/mHS08ReXyJkS5F8gBSdpYizehUxG6GC2n3EpIvwupuoiEjV1iZZY88csAhWj wDSC/Y9O1wgVfI5hdL5zX6Ch2uS2qcdNnNuZJSq1Ft7/3mhcHmD9LFtu24ir0y1lF8w1 wXbg== X-Forwarded-Encrypted: i=1; AFNElJ9jGrncUPxH9euMmw9rHRt/zlQId/U+uwr3UzBn044TlKqviJDAKHBiUEhDPCNU1fi3/m/3Z579uWysLWGx@postgresql.org X-Gm-Message-State: AOJu0YzBdIBUxx4617/DDhrPqm2fIzCqEceXr/qHUUCDqDdPtjFmP845 nMG8XYKw4bk7lASzUQp7UhIMvmS/0rcXMP06E+FLtIQuqFBNQzg909iXUwsPEB0RIsIVJOI4aDd NJjYJ3WZcqtSR1gG5xTQG70eUQ59BC4M= X-Gm-Gg: Acq92OGDzcD9aaEpJ+52tzx5y6Ixfw74OTt0YoxT9qkQEIv0uD41TtNPEYFXPVQ/ExJ iW9d44m3PrGLTQ5iNOfEXRPsj4dSZReZcVaX+bNk5in0iGVK8v0oFXKHU71z3RvfFKD6fHyluuH 6h924MR72j6CfnW121PYQl7c2Ly+ZO0PahlgqFZjVUgi+cOLm0QQ6A+UQspcYh4RhE3y+quhMtb EfelTWac+v+XQtMvZCUy0x+GUlZdHRzmwu0+lznjOynnpZCND5TlSVCupcEcANktaF3Fkih81rK fzn+pIyrUx7E4/4i1mPXjZdgtpcsE8ZuSmvGU8e+r7VJFO/bPUq6kJOH7LTEm7bv1CW8VjEIKgh 5yE5j6/LOXsRo/nyPt+bltjW2p946MUeAfAPw6KqvPFn7BXddBaWjrAC+Q8CqlEn6IVkSm3kj2l 56YQOveKr5BUmcYNR+ofWMF4eu5g== X-Received: by 2002:a05:6102:c0c:b0:6d3:9409:d1b6 with SMTP id ada2fe7eead31-71e88ae95f7mr954744137.6.1781261610050; Fri, 12 Jun 2026 03:53:30 -0700 (PDT) MIME-Version: 1.0 References: <20260604.132108.405136284364833955.ishii@postgresql.org> <20260609.171307.1883356507067957349.ishii@postgresql.org> In-Reply-To: From: jian he Date: Fri, 12 Jun 2026 18:52:52 +0800 X-Gm-Features: AVVi8CcmKri5_XZ3kHyUD6oG3lYOsRYm5eVjKE6Lbx1WXD583RQWavzJgyB1s_s Message-ID: Subject: Re: Row pattern recognition To: assam258@gmail.com Cc: Tatsuo Ishii , zsolt.parragi@percona.com, sjjang112233@gmail.com, vik@postgresfriends.org, er@xs4all.nl, jacob.champion@enterprisedb.com, david.g.johnston@gmail.com, peter@eisentraut.org, li.evan.chao@gmail.com, pgsql-hackers@postgresql.org Content-Type: multipart/mixed; boundary="000000000000850e0a06540c4952" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000850e0a06540c4952 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi. Based on https://github.com/assam258-5892/postgres/commits/RPR Here are more minor review comments: v47-0001-replace-some-AST-to-clause.nocfbot Replace some "AST" to "clause". v47-0002-refactor-gram.y.nocfbot group Op and trailing ALT into one IF condition, this might improve readabi= lity. v47-0003-refactor-volatile-expression-check.nocfbot validate_rpr_define_volatility function, along with its helper functions is removed. contain_volatile_functions() already covers both volatile FuncExpr callees = and NextValueExpr, so a separate walker is not needed. The trade-off is that we= lose the error cursor position, but that seems better than to maintaining extra = code. The check is also moved to after preprocess_expression(), following the sam= e pattern as contain_volatile_functions_after_planning. v47-0004-refactor-validateRPRPatternVarCount.nocfbot validateRPRPatternVarCount() is recursive. Using the `rpDefs !=3D NULL` sen= tinel to gate the "DEFINE variable not used in PATTERN" check at the outermost ca= ll level is awkward. That cross-check only needs to run once; it is better expressed in the caller, transformDefineClause(). v47-0005-refactor-transformDefineClause.nocfbot coerce_to_boolean() was deferred to a second pass over the completed defineClause list, meaning pull_var_clause() ran on an expression that had = not yet been fully coerced/transformed. The more intuitively order should be: transformExpr =E2=86=92 coerce_to_boolean =E2=86=92 pull_var_clause, so pul= l_var_clause always sees the final expression form. v47-0006-refactor-transformDefineClause.nocfbot The allowed nav-expression combination is limited, therefore, has_column_ref is not necessary. Column reference checks can use contain_var_clause, and it's cheap. Also, I made the following error message change: -ERROR: row pattern navigation offset must be a run-time constant +ERROR: row pattern navigation offset expression must not contain column references -- jian https://www.enterprisedb.com/ --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0003-refactor-volatile-expression-check.nocfbot" Content-Disposition: attachment; filename="v47-0003-refactor-volatile-expression-check.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2ymb4 RnJvbSAyZmQyODc4Y2UzMmIyYmNhNDQxZjRmZjA2ZDc3YWQwYTBhMDNhOWZjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTg6Mjk6MzUgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyAzLzZdIHJlZmFjdG9yIHZvbGF0aWxlIGV4cHJlc3Npb24gY2hlY2sKCnZhbGlkYXRlX3Jwcl9k ZWZpbmVfdm9sYXRpbGl0eSBmdW5jdGlvbiwgYWxvbmcgd2l0aCBpdHMgaGVscGVyIGZ1bmN0aW9u cyBpcyByZW1vdmVkLgpjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucygpIGFscmVhZHkgY292ZXJz IGJvdGggdm9sYXRpbGUgRnVuY0V4cHIgY2FsbGVlcyBhbmQKTmV4dFZhbHVlRXhwciwgc28gYSBz ZXBhcmF0ZSB3YWxrZXIgaXMgbm90IG5lZWRlZC4gVGhlIHRyYWRlLW9mZiBpcyB0aGF0IHdlIGxv c2UKdGhlIGVycm9yIGN1cnNvciBwb3NpdGlvbiwgYnV0IHRoYXQgc2VlbXMgYmV0dGVyIHRoYW4g dG8gbWFpbnRhaW5pbmcgZXh0cmEgY29kZS4KClRoZSBjaGVjayBpcyBhbHNvIG1vdmVkIHRvIGFm dGVyIHByZXByb2Nlc3NfZXhwcmVzc2lvbigpLCBmb2xsb3dpbmcgdGhlIHNhbWUKcGF0dGVybiBh cyBjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9uc19hZnRlcl9wbGFubmluZy4KLS0tCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgfCAyMiArKystLS0KIHNyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3Jwci5jICAgICAgICAgICAgICB8IDc2IC0tLS0tLS0tLS0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYyAgICAgICAgICAgICAgICB8 ICAyICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcnByLmggICAgICAgICAgICAgICAgICAgfCAg MSAtCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQgICAgICAgICAgICAgfCAgNiAt LQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0IHwgIDIgLQog NiBmaWxlcyBjaGFuZ2VkLCAxMSBpbnNlcnRpb25zKCspLCA5OCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggZDIwMDE1Y2Q4Ni4uZjdmMjg2OTEwNyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCisrKyBiL3Ny Yy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtMTA0OSwxOCArMTA0OSw2IEBA IHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLCBjaGFy ICpwbGFuX25hbWUsCiAJewogCQlXaW5kb3dDbGF1c2UgKndjID0gbGZpcnN0X25vZGUoV2luZG93 Q2xhdXNlLCBsKTsKIAotCQkvKgotCQkgKiBSZWplY3Qgdm9sYXRpbGUgZnVuY3Rpb25zIChhbmQg c2VxdWVuY2Ugb3BlcmF0aW9ucykgaW4gYW4gUlBSCi0JCSAqIERFRklORSBjbGF1c2UuICBUaGlz IGlzIGRvbmUgaGVyZSwgbm90IGR1cmluZyBwYXJzZSBhbmFseXNpcywgdG8KLQkJICogZm9sbG93 IHRoZSBjb252ZW50aW9uIG9mIG5vdCBjaGVja2luZyBleHByZXNzaW9uIHZvbGF0aWxpdHkgd2hp bGUKLQkJICogcGFyc2luZzsgZGVidWdfcXVlcnlfc3RyaW5nIHN0aWxsIGxldHMgdXMgcmVwb3J0 IHRoZSBvZmZlbmRpbmcKLQkJICogbG9jYXRpb24uICBFdmVyeSB3aW5kb3cgY2xhdXNlIGlzIHZp c2l0ZWQsIGluY2x1ZGluZyBvbmVzIG5vdCB1c2VkCi0JCSAqIGJ5IGFueSBPVkVSLCBzbyB0aGUg Y2hlY2sgZG9lcyBub3QgZGVwZW5kIG9uIHRoZSB3aW5kb3cgc3Vydml2aW5nCi0JCSAqIHNlbGVj dF9hY3RpdmVfd2luZG93cygpLgotCQkgKi8KLQkJaWYgKHdjLT5ycFBhdHRlcm4gJiYgd2MtPmRl ZmluZUNsYXVzZSkKLQkJCXZhbGlkYXRlX3Jwcl9kZWZpbmVfdm9sYXRpbGl0eSh3Yy0+ZGVmaW5l Q2xhdXNlKTsKLQogCQkvKiBwYXJ0aXRpb25DbGF1c2Uvb3JkZXJDbGF1c2UgYXJlIHNvcnQvZ3Jv dXAgZXhwcmVzc2lvbnMgKi8KIAkJd2MtPnN0YXJ0T2Zmc2V0ID0gcHJlcHJvY2Vzc19leHByZXNz aW9uKHJvb3QsIHdjLT5zdGFydE9mZnNldCwKIAkJCQkJCQkJCQkJCUVYUFJLSU5EX0xJTUlUKTsK QEAgLTEwNjksNiArMTA1NywxNiBAQCBzdWJxdWVyeV9wbGFubmVyKFBsYW5uZXJHbG9iYWwgKmds b2IsIFF1ZXJ5ICpwYXJzZSwgY2hhciAqcGxhbl9uYW1lLAogCQl3Yy0+ZGVmaW5lQ2xhdXNlID0g KExpc3QgKikgcHJlcHJvY2Vzc19leHByZXNzaW9uKHJvb3QsCiAJCQkJCQkJCQkJCQkJCSAgKE5v ZGUgKikgd2MtPmRlZmluZUNsYXVzZSwKIAkJCQkJCQkJCQkJCQkJICBFWFBSS0lORF9UQVJHRVQp OworCisJCS8qCisJCSAqIFJlamVjdCB2b2xhdGlsZSBleHByZXNzaW9ucyBpbiBhbiBSUFIgREVG SU5FIGNsYXVzZS4gIFRoaXMgaXMgZG9uZQorCQkgKiBoZXJlLCBub3QgZHVyaW5nIHBhcnNlIGFu YWx5c2lzLCB0byBmb2xsb3cgdGhlIGNvbnZlbnRpb24gb2Ygbm90CisJCSAqIGNoZWNraW5nIGV4 cHJlc3Npb24gdm9sYXRpbGl0eSB3aGlsZSBwYXJzaW5nLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5f dm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIHdjLT5kZWZpbmVDbGF1c2UpKQorCQkJZXJlcG9y dChFUlJPUiwKKwkJCQkJZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCisJ CQkJCWVycm1zZygidm9sYXRpbGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBERUZJTkUg Y2xhdXNlIikpOwogCX0KIAogCXBhcnNlLT5saW1pdE9mZnNldCA9IHByZXByb2Nlc3NfZXhwcmVz c2lvbihyb290LCBwYXJzZS0+bGltaXRPZmZzZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGxhbi9ycHIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Jwci5jCmlu ZGV4IDE3NTc3N2E4ZmYuLmU3N2JmOTNlYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL3Jwci5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3Jwci5jCkBA IC0xODc5LDgyICsxODc5LDYgQEAgY29sbGVjdFBhdHRlcm5WYXJpYWJsZXMoUlBSUGF0dGVybk5v ZGUgKnBhdHRlcm4pCiAJcmV0dXJuIHZhck5hbWVzOwogfQogCi0vKgotICogcnByX3ZvbGF0aWxl X2Z1bmNfY2hlY2tlcgotICoJCWNoZWNrX2Z1bmN0aW9uc19pbl9ub2RlIGNhbGxiYWNrOiB0cnVl IGlmIGZ1bmNpZCBpcyBWT0xBVElMRS4KLSAqLwotc3RhdGljIGJvb2wKLXJwcl92b2xhdGlsZV9m dW5jX2NoZWNrZXIoT2lkIGZ1bmNpZCwgdm9pZCAqY29udGV4dCkKLXsKLQlyZXR1cm4gKGZ1bmNf dm9sYXRpbGUoZnVuY2lkKSA9PSBQUk9WT0xBVElMRV9WT0xBVElMRSk7Ci19Ci0KLS8qCi0gKiBy cHJfZGVmaW5lX2VycnBvc2l0aW9uCi0gKgkJRXJyb3IgY3Vyc29yIHBvc2l0aW9uIGZvciBhIERF RklORSBzdWJleHByZXNzaW9uLgotICoKLSAqIFRoZSBwbGFubmVyIGhhcyBubyBQYXJzZVN0YXRl LCBidXQgdGhlIG9yaWdpbmFsIHF1ZXJ5IHRleHQgaXMgYXZhaWxhYmxlIGluCi0gKiBkZWJ1Z19x dWVyeV9zdHJpbmcsIHNvIHdlIGNhbiBzdGlsbCBwb2ludCBhdCB0aGUgb2ZmZW5kaW5nIGxvY2F0 aW9uIGV4YWN0bHkKLSAqIGFzIHBhcnNlcl9lcnJwb3NpdGlvbigpIHdvdWxkLgotICovCi1zdGF0 aWMgaW50Ci1ycHJfZGVmaW5lX2VycnBvc2l0aW9uKGludCBsb2NhdGlvbikKLXsKLQlpZiAobG9j YXRpb24gPCAwIHx8IGRlYnVnX3F1ZXJ5X3N0cmluZyA9PSBOVUxMKQotCQlyZXR1cm4gMDsKLQly ZXR1cm4gZXJycG9zaXRpb24ocGdfbWJzdHJsZW5fd2l0aF9sZW4oZGVidWdfcXVlcnlfc3RyaW5n LCBsb2NhdGlvbikgKyAxKTsKLX0KLQotLyoKLSAqIHJlamVjdF92b2xhdGlsZV9pbl9kZWZpbmVf d2Fsa2VyCi0gKgkJUmVqZWN0IHZvbGF0aWxlIGNhbGxlZXMgYW5kIHNlcXVlbmNlIG9wZXJhdGlv bnMgYW55d2hlcmUgaW4gYSBERUZJTkUKLSAqCQlleHByZXNzaW9uOiB0aGV5IGFyZSBub24tZGV0 ZXJtaW5pc3RpYyBhY3Jvc3MgdGhlIG11bHRpcGxlIHByZWRpY2F0ZQotICoJCWV2YWx1YXRpb25z IHRoYXQgTkZBIGJhY2t0cmFja2luZyBhbmQgUFJFVi9ORVhUIG5hdmlnYXRpb24gbWF5IHRyaWdn ZXIKLSAqCQlmb3IgYSBzaW5nbGUgcm93LgotICoKLSAqIE5leHRWYWx1ZUV4cHIgaXMgY2hlY2tl ZCBzZXBhcmF0ZWx5IGJlY2F1c2UgaXQgaXMgbm90IGEgZnVuY3Rpb24gY2FsbCBhbmQKLSAqIHNv IGlzIG5vdCBjYXVnaHQgYnkgY2hlY2tfZnVuY3Rpb25zX2luX25vZGUoKS4KLSAqLwotc3RhdGlj IGJvb2wKLXJlamVjdF92b2xhdGlsZV9pbl9kZWZpbmVfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQg KmNvbnRleHQpCi17Ci0JaWYgKG5vZGUgPT0gTlVMTCkKLQkJcmV0dXJuIGZhbHNlOwotCWlmIChj aGVja19mdW5jdGlvbnNfaW5fbm9kZShub2RlLCBycHJfdm9sYXRpbGVfZnVuY19jaGVja2VyLCBO VUxMKSkKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKLQkJCQllcnJtc2coInZvbGF0aWxlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93 ZWQgaW4gREVGSU5FIGNsYXVzZSIpLAotCQkJCXJwcl9kZWZpbmVfZXJycG9zaXRpb24oZXhwckxv Y2F0aW9uKG5vZGUpKSk7Ci0JaWYgKElzQShub2RlLCBOZXh0VmFsdWVFeHByKSkKLQkJZXJlcG9y dChFUlJPUiwKLQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJ CQllcnJtc2coInNlcXVlbmNlIG9wZXJhdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIERFRklORSBj bGF1c2UiKSwKLQkJCQlycHJfZGVmaW5lX2VycnBvc2l0aW9uKGV4cHJMb2NhdGlvbihub2RlKSkp OwotCXJldHVybiBleHByZXNzaW9uX3RyZWVfd2Fsa2VyKG5vZGUsIHJlamVjdF92b2xhdGlsZV9p bl9kZWZpbmVfd2Fsa2VyLCBjb250ZXh0KTsKLX0KLQotLyoKLSAqIHZhbGlkYXRlX3Jwcl9kZWZp bmVfdm9sYXRpbGl0eQotICoJCVJlamVjdCB2b2xhdGlsZSBmdW5jdGlvbnMgLyBzZXF1ZW5jZSBv cGVyYXRpb25zIGluIGEgREVGSU5FIGNsYXVzZS4KLSAqCi0gKiBDYWxsZWQgZnJvbSB0aGUgcGxh bm5lciAoc3VicXVlcnlfcGxhbm5lcikgZm9yIGV2ZXJ5IFJQUiBXaW5kb3dDbGF1c2UsCi0gKiBp bmNsdWRpbmcgd2luZG93cyBub3QgcmVmZXJlbmNlZCBieSBhbnkgT1ZFUiBjbGF1c2UsIHNvIHRo ZSBjaGVjayBpcyBhcHBsaWVkCi0gKiByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHdpbmRvdyBz dXJ2aXZlcyB0byBleGVjdXRpb24gLS0gbWF0Y2hpbmcgdGhlCi0gKiBjb3ZlcmFnZSBvZiB0aGUg Zm9ybWVyIHBhcnNlLXRpbWUgY2hlY2suCi0gKi8KLXZvaWQKLXZhbGlkYXRlX3Jwcl9kZWZpbmVf dm9sYXRpbGl0eShMaXN0ICpkZWZpbmVDbGF1c2UpCi17Ci0JTGlzdENlbGwgICAqbGM7Ci0KLQlm b3JlYWNoKGxjLCBkZWZpbmVDbGF1c2UpCi0JewotCQlUYXJnZXRFbnRyeSAqdGUgPSBsZmlyc3Rf bm9kZShUYXJnZXRFbnRyeSwgbGMpOwotCi0JCSh2b2lkKSByZWplY3Rfdm9sYXRpbGVfaW5fZGVm aW5lX3dhbGtlcigoTm9kZSAqKSB0ZS0+ZXhwciwgTlVMTCk7Ci0JfQotfQotCiAvKgogICogYnVp bGREZWZpbmVWYXJpYWJsZUxpc3QKICAqCQlCdWlsZCBkZWZpbmVWYXJpYWJsZUxpc3QgZnJvbSBk ZWZpbmVDbGF1c2UuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMKaW5kZXggYTIxYWFkYWU3My4uN2M3NDU4 ZjkzMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCisrKyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYwpAQCAtNDczLDcgKzQ3Myw3IEBAIHRyYW5zZm9y bURlZmluZUNsYXVzZShQYXJzZVN0YXRlICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRv d0RlZiAqd2luZGVmLAogICogICAgICogb2Zmc2V0X2FyZyAvIGNvbXBvdW5kX29mZnNldF9hcmcg bXVzdCBub3QgY29udGFpbiBjb2x1bW4gcmVmcwogICoKICAqIFZvbGF0aWxlIGNhbGxlZXMgKGFu ZCBzZXF1ZW5jZSBvcGVyYXRpb25zKSBhcmUgcmVqZWN0ZWQgbGF0ZXIgaW4gdGhlCi0gKiBwbGFu bmVyIHZpYSB2YWxpZGF0ZV9ycHJfZGVmaW5lX3ZvbGF0aWxpdHkoKTsgc2VlIG9wdGltaXplci9w bGFuL3Jwci5jLgorICogcGxhbm5lciB0aW1lIGluIHN1YnF1ZXJ5X3BsYW5uZXIuCiAgKgogICog VGhlIHdhbGtlciB1c2VzIGEgcGhhc2UgdGFnIHRvIGtub3cgd2hpY2ggc3VidHJlZSBpdCBpcyBp bjogREVGSU5FCiAgKiBib2R5ICh0b3AtbGV2ZWwpLCBpbnNpZGUgYSBuYXYuYXJnLCBvciBpbnNp ZGUgYSBuYXYub2Zmc2V0X2FyZyAvCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cnByLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcnByLmgKaW5kZXggODAyZDJmMWRkNi4uOGUw YmM3ZWZjNSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Jwci5oCisrKyBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9ycHIuaApAQCAtNjcsNyArNjcsNiBAQAogI2RlZmluZSBSUFJF bGVtQ2FuU2tpcChlKQkJKChlKS0+bWluID09IDApCiAKIGV4dGVybiBMaXN0ICpjb2xsZWN0UGF0 dGVyblZhcmlhYmxlcyhSUFJQYXR0ZXJuTm9kZSAqcGF0dGVybik7Ci1leHRlcm4gdm9pZCB2YWxp ZGF0ZV9ycHJfZGVmaW5lX3ZvbGF0aWxpdHkoTGlzdCAqZGVmaW5lQ2xhdXNlKTsKIGV4dGVybiB2 b2lkIGJ1aWxkRGVmaW5lVmFyaWFibGVMaXN0KExpc3QgKmRlZmluZUNsYXVzZSwKIAkJCQkJCQkJ CUxpc3QgKipkZWZpbmVWYXJpYWJsZUxpc3QpOwogZXh0ZXJuIFJQUlBhdHRlcm4gKmJ1aWxkUlBS UGF0dGVybihSUFJQYXR0ZXJuTm9kZSAqcGF0dGVybiwgTGlzdCAqZGVmaW5lVmFyaWFibGVMaXN0 LApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0CmluZGV4IGMwMmM5ZDc1YTkuLmEwNzEwNDE1M2Yg MTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByLm91dAorKysgYi9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQKQEAgLTEyNDEsOCArMTI0MSw2IEBAIFdJTkRP VyB3IEFTICgKICAgICBERUZJTkUgQSBBUyBQUkVWKHByaWNlLCByYW5kb20oKTo6aW50KSA+IDAK ICk7CiBFUlJPUjogIHZvbGF0aWxlIGZ1bmN0aW9ucyBhcmUgbm90IGFsbG93ZWQgaW4gREVGSU5F IGNsYXVzZQotTElORSA3OiAgICAgREVGSU5FIEEgQVMgUFJFVihwcmljZSwgcmFuZG9tKCk6Omlu dCkgPiAwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBOb24tY29u c3RhbnQgb2Zmc2V0OiBzdWJxdWVyeSBhcyBvZmZzZXQKIFNFTEVDVCBwcmljZSBGUk9NIHN0b2Nr CiBXSU5ET1cgdyBBUyAoCkBAIC0xMjc4LDggKzEyNzYsNiBAQCBXSU5ET1cgdyBBUyAoCiAgICAg REVGSU5FIEEgQVMgUFJFVihwcmljZSArIHJhbmRvbSgpICogMCkgPj0gMAogKTsKIEVSUk9SOiAg dm9sYXRpbGUgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCBpbiBERUZJTkUgY2xhdXNlCi1MSU5F IDg6ICAgICBERUZJTkUgQSBBUyBQUkVWKHByaWNlICsgcmFuZG9tKCkgKiAwKSA+PSAwCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXgogLS0gbmV4dHZhbCBpcyB2b2xhdGls ZSAocGVyIHBnX3Byb2MpLCBzbyBpdCBpcyByZWplY3RlZCB2aWEgdGhlIEZ1bmNFeHByCiAtLSBw YXRoIHdpdGggdGhlICJ2b2xhdGlsZSBmdW5jdGlvbnMiIG1lc3NhZ2UKIENSRUFURSBTRVFVRU5D RSBycHJfc2VxOwpAQCAtMTI5Miw4ICsxMjg4LDYgQEAgV0lORE9XIHcgQVMgKAogICAgIERFRklO RSBBIEFTIHByaWNlID4gbmV4dHZhbCgncnByX3NlcScpCiApOwogRVJST1I6ICB2b2xhdGlsZSBm dW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIERFRklORSBjbGF1c2UKLUxJTkUgNzogICAgIERF RklORSBBIEFTIHByaWNlID4gbmV4dHZhbCgncnByX3NlcScpCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KIERST1AgU0VRVUVOQ0UgcnByX3NlcTsKIC0tIEEgdm9sYXRpbGUgREVG SU5FIGlzIG5vdyByZWplY3RlZCBpbiB0aGUgcGxhbm5lciwgbm90IGF0IHBhcnNlIHRpbWUsIHNv IGEKIC0tIHZpZXcgdGhhdCBoaWRlcyBvbmUgaXMgY3JlYXRlZCBzdWNjZXNzZnVsbHkgYW5kIG9u bHkgZXJyb3JzIHdoZW4gcmVhZC4KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcnByX2ludGVncmF0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByX2lu dGVncmF0aW9uLm91dAppbmRleCA4MGEzMmNjYTlhLi41NzkxM2E4ZjY5IDEwMDY0NAotLS0gYS9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9pbnRlZ3JhdGlvbi5vdXQKKysrIGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9ycHJfaW50ZWdyYXRpb24ub3V0CkBAIC0xNDA4LDggKzE0MDgs NiBAQCBXSU5ET1cgdyBBUyAoT1JERVIgQlkgaWQKICAgICBERUZJTkUgQiBBUyB2YWwgPiBQUkVW KHZhbCkgQU5EIHJhbmRvbSgpID49IDAuMCkKIE9SREVSIEJZIGlkOwogRVJST1I6ICB2b2xhdGls ZSBmdW5jdGlvbnMgYXJlIG5vdCBhbGxvd2VkIGluIERFRklORSBjbGF1c2UKLUxJTkUgNjogICAg IERFRklORSBCIEFTIHZhbCA+IFBSRVYodmFsKSBBTkQgcmFuZG9tKCkgPj0gMC4wKQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIEIxMC4g UlBSICsgQ29ycmVsYXRlZCBzdWJxdWVyeSBpbiBXSEVSRQogLS0gPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tIAoyLjM0LjEKCg== --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0002-refactor-gram.y.nocfbot" Content-Disposition: attachment; filename="v47-0002-refactor-gram.y.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2yly1 RnJvbSAyZDZjOGE4ODAxYzQ1Y2YyZTI2YTcyZjNhNTljZGMwYTE4Y2U0ZjhmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTc6NTI6NDcgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyAyLzZdIHJlZmFjdG9yIGdyYW0ueQoKLS0tCiBzcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55IHwg ODcgKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdl ZCwgNDUgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcGFyc2VyL2dyYW0ueSBiL3NyYy9iYWNrZW5kL3BhcnNlci9ncmFtLnkKaW5kZXggNGFl OTUxYWFlYi4uYWNlMmU3ZmQ1OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL2dyYW0u eQorKysgYi9zcmMvYmFja2VuZC9wYXJzZXIvZ3JhbS55CkBAIC0xNzczNCw5ICsxNzczNCwxMSBA QCByb3dfcGF0dGVybl9wcmltYXJ5OgogCQk7CiAKIHJvd19wYXR0ZXJuX3F1YW50aWZpZXJfb3B0 OgotCQkJLyogRU1QVFkgLSBubyBxdWFudGlmaWVyIG1lYW5zIGV4YWN0bHkgb25jZTsgQCQgaXMg dW51c2VkIHNpbmNlCi0JCQkgKiBtaW49bWF4PTEgbmV2ZXIgcHJvZHVjZXMgYW4gZXJyb3IgKi8K IAkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEVNUFRZIC0gbm8gcXVhbnRpZmllciBtZWFucyBleGFj dGx5IG9uY2U7IEAkIGlzIHVudXNlZAorCQkJCQkgKiBzaW5jZSBtaW49bWF4PTEgbmV2ZXIgcHJv ZHVjZXMgYW4gZXJyb3IKKwkJCQkJICovCiAJCQkJCSQkID0gKE5vZGUgKikgbWFrZVJQUlF1YW50 aWZpZXIoMSwgMSwgZmFsc2UsIEAkKTsKIAkJCQl9CiAJCQl8ICcqJwpAQCAtMTc3NDksMTUgKzE3 NzUxLDM0IEBAIHJvd19wYXR0ZXJuX3F1YW50aWZpZXJfb3B0OgogCQkJCX0KIAkJCXwgT3AKIAkJ CQl7Ci0JCQkJCS8qIEhhbmRsZSBzaW5nbGUgT3A6ID8gb3IgcmVsdWN0YW50IHF1YW50aWZpZXJz ICo/LCArPywgPz8gKi8KLQkJCQkJaWYgKHN0cmNtcCgkMSwgIj8iKSA9PSAwKQorCQkJCQlpZiAo c3RyY21wKCQxLCAiPyIpID09IDAgfHwgc3RyY21wKCQxLCAiP3wiKSA9PSAwKQorCQkJCQl7CiAJ CQkJCQkkJCA9IChOb2RlICopIG1ha2VSUFJRdWFudGlmaWVyKDAsIDEsIGZhbHNlLCBAMSk7Ci0J CQkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIio/IikgPT0gMCkKKworCQkJCQkJaWYgKHN0cmNtcCgk MSwgIj98IikgPT0gMCkKKwkJCQkJCQkoKFJQUlBhdHRlcm5Ob2RlICopICQkKS0+dHJhaWxpbmdf YWx0ID0gdHJ1ZTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChzdHJjbXAoJDEsICIqPyIpID09IDAg fHwgc3RyY21wKCQxLCAiKj98IikgPT0gMCkKKwkJCQkJewogCQkJCQkJJCQgPSAoTm9kZSAqKSBt YWtlUlBSUXVhbnRpZmllcigwLCBQR19JTlQzMl9NQVgsIHRydWUsIEAxKTsKLQkJCQkJZWxzZSBp ZiAoc3RyY21wKCQxLCAiKz8iKSA9PSAwKQorCisJCQkJCQlpZiAoc3RyY21wKCQxLCAiKj98Iikg PT0gMCkKKwkJCQkJCQkoKFJQUlBhdHRlcm5Ob2RlICopICQkKS0+dHJhaWxpbmdfYWx0ID0gdHJ1 ZTsKKwkJCQkJfQorCQkJCQllbHNlIGlmIChzdHJjbXAoJDEsICIrPyIpID09IDAgfHwgc3RyY21w KCQxLCAiKz98IikgPT0gMCkKKwkJCQkJewogCQkJCQkJJCQgPSAoTm9kZSAqKSBtYWtlUlBSUXVh bnRpZmllcigxLCBQR19JTlQzMl9NQVgsIHRydWUsIEAxKTsKLQkJCQkJZWxzZSBpZiAoc3RyY21w KCQxLCAiPz8iKSA9PSAwKQorCisJCQkJCQlpZiAoc3RyY21wKCQxLCAiKz98IikgPT0gMCkKKwkJ CQkJCQkoKFJQUlBhdHRlcm5Ob2RlICopICQkKS0+dHJhaWxpbmdfYWx0ID0gdHJ1ZTsKKwkJCQkJ fQorCQkJCQllbHNlIGlmIChzdHJjbXAoJDEsICI/PyIpID09IDAgfHwgc3RyY21wKCQxLCAiPz98 IikgPT0gMCkKKwkJCQkJewogCQkJCQkJJCQgPSAoTm9kZSAqKSBtYWtlUlBSUXVhbnRpZmllcigw LCAxLCB0cnVlLCBAMSk7CisKKwkJCQkJCWlmIChzdHJjbXAoJDEsICI/P3wiKSA9PSAwKQorCQkJ CQkJCSgoUlBSUGF0dGVybk5vZGUgKikgJCQpLT50cmFpbGluZ19hbHQgPSB0cnVlOworCQkJCQl9 CiAJCQkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIip8IikgPT0gMCkKIAkJCQkJewogCQkJCQkJJCQg PSAoTm9kZSAqKSBtYWtlUlBSUXVhbnRpZmllcigwLCBQR19JTlQzMl9NQVgsIGZhbHNlLCBAMSk7 CkBAIC0xNzc2NiwyNiArMTc3ODcsNyBAQCByb3dfcGF0dGVybl9xdWFudGlmaWVyX29wdDoKIAkJ CQkJZWxzZSBpZiAoc3RyY21wKCQxLCAiK3wiKSA9PSAwKQogCQkJCQl7CiAJCQkJCQkkJCA9IChO b2RlICopIG1ha2VSUFJRdWFudGlmaWVyKDEsIFBHX0lOVDMyX01BWCwgZmFsc2UsIEAxKTsKLQkJ CQkJCSgoUlBSUGF0dGVybk5vZGUgKikgJCQpLT50cmFpbGluZ19hbHQgPSB0cnVlOwotCQkJCQl9 Ci0JCQkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIj98IikgPT0gMCkKLQkJCQkJewotCQkJCQkJJCQg PSAoTm9kZSAqKSBtYWtlUlBSUXVhbnRpZmllcigwLCAxLCBmYWxzZSwgQDEpOwotCQkJCQkJKChS UFJQYXR0ZXJuTm9kZSAqKSAkJCktPnRyYWlsaW5nX2FsdCA9IHRydWU7Ci0JCQkJCX0KLQkJCQkJ ZWxzZSBpZiAoc3RyY21wKCQxLCAiKj98IikgPT0gMCkKLQkJCQkJewotCQkJCQkJJCQgPSAoTm9k ZSAqKSBtYWtlUlBSUXVhbnRpZmllcigwLCBQR19JTlQzMl9NQVgsIHRydWUsIEAxKTsKLQkJCQkJ CSgoUlBSUGF0dGVybk5vZGUgKikgJCQpLT50cmFpbGluZ19hbHQgPSB0cnVlOwotCQkJCQl9Ci0J CQkJCWVsc2UgaWYgKHN0cmNtcCgkMSwgIis/fCIpID09IDApCi0JCQkJCXsKLQkJCQkJCSQkID0g KE5vZGUgKikgbWFrZVJQUlF1YW50aWZpZXIoMSwgUEdfSU5UMzJfTUFYLCB0cnVlLCBAMSk7Ci0J CQkJCQkoKFJQUlBhdHRlcm5Ob2RlICopICQkKS0+dHJhaWxpbmdfYWx0ID0gdHJ1ZTsKLQkJCQkJ fQotCQkJCQllbHNlIGlmIChzdHJjbXAoJDEsICI/P3wiKSA9PSAwKQotCQkJCQl7Ci0JCQkJCQkk JCA9IChOb2RlICopIG1ha2VSUFJRdWFudGlmaWVyKDAsIDEsIHRydWUsIEAxKTsKKwogCQkJCQkJ KChSUFJQYXR0ZXJuTm9kZSAqKSAkJCktPnRyYWlsaW5nX2FsdCA9IHRydWU7CiAJCQkJCX0KIAkJ CQkJZWxzZQpAQCAtMTc3OTgsMTMgKzE3ODAwLDEzIEBAIHJvd19wYXR0ZXJuX3F1YW50aWZpZXJf b3B0OgogCQkJLyogUkVMVUNUQU5UIHF1YW50aWZpZXJzICh3aGVuIGxleGVyIHNlcGFyYXRlcyB0 b2tlbnMpICovCiAJCQl8ICcqJyBPcAogCQkJCXsKLQkJCQkJaWYgKHN0cmNtcCgkMiwgIj8iKSA9 PSAwKQotCQkJCQkJJCQgPSAoTm9kZSAqKSBtYWtlUlBSUXVhbnRpZmllcigwLCBQR19JTlQzMl9N QVgsIHRydWUsIEAxKTsKLQkJCQkJZWxzZSBpZiAoc3RyY21wKCQyLCAiP3wiKSA9PSAwKQorCQkJ CQlpZiAoc3RyY21wKCQyLCAiPyIpID09IDAgfHwgc3RyY21wKCQyLCAiP3wiKSA9PSAwKQogCQkJ CQl7CisJCQkJCQkkJCA9IChOb2RlICopIG1ha2VSUFJRdWFudGlmaWVyKDAsIFBHX0lOVDMyX01B WCwgdHJ1ZSwgQDEpOworCiAJCQkJCQkvKiAiQSogP3xCIiA9IHJlbHVjdGFudCAiQSo/IiBwbHVz IGFsdGVybmF0aW9uICovCi0JCQkJCQkkJCA9IChOb2RlICopIG1ha2VSUFJRdWFudGlmaWVyKDAs IFBHX0lOVDMyX01BWCwgdHJ1ZSwgQDEpOwotCQkJCQkJKChSUFJQYXR0ZXJuTm9kZSAqKSAkJCkt PnRyYWlsaW5nX2FsdCA9IHRydWU7CisJCQkJCQlpZiAoc3RyY21wKCQyLCAiP3wiKSA9PSAwKQor CQkJCQkJCSgoUlBSUGF0dGVybk5vZGUgKikgJCQpLT50cmFpbGluZ19hbHQgPSB0cnVlOwogCQkJ CQl9CiAJCQkJCWVsc2UKIAkJCQkJCWVyZXBvcnQoRVJST1IsCkBAIC0xNzgxNSwxMyArMTc4MTcs MTMgQEAgcm93X3BhdHRlcm5fcXVhbnRpZmllcl9vcHQ6CiAJCQkJfQogCQkJfCAnKycgT3AKIAkJ CQl7Ci0JCQkJCWlmIChzdHJjbXAoJDIsICI/IikgPT0gMCkKLQkJCQkJCSQkID0gKE5vZGUgKikg bWFrZVJQUlF1YW50aWZpZXIoMSwgUEdfSU5UMzJfTUFYLCB0cnVlLCBAMSk7Ci0JCQkJCWVsc2Ug aWYgKHN0cmNtcCgkMiwgIj98IikgPT0gMCkKKwkJCQkJaWYgKHN0cmNtcCgkMiwgIj8iKSA9PSAw IHx8IHN0cmNtcCgkMiwgIj98IikgPT0gMCkKIAkJCQkJeworCQkJCQkJJCQgPSAoTm9kZSAqKSBt YWtlUlBSUXVhbnRpZmllcigxLCBQR19JTlQzMl9NQVgsIHRydWUsIEAxKTsKKwogCQkJCQkJLyog IkErID98QiIgPSByZWx1Y3RhbnQgIkErPyIgcGx1cyBhbHRlcm5hdGlvbiAqLwotCQkJCQkJJCQg PSAoTm9kZSAqKSBtYWtlUlBSUXVhbnRpZmllcigxLCBQR19JTlQzMl9NQVgsIHRydWUsIEAxKTsK LQkJCQkJCSgoUlBSUGF0dGVybk5vZGUgKikgJCQpLT50cmFpbGluZ19hbHQgPSB0cnVlOworCQkJ CQkJaWYgKHN0cmNtcCgkMiwgIj98IikgPT0gMCkKKwkJCQkJCQkoKFJQUlBhdHRlcm5Ob2RlICop ICQkKS0+dHJhaWxpbmdfYWx0ID0gdHJ1ZTsKIAkJCQkJfQogCQkJCQllbHNlCiAJCQkJCQllcmVw b3J0KEVSUk9SLApAQCAtMTc4MzgsMTMgKzE3ODQwLDEzIEBAIHJvd19wYXR0ZXJuX3F1YW50aWZp ZXJfb3B0OgogCQkJCQkJCQllcnJtc2coImludmFsaWQgcXVhbnRpZmllciBjb21iaW5hdGlvbjog XCIlcyVzXCIiLCAkMSwgJDIpLAogCQkJCQkJCQllcnJoaW50KCJEaWQgeW91IG1lYW4gXCI/P1wi IGZvciByZWx1Y3RhbnQgcXVhbnRpZmllcj8iKSwKIAkJCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9u KEAxKSk7Ci0JCQkJCWlmIChzdHJjbXAoJDIsICI/IikgPT0gMCkKLQkJCQkJCSQkID0gKE5vZGUg KikgbWFrZVJQUlF1YW50aWZpZXIoMCwgMSwgdHJ1ZSwgQDEpOwotCQkJCQllbHNlIGlmIChzdHJj bXAoJDIsICI/fCIpID09IDApCisJCQkJCWlmIChzdHJjbXAoJDIsICI/IikgPT0gMCB8fCBzdHJj bXAoJDIsICI/fCIpID09IDApCiAJCQkJCXsKKwkJCQkJCSQkID0gKE5vZGUgKikgbWFrZVJQUlF1 YW50aWZpZXIoMCwgMSwgdHJ1ZSwgQDEpOworCiAJCQkJCQkvKiAiQT8gP3xCIiA9IHJlbHVjdGFu dCAiQT8/IiBwbHVzIGFsdGVybmF0aW9uICovCi0JCQkJCQkkJCA9IChOb2RlICopIG1ha2VSUFJR dWFudGlmaWVyKDAsIDEsIHRydWUsIEAxKTsKLQkJCQkJCSgoUlBSUGF0dGVybk5vZGUgKikgJCQp LT50cmFpbGluZ19hbHQgPSB0cnVlOworCQkJCQkJaWYgKHN0cmNtcCgkMiwgIj98IikgPT0gMCkK KwkJCQkJCQkoKFJQUlBhdHRlcm5Ob2RlICopICQkKS0+dHJhaWxpbmdfYWx0ID0gdHJ1ZTsKIAkJ CQkJfQogCQkJCQllbHNlCiAJCQkJCQllcmVwb3J0KEVSUk9SLApAQCAtMjE0MDMsNiArMjE0MDUs NyBAQCBtYWtlUlBSUXVhbnRpZmllcihpbnQzMiBtaW4sIGludDMyIG1heCwgYm9vbCByZWx1Y3Rh bnQsIGludCBsb2NhdGlvbikKIAluLT5taW4gPSBtaW47CiAJbi0+bWF4ID0gbWF4OwogCW4tPnJl bHVjdGFudCA9IHJlbHVjdGFudDsKKwluLT50cmFpbGluZ19hbHQgPSBmYWxzZTsKIAluLT5sb2Nh dGlvbiA9IGxvY2F0aW9uOwogCXJldHVybiBuOwogfQotLSAKMi4zNC4xCgo= --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0006-refactor-transformDefineClause.nocfbot" Content-Disposition: attachment; filename="v47-0006-refactor-transformDefineClause.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2yls0 RnJvbSA4NmU5N2EwNjBlNGQ0MTgyYWJjMDI2NTQwZjY2N2ZiY2E3YjE4ZDk1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTg6NDk6MTcgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyA2LzZdIHJlZmFjdG9yIHRyYW5zZm9ybURlZmluZUNsYXVzZQoKVGhlIGFsbG93ZWQgbmF2LWV4 cHJlc3Npb24gY29tYmluYXRpb24gaXMgbGltaXRlZCwgdGhlcmVmb3JlLCBoYXNfY29sdW1uX3Jl ZiBpcwpub3QgbmVjZXNzYXJ5LiAgQ29sdW1uIHJlZmVyZW5jZSBjaGVja3MgY2FuIHVzZSBjb250 YWluX3Zhcl9jbGF1c2UsIGFuZCBpdCdzCmNoZWFwLgoKQWxzbywgSSBtYWRlIHRoZSBmb2xsb3dp bmcgZXJyb3IgbWVzc2FnZSBjaGFuZ2U6CgotRVJST1I6ICByb3cgcGF0dGVybiBuYXZpZ2F0aW9u IG9mZnNldCBtdXN0IGJlIGEgcnVuLXRpbWUgY29uc3RhbnQKK0VSUk9SOiAgcm93IHBhdHRlcm4g bmF2aWdhdGlvbiBvZmZzZXQgZXhwcmVzc2lvbiBtdXN0IG5vdCBjb250YWluIGNvbHVtbiByZWZl cmVuY2VzCi0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jICAgIHwgMTAyICsrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIu b3V0IHwgICA2ICstCiAyIGZpbGVzIGNoYW5nZWQsIDI2IGluc2VydGlvbnMoKyksIDgyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYyBiL3Ny Yy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYwppbmRleCA1OTYyNGM3YTQ2Li5jNGQ1NDQ5ZWE2 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMKKysrIGIvc3JjL2Jh Y2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCkBAIC0zOCw4ICszOCw2IEBAIHR5cGVkZWYgZW51bQog ewogCURFRklORV9QSEFTRV9CT0RZLAkJCS8qIHRvcC1sZXZlbCBERUZJTkUgZXhwcmVzc2lvbiAq LwogCURFRklORV9QSEFTRV9OQVZfQVJHLAkJLyogaW5zaWRlIGFuIG91dGVyIG5hdidzIGFyZyBz dWJ0cmVlICovCi0JREVGSU5FX1BIQVNFX05BVl9PRkZTRVQsCS8qIGluc2lkZSBhbiBvdXRlciBu YXYncyBvZmZzZXRfYXJnIC8KLQkJCQkJCQkJICogY29tcG91bmRfb2Zmc2V0X2FyZyAqLwogfSBE ZWZpbmVQaGFzZTsKIAogdHlwZWRlZiBzdHJ1Y3QKQEAgLTQ3LDcgKzQ1LDYgQEAgdHlwZWRlZiBz dHJ1Y3QKIAlQYXJzZVN0YXRlICpwc3RhdGU7CiAJRGVmaW5lUGhhc2UgcGhhc2U7CiAJaW50CQkJ bmF2X2NvdW50OwkJLyogUlBSTmF2RXhwciBub2RlcyBzZWVuIGluIGN1cnJlbnQgbmF2LmFyZyAq LwotCWJvb2wJCWhhc19jb2x1bW5fcmVmOyAvKiBWYXIgc2VlbiBpbiBjdXJyZW50IG5hdiBzY29w ZSAqLwogCVJQUk5hdktpbmQJaW5uZXJfa2luZDsJCS8qIGtpbmQgb2YgZmlyc3QgbmVzdGVkIG5h diBpbiBjdXJyZW50IGFyZyAqLwogfSBEZWZpbmVXYWxrQ3R4OwogCkBAIC00MjcsNyArNDI0LDYg QEAgdHJhbnNmb3JtRGVmaW5lQ2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93Q2xhdXNl ICp3YywgV2luZG93RGVmICp3aW5kZWYsCiAJCWN0eC5wc3RhdGUgPSBwc3RhdGU7CiAJCWN0eC5w aGFzZSA9IERFRklORV9QSEFTRV9CT0RZOwogCQljdHgubmF2X2NvdW50ID0gMDsKLQkJY3R4Lmhh c19jb2x1bW5fcmVmID0gZmFsc2U7CiAJCWN0eC5pbm5lcl9raW5kID0gMDsKIAkJKHZvaWQpIGRl ZmluZV93YWxrZXIoKE5vZGUgKikgdGUtPmV4cHIsICZjdHgpOwogCX0KQEAgLTQ5MSwxMiArNDg3 LDYgQEAgZGVmaW5lX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCWlmIChub2Rl ID09IE5VTEwpCiAJCXJldHVybiBmYWxzZTsKIAotCS8qIFZhciBzaWdodGluZyBmZWVkcyB0aGUg Y29sdW1uLXJlZiBydWxlIGZvciB0aGUgZW5jbG9zaW5nIG5hdiBzY29wZS4gKi8KLQlpZiAoSXNB KG5vZGUsIFZhcikgJiYKLQkJKGN0eC0+cGhhc2UgPT0gREVGSU5FX1BIQVNFX05BVl9BUkcgfHwK LQkJIGN0eC0+cGhhc2UgPT0gREVGSU5FX1BIQVNFX05BVl9PRkZTRVQpKQotCQljdHgtPmhhc19j b2x1bW5fcmVmID0gdHJ1ZTsKLQogCWlmIChJc0Eobm9kZSwgUlBSTmF2RXhwcikpCiAJewogCQlS UFJOYXZFeHByICpuYXYgPSAoUlBSTmF2RXhwciAqKSBub2RlOwpAQCAtNTExLDMzICs1MDEsMzkg QEAgZGVmaW5lX3dhbGtlcihOb2RlICpub2RlLCB2b2lkICpjb250ZXh0KQogCQkJaWYgKGN0eC0+ bmF2X2NvdW50ID09IDApCiAJCQkJY3R4LT5pbm5lcl9raW5kID0gbmF2LT5raW5kOwogCQkJY3R4 LT5uYXZfY291bnQrKzsKKworCQkJaWYgKGNvbnRhaW5fdmFyX2NsYXVzZSgoTm9kZSAqKSBuYXYt Pm9mZnNldF9hcmcpKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQllcnJjb2RlKEVSUkNPREVf RkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKKwkJCQkJCWVycm1zZygicm93IHBhdHRlcm4gbmF2aWdh dGlvbiBvZmZzZXQgZXhwcmVzc2lvbiBtdXN0IG5vdCBjb250YWluIGNvbHVtbiByZWZlcmVuY2Vz IiksCisJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24oY3R4LT5wc3RhdGUsIGV4cHJMb2NhdGlvbigo Tm9kZSAqKSBuYXYtPm9mZnNldF9hcmcpKSk7CisKIAkJCXJldHVybiBleHByZXNzaW9uX3RyZWVf d2Fsa2VyKG5vZGUsIGRlZmluZV93YWxrZXIsIGN0eCk7CiAJCX0KLQotCQlpZiAoY3R4LT5waGFz ZSA9PSBERUZJTkVfUEhBU0VfTkFWX09GRlNFVCkKKwkJZWxzZQogCQl7CiAJCQkvKgotCQkJICog TmF2cyBpbnNpZGUgb2Zmc2V0X2FyZyBhcmUgdW51c3VhbCBidXQgbm90IGRpcmVjdGx5IGJhbm5l ZDsgdGhlCi0JCQkgKiBjb25zdGFudC1vZmZzZXQgcnVsZSB3aWxsIGNhdGNoIGFueSBWYXIgb3Ig dm9sYXRpbGUgdGhleQotCQkJICogY29udGFpbi4KKwkJCSAqIFBIQVNFX0JPRFk6IHRoaXMgaXMg YW4gb3V0ZXIgbmF2IGF0IHRvcCBsZXZlbC4gIFdhbGsgYXJnIGZpcnN0CisJCQkgKiB0byBjb2xs ZWN0IG5lc3RpbmcgLyBjb2x1bW4tcmVmIHN0YXRlLCB0aGVuIHZhbGlkYXRlIGFuZCAoZm9yCisJ CQkgKiBjb21wb3VuZCBmb3JtcykgZmxhdHRlbiwgdGhlbiB3YWxrIG9mZnNldChzKS4KIAkJCSAq LwotCQkJcmV0dXJuIGV4cHJlc3Npb25fdHJlZV93YWxrZXIobm9kZSwgZGVmaW5lX3dhbGtlciwg Y3R4KTsKLQkJfQotCi0JCS8qCi0JCSAqIFBIQVNFX0JPRFk6IHRoaXMgaXMgYW4gb3V0ZXIgbmF2 IGF0IHRvcCBsZXZlbC4gIFdhbGsgYXJnIGZpcnN0IHRvCi0JCSAqIGNvbGxlY3QgbmVzdGluZyAv IGNvbHVtbi1yZWYgc3RhdGUsIHRoZW4gdmFsaWRhdGUgYW5kIChmb3IgY29tcG91bmQKLQkJICog Zm9ybXMpIGZsYXR0ZW4sIHRoZW4gd2FsayBvZmZzZXQocykuCi0JCSAqLwotCQl7Ci0JCQlEZWZp bmVXYWxrQ3R4IHNhdmVkID0gKmN0eDsKIAkJCWJvb2wJCW91dGVyX3BoeXMgPSAobmF2LT5raW5k ID09IFJQUl9OQVZfUFJFViB8fAogCQkJCQkJCQkJICBuYXYtPmtpbmQgPT0gUlBSX05BVl9ORVhU KTsKLQkJCWJvb2wJCWZsYXR0ZW5lZCA9IGZhbHNlOworCisJCQlpZiAoIWNvbnRhaW5fdmFyX2Ns YXVzZSgoTm9kZSAqKSBuYXYtPmFyZykpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNv ZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQkJZXJybXNnKCJhcmd1bWVudCBvZiByb3cg cGF0dGVybiBuYXZpZ2F0aW9uIG9wZXJhdGlvbiBtdXN0IGluY2x1ZGUgYXQgbGVhc3Qgb25lIGNv bHVtbiByZWZlcmVuY2UiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihjdHgtPnBzdGF0ZSwg bmF2LT5sb2NhdGlvbikpOworCisJCQlpZiAoY29udGFpbl92YXJfY2xhdXNlKChOb2RlICopIG5h di0+b2Zmc2V0X2FyZykpCisJCQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJCWVycmNvZGUoRVJSQ09E RV9GRUFUVVJFX05PVF9TVVBQT1JURUQpLAorCQkJCQkJZXJybXNnKCJyb3cgcGF0dGVybiBuYXZp Z2F0aW9uIG9mZnNldCBleHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29sdW1uIHJlZmVyZW5j ZXMiKSwKKwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihjdHgtPnBzdGF0ZSwgZXhwckxvY2F0aW9u KChOb2RlICopIG5hdi0+b2Zmc2V0X2FyZykpKTsKIAogCQkJY3R4LT5waGFzZSA9IERFRklORV9Q SEFTRV9OQVZfQVJHOwogCQkJY3R4LT5uYXZfY291bnQgPSAwOwotCQkJY3R4LT5oYXNfY29sdW1u X3JlZiA9IGZhbHNlOwogCQkJY3R4LT5pbm5lcl9raW5kID0gMDsKIAkJCSh2b2lkKSBkZWZpbmVf d2Fsa2VyKChOb2RlICopIG5hdi0+YXJnLCBjdHgpOwogCkBAIC01NzksMTcgKzU3NSw2IEBAIGRl ZmluZV93YWxrZXIoTm9kZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJCQkJbmF2LT5vZmZzZXRf YXJnID0gaW5uZXItPm9mZnNldF9hcmc7CiAJCQkJCW5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZyA9 IG5hdi0+b2Zmc2V0X2FyZzsKIAkJCQkJbmF2LT5hcmcgPSBpbm5lci0+YXJnOwotCQkJCQlmbGF0 dGVuZWQgPSB0cnVlOwotCi0JCQkJCS8qCi0JCQkJCSAqIFRoZSBmbGF0dGVuZWQgYXJndW1lbnQg bXVzdCBpbmNsdWRlIGEgY29sdW1uIHJlZmVyZW5jZSwKLQkJCQkJICoganVzdCBsaWtlIHRoZSBz aW1wbGUtbmF2IGNhc2UgYmVsb3cuCi0JCQkJCSAqLwotCQkJCQlpZiAoIWN0eC0+aGFzX2NvbHVt bl9yZWYpCi0JCQkJCQllcmVwb3J0KEVSUk9SLAotCQkJCQkJCQllcnJjb2RlKEVSUkNPREVfU1lO VEFYX0VSUk9SKSwKLQkJCQkJCQkJZXJybXNnKCJhcmd1bWVudCBvZiByb3cgcGF0dGVybiBuYXZp Z2F0aW9uIG9wZXJhdGlvbiBtdXN0IGluY2x1ZGUgYXQgbGVhc3Qgb25lIGNvbHVtbiByZWZlcmVu Y2UiKSwKLQkJCQkJCQkJcGFyc2VyX2VycnBvc2l0aW9uKGN0eC0+cHN0YXRlLCBuYXYtPmxvY2F0 aW9uKSk7CiAJCQkJfQogCQkJCWVsc2UgaWYgKCFvdXRlcl9waHlzICYmIGlubmVyX3BoeXMpCiAJ CQkJCWVyZXBvcnQoRVJST1IsCkBAIC02MTAsNDggKzU5NSw3IEBAIGRlZmluZV93YWxrZXIoTm9k ZSAqbm9kZSwgdm9pZCAqY29udGV4dCkKIAkJCQkJCQllcnJoaW50KCJPbmx5IFBSRVYoRklSU1Qo KSksIFBSRVYoTEFTVCgpKSwgTkVYVChGSVJTVCgpKSwgYW5kIE5FWFQoTEFTVCgpKSBjb21wb3Vu ZCBmb3JtcyBhcmUgYWxsb3dlZC4iKSwKIAkJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24oY3R4LT5w c3RhdGUsIG5hdi0+bG9jYXRpb24pKTsKIAkJCX0KLQkJCWVsc2UgaWYgKCFjdHgtPmhhc19jb2x1 bW5fcmVmKQotCQkJewotCQkJCWVyZXBvcnQoRVJST1IsCi0JCQkJCQllcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKLQkJCQkJCWVycm1zZygiYXJndW1lbnQgb2Ygcm93IHBhdHRlcm4gbmF2 aWdhdGlvbiBvcGVyYXRpb24gbXVzdCBpbmNsdWRlIGF0IGxlYXN0IG9uZSBjb2x1bW4gcmVmZXJl bmNlIiksCi0JCQkJCQlwYXJzZXJfZXJycG9zaXRpb24oY3R4LT5wc3RhdGUsIG5hdi0+bG9jYXRp b24pKTsKLQkJCX0KIAotCQkJLyoKLQkJCSAqIFdhbGsgb2Zmc2V0IGFyZyhzKSBpbiBQSEFTRV9O QVZfT0ZGU0VUIHRvIGVuZm9yY2UgdGhlCi0JCQkgKiBjb25zdGFudC1vZmZzZXQgcnVsZS4gIEZv ciBjb21wb3VuZCBmb3JtcywgYm90aCB0aGUgaW5uZXIKLQkJCSAqIChwb3N0LWZsYXR0ZW4gbmF2 LT5vZmZzZXRfYXJnKSBhbmQgb3V0ZXIgKGNvbXBvdW5kX29mZnNldF9hcmcpCi0JCQkgKiBvZmZz ZXRzIG11c3QgYmUgY29uc3RhbnRzOyB0aGUgaW5uZXIncyBjb2x1bW4tcmVmIHN0YXR1cyB3YXMK LQkJCSAqIG5vdCBzZXBhcmF0ZWx5IHRyYWNrZWQgZHVyaW5nIHRoZSBQSEFTRV9OQVZfQVJHIHdh bGsgKHdoaWNoCi0JCQkgKiBvbmx5IGNoZWNrcyB0aGF0IG5hdi5hcmcgYXMgYSB3aG9sZSBoYXMg YXQgbGVhc3Qgb25lIFZhciksIHNvCi0JCQkgKiBpdCBpcyByZS13YWxrZWQgaGVyZSB0byBjYXRj aCBjb2x1bW4gcmVmZXJlbmNlcyB0aGUgaW5uZXIKLQkJCSAqIG9mZnNldCB3b3VsZCBoYXZlIGxl YWtlZC4KLQkJCSAqLwotCQkJY3R4LT5waGFzZSA9IERFRklORV9QSEFTRV9OQVZfT0ZGU0VUOwot Ci0JCQlpZiAobmF2LT5vZmZzZXRfYXJnICE9IE5VTEwpCi0JCQl7Ci0JCQkJY3R4LT5oYXNfY29s dW1uX3JlZiA9IGZhbHNlOwotCQkJCSh2b2lkKSBkZWZpbmVfd2Fsa2VyKChOb2RlICopIG5hdi0+ b2Zmc2V0X2FyZywgY3R4KTsKLQkJCQlpZiAoY3R4LT5oYXNfY29sdW1uX3JlZikKLQkJCQkJZXJl cG9ydChFUlJPUiwKLQkJCQkJCQllcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVE KSwKLQkJCQkJCQllcnJtc2coInJvdyBwYXR0ZXJuIG5hdmlnYXRpb24gb2Zmc2V0IG11c3QgYmUg YSBydW4tdGltZSBjb25zdGFudCIpLAotCQkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihjdHgtPnBz dGF0ZSwgZXhwckxvY2F0aW9uKChOb2RlICopIG5hdi0+b2Zmc2V0X2FyZykpKTsKLQkJCX0KLQkJ CWlmIChmbGF0dGVuZWQgJiYgbmF2LT5jb21wb3VuZF9vZmZzZXRfYXJnICE9IE5VTEwpCi0JCQl7 Ci0JCQkJY3R4LT5oYXNfY29sdW1uX3JlZiA9IGZhbHNlOwotCQkJCSh2b2lkKSBkZWZpbmVfd2Fs a2VyKChOb2RlICopIG5hdi0+Y29tcG91bmRfb2Zmc2V0X2FyZywgY3R4KTsKLQkJCQlpZiAoY3R4 LT5oYXNfY29sdW1uX3JlZikKLQkJCQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCQllcnJjb2RlKEVS UkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKLQkJCQkJCQllcnJtc2coInJvdyBwYXR0ZXJu IG5hdmlnYXRpb24gb2Zmc2V0IG11c3QgYmUgYSBydW4tdGltZSBjb25zdGFudCIpLAotCQkJCQkJ CXBhcnNlcl9lcnJwb3NpdGlvbihjdHgtPnBzdGF0ZSwgZXhwckxvY2F0aW9uKChOb2RlICopIG5h di0+Y29tcG91bmRfb2Zmc2V0X2FyZykpKTsKLQkJCX0KLQotCQkJKmN0eCA9IHNhdmVkOwogCQkJ cmV0dXJuIGZhbHNlOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9ycHIub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0CmluZGV4IGEw NzEwNDE1M2YuLmUzZmI0MTQ1OWEgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvcnByLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQKQEAgLTEy MDQsNyArMTIwNCw3IEBAIFdJTkRPVyB3IEFTICgKICAgICBQQVRURVJOIChBKQogICAgIERFRklO RSBBIEFTIFBSRVYocHJpY2UsIHByaWNlKSA+IDAKICk7Ci1FUlJPUjogIHJvdyBwYXR0ZXJuIG5h dmlnYXRpb24gb2Zmc2V0IG11c3QgYmUgYSBydW4tdGltZSBjb25zdGFudAorRVJST1I6ICByb3cg cGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBleHByZXNzaW9uIG11c3Qgbm90IGNvbnRhaW4gY29s dW1uIHJlZmVyZW5jZXMKIExJTkUgNzogICAgIERFRklORSBBIEFTIFBSRVYocHJpY2UsIHByaWNl KSA+IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIC0tIE5vbi1jb25z dGFudCBvZmZzZXQ6IGNvbHVtbiByZWZlcmVuY2UgaW4gY29tcG91bmQgaW5uZXIgb2Zmc2V0CkBA IC0xMjE2LDcgKzEyMTYsNyBAQCBXSU5ET1cgdyBBUyAoCiAgICAgUEFUVEVSTiAoQSkKICAgICBE RUZJTkUgQSBBUyBQUkVWKExBU1QocHJpY2UsIHByaWNlKSwgMikgPiAwCiApOwotRVJST1I6ICBy b3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBtdXN0IGJlIGEgcnVuLXRpbWUgY29uc3RhbnQK K0VSUk9SOiAgcm93IHBhdHRlcm4gbmF2aWdhdGlvbiBvZmZzZXQgZXhwcmVzc2lvbiBtdXN0IG5v dCBjb250YWluIGNvbHVtbiByZWZlcmVuY2VzCiBMSU5FIDc6ICAgICBERUZJTkUgQSBBUyBQUkVW KExBU1QocHJpY2UsIHByaWNlKSwgMikgPiAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF4KIC0tIE5vbi1jb25zdGFudCBvZmZzZXQ6IGNvbHVtbiByZWZlcmVuY2Ug aW4gY29tcG91bmQgb3V0ZXIgb2Zmc2V0CkBAIC0xMjI4LDcgKzEyMjgsNyBAQCBXSU5ET1cgdyBB UyAoCiAgICAgUEFUVEVSTiAoQSkKICAgICBERUZJTkUgQSBBUyBQUkVWKExBU1QocHJpY2UsIDEp LCBwcmljZSkgPiAwCiApOwotRVJST1I6ICByb3cgcGF0dGVybiBuYXZpZ2F0aW9uIG9mZnNldCBt dXN0IGJlIGEgcnVuLXRpbWUgY29uc3RhbnQKK0VSUk9SOiAgcm93IHBhdHRlcm4gbmF2aWdhdGlv biBvZmZzZXQgZXhwcmVzc2lvbiBtdXN0IG5vdCBjb250YWluIGNvbHVtbiByZWZlcmVuY2VzCiBM SU5FIDc6ICAgICBERUZJTkUgQSBBUyBQUkVWKExBU1QocHJpY2UsIDEpLCBwcmljZSkgPiAwCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeCiAtLSBOb24tY29u c3RhbnQgb2Zmc2V0OiB2b2xhdGlsZSBmdW5jdGlvbiBhcyBvZmZzZXQKLS0gCjIuMzQuMQoK --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0004-refactor-validateRPRPatternVarCount.nocfbot" Content-Disposition: attachment; filename="v47-0004-refactor-validateRPRPatternVarCount.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2ym83 RnJvbSBiZjZiMDljMjMyZTJkMGVlY2IxMjk4NGQxM2UzMjgzODYyYmUyZmU4IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTg6MzA6NTggKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyA0LzZdIHJlZmFjdG9yIHZhbGlkYXRlUlBSUGF0dGVyblZhckNvdW50Cgp2YWxpZGF0ZVJQUlBh dHRlcm5WYXJDb3VudCgpIGlzIHJlY3Vyc2l2ZS4gVXNpbmcgdGhlIGBycERlZnMgIT0gTlVMTGAg c2VudGluZWwKdG8gZ2F0ZSB0aGUgIkRFRklORSB2YXJpYWJsZSBub3QgdXNlZCBpbiBQQVRURVJO IiBjaGVjayBhdCB0aGUgb3V0ZXJtb3N0IGNhbGwKbGV2ZWwgaXMgYXdrd2FyZC4gVGhhdCBjcm9z cy1jaGVjayBvbmx5IG5lZWRzIHRvIHJ1biBvbmNlOyBpdCBpcyBiZXR0ZXIKZXhwcmVzc2VkIGlu IHRoZSBjYWxsZXIsIGB0cmFuc2Zvcm1EZWZpbmVDbGF1c2UoKWAuCi0tLQogc3JjL2JhY2tlbmQv cGFyc2VyL3BhcnNlX3Jwci5jIHwgODIgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0t LQogMSBmaWxlIGNoYW5nZWQsIDM2IGluc2VydGlvbnMoKyksIDQ2IGRlbGV0aW9ucygtKQoKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYyBiL3NyYy9iYWNrZW5kL3Bh cnNlci9wYXJzZV9ycHIuYwppbmRleCA3Yzc0NThmOTMzLi44NTIxYzhlZTlmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2Vy L3BhcnNlX3Jwci5jCkBAIC01Myw3ICs1Myw3IEBAIHR5cGVkZWYgc3RydWN0CiAKIC8qIEZvcndh cmQgZGVjbGFyYXRpb25zICovCiBzdGF0aWMgdm9pZCB2YWxpZGF0ZVJQUlBhdHRlcm5WYXJDb3Vu dChQYXJzZVN0YXRlICpwc3RhdGUsIFJQUlBhdHRlcm5Ob2RlICpub2RlLAotCQkJCQkJCQkJICAg TGlzdCAqcnBEZWZzLCBMaXN0ICoqdmFyTmFtZXMpOworCQkJCQkJCQkJICAgTGlzdCAqKnZhck5h bWVzKTsKIHN0YXRpYyBMaXN0ICp0cmFuc2Zvcm1EZWZpbmVDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0 YXRlLCBXaW5kb3dDbGF1c2UgKndjLAogCQkJCQkJCQkgICBXaW5kb3dEZWYgKndpbmRlZiwgTGlz dCAqKnRhcmdldGxpc3QpOwogc3RhdGljIGJvb2wgZGVmaW5lX3dhbGtlcihOb2RlICpub2RlLCB2 b2lkICpjb250ZXh0KTsKQEAgLTE5MSwxNSArMTkxLDEzIEBAIHRyYW5zZm9ybVJQUihQYXJzZVN0 YXRlICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRvd0RlZiAqd2luZGVmLAogICogVGhy b3dzIGFuIGVycm9yIGlmIHRoZSBudW1iZXIgb2YgdW5pcXVlIHZhcmlhYmxlcyB3b3VsZCByZXF1 aXJlIGEgdmFySWQKICAqIGdyZWF0ZXIgdGhhbiBSUFJfVkFSSURfTUFYLgogICoKLSAqIElmIHJw RGVmcyBpcyBub24tTlVMTCwgZWFjaCBERUZJTkUgdmFyaWFibGUgbmFtZSBpcyBhbHNvIHZhbGlk YXRlZCBhZ2FpbnN0Ci0gKiB2YXJOYW1lczsgYW55IERFRklORSBuYW1lIG5vdCBwcmVzZW50IGlu IFBBVFRFUk4gaXMgcmVqZWN0ZWQgd2l0aCBhbiBlcnJvci4KLSAqIHZhck5hbWVzIGl0c2VsZiBp cyBub3QgZXh0ZW5kZWQgYnkgdGhpcyBzdGVwIC0tIGl0IGNhcnJpZXMgb25seSBQQVRURVJOCi0g KiB2YXJpYWJsZSBuYW1lcywgd2hpY2ggaXMgd2hhdCB0cmFuc2Zvcm1Db2x1bW5SZWYgY2hlY2tz IHZpYQotICogcF9ycHJfcGF0dGVybl92YXJzIHRvIGlkZW50aWZ5IHBhdHRlcm4gdmFyaWFibGUg cXVhbGlmaWVycy4KKyAqIHZhck5hbWVzIGNhcnJpZXMgb25seSBQQVRURVJOIHZhcmlhYmxlIG5h bWVzLCB3aGljaCBpcyB3aGF0CisgKiB0cmFuc2Zvcm1Db2x1bW5SZWYgY2hlY2tzIHZpYSBwX3Jw cl9wYXR0ZXJuX3ZhcnMgdG8gaWRlbnRpZnkgcGF0dGVybiB2YXJpYWJsZQorICogcXVhbGlmaWVy cy4KICAqLwogc3RhdGljIHZvaWQKIHZhbGlkYXRlUlBSUGF0dGVyblZhckNvdW50KFBhcnNlU3Rh dGUgKnBzdGF0ZSwgUlBSUGF0dGVybk5vZGUgKm5vZGUsCi0JCQkJCQkgICBMaXN0ICpycERlZnMs IExpc3QgKip2YXJOYW1lcykKKwkJCQkJCSAgIExpc3QgKip2YXJOYW1lcykKIHsKIAkvKiBQYXR0 ZXJuIG5vZGUgbXVzdCBleGlzdCAtIHBhcnNlciBhbHdheXMgcHJvdmlkZXMgbm9uLU5VTEwgcm9v dCAqLwogCUFzc2VydChub2RlICE9IE5VTEwpOwpAQCAtMjU0LDM5ICsyNTIsMTAgQEAgdmFsaWRh dGVSUFJQYXR0ZXJuVmFyQ291bnQoUGFyc2VTdGF0ZSAqcHN0YXRlLCBSUFJQYXR0ZXJuTm9kZSAq bm9kZSwKIAkJCS8qIFJlY3Vyc2UgaW50byBjaGlsZHJlbiAqLwogCQkJZm9yZWFjaF9ub2RlKFJQ UlBhdHRlcm5Ob2RlLCBjaGlsZCwgbm9kZS0+Y2hpbGRyZW4pCiAJCQl7Ci0JCQkJdmFsaWRhdGVS UFJQYXR0ZXJuVmFyQ291bnQocHN0YXRlLCBjaGlsZCwgTlVMTCwgdmFyTmFtZXMpOworCQkJCXZh bGlkYXRlUlBSUGF0dGVyblZhckNvdW50KHBzdGF0ZSwgY2hpbGQsIHZhck5hbWVzKTsKIAkJCX0K IAkJCWJyZWFrOwogCX0KLQotCS8qCi0JICogQWZ0ZXIgdGhlIHRvcC1sZXZlbCBjYWxsLCB2YWxp ZGF0ZSB0aGF0IGV2ZXJ5IERFRklORSB2YXJpYWJsZSBuYW1lIGlzCi0JICogcHJlc2VudCBpbiB0 aGUgUEFUVEVSTiB2YXJpYWJsZSBsaXN0OyByZWplY3QgbmFtZXMgbm90IHVzZWQgaW4gUEFUVEVS Ti4KLQkgKiBUaGlzIGlzIG9ubHkgZG9uZSBvbmNlIGF0IHRoZSBvdXRlcm1vc3QgcmVjdXJzaW9u IGxldmVsLCBkZXRlY3RlZCBieQotCSAqIHJwRGVmcyBiZWluZyBub24tTlVMTCAocmVjdXJzaXZl IGNhbGxzIHBhc3MgTlVMTCkuCi0JICovCi0JaWYgKHJwRGVmcykKLQl7Ci0JCWZvcmVhY2hfbm9k ZShSZXNUYXJnZXQsIHJ0LCBycERlZnMpCi0JCXsKLQkJCWJvb2wJCWZvdW5kID0gZmFsc2U7Ci0K LQkJCWZvcmVhY2hfbm9kZShTdHJpbmcsIHZhcm5hbWUsICp2YXJOYW1lcykKLQkJCXsKLQkJCQlp ZiAoc3RyY21wKHN0clZhbCh2YXJuYW1lKSwgcnQtPm5hbWUpID09IDApCi0JCQkJewotCQkJCQlm b3VuZCA9IHRydWU7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJCWlmICghZm91bmQpCi0J CQkJZXJlcG9ydChFUlJPUiwKLQkJCQkJCWVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1IpLAot CQkJCQkJZXJybXNnKCJERUZJTkUgdmFyaWFibGUgXCIlc1wiIGlzIG5vdCB1c2VkIGluIFBBVFRF Uk4iLAotCQkJCQkJCSAgIHJ0LT5uYW1lKSwKLQkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3Rh dGUsIHJ0LT5sb2NhdGlvbikpOwotCQl9Ci0JfQogfQogCiAvKgpAQCAtMzIxLDE4ICsyOTAsMzkg QEAgdHJhbnNmb3JtRGVmaW5lQ2xhdXNlKFBhcnNlU3RhdGUgKnBzdGF0ZSwgV2luZG93Q2xhdXNl ICp3YywgV2luZG93RGVmICp3aW5kZWYsCiAJTGlzdAkgICAqcGF0dGVyblZhck5hbWVzID0gTklM OwogCiAJLyoKLQkgKiBJZiBSb3cgRGVmaW5pdGlvbiBDb21tb24gU3ludGF4IGV4aXN0cywgREVG SU5FIGNsYXVzZSBtdXN0IGV4aXN0LiAodGhlCi0JICogcmF3IHBhcnNlciBzaG91bGQgaGF2ZSBh bHJlYWR5IGNoZWNrZWQgaXQuKQotCSAqLwotCUFzc2VydCh3aW5kZWYtPnJwQ29tbW9uU3ludGF4 LT5ycERlZnMgIT0gTlVMTCk7Ci0KLQkvKgotCSAqIFZhbGlkYXRlIFBBVFRFUk4gdmFyaWFibGUg Y291bnQsIHJlamVjdCBERUZJTkUgdmFyaWFibGVzIG5vdCB1c2VkIGluCi0JICogUEFUVEVSTiwg YW5kIGNvbGxlY3QgUEFUVEVSTiB2YXJpYWJsZSBuYW1lcyBmb3IgdHJhbnNmb3JtQ29sdW1uUmVm LgorCSAqIENoZWNrIFBBVFRFUk4gdmFyaWFibGUgY291bnQgbGltaXRzIGFuZCBjb2xsZWN0IFBB VFRFUk4gdmFyaWFibGUgbmFtZXMKKwkgKiBmb3IgdHJhbnNmb3JtQ29sdW1uUmVmLgogCSAqLwog CXZhbGlkYXRlUlBSUGF0dGVyblZhckNvdW50KHBzdGF0ZSwgd2luZGVmLT5ycENvbW1vblN5bnRh eC0+cnBQYXR0ZXJuLAotCQkJCQkJCSAgIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcywK IAkJCQkJCQkgICAmcGF0dGVyblZhck5hbWVzKTsKKworCS8qCisJICogSWYgUm93IERlZmluaXRp b24gQ29tbW9uIFN5bnRheCBleGlzdHMsIERFRklORSBjbGF1c2UgbXVzdCBleGlzdC4KKwkgKi8K KwlBc3NlcnQod2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZzICE9IE5JTCk7CisKKwkvKiBy ZWplY3QgREVGSU5FIHZhcmlhYmxlcyBub3QgdXNlZCBpbiBQQVRURVJOICovCisJZm9yZWFjaF9u b2RlKFJlc1RhcmdldCwgcnQsIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcykKKwl7CisJ CWJvb2wJCWZvdW5kID0gZmFsc2U7CisKKwkJZm9yZWFjaF9ub2RlKFN0cmluZywgdmFybmFtZSwg cGF0dGVyblZhck5hbWVzKQorCQl7CisJCQlpZiAoc3RyY21wKHN0clZhbCh2YXJuYW1lKSwgcnQt Pm5hbWUpID09IDApCisJCQl7CisJCQkJZm91bmQgPSB0cnVlOworCQkJCWJyZWFrOworCQkJfQor CQl9CisKKwkJaWYgKCFmb3VuZCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCWVycmNvZGUoRVJS Q09ERV9TWU5UQVhfRVJST1IpLAorCQkJCQllcnJtc2coIkRFRklORSB2YXJpYWJsZSBcIiVzXCIg aXMgbm90IHVzZWQgaW4gUEFUVEVSTiIsCisJCQkJCQkgICBydC0+bmFtZSksCisJCQkJCXBhcnNl cl9lcnJwb3NpdGlvbihwc3RhdGUsIHJ0LT5sb2NhdGlvbikpOworCX0KKwogCXBzdGF0ZS0+cF9y cHJfcGF0dGVybl92YXJzID0gcGF0dGVyblZhck5hbWVzOwogCiAJLyoKLS0gCjIuMzQuMQoK --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0005-refactor-transformDefineClause.nocfbot" Content-Disposition: attachment; filename="v47-0005-refactor-transformDefineClause.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2ym42 RnJvbSBiMzJmYzc1Mzg3ZjQ5OWY0MmQ4YWI3YzVjMjQ5MWYzY2IzYTNjOTBjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTg6MzM6MzcgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyA1LzZdIHJlZmFjdG9yIHRyYW5zZm9ybURlZmluZUNsYXVzZQpNSU1FLVZlcnNpb246IDEuMApD b250ZW50LVR5cGU6IHRleHQvcGxhaW47IGNoYXJzZXQ9VVRGLTgKQ29udGVudC1UcmFuc2Zlci1F bmNvZGluZzogOGJpdAoKY29lcmNlX3RvX2Jvb2xlYW4oKSB3YXMgZGVmZXJyZWQgdG8gYSBzZWNv bmQgcGFzcyBvdmVyIHRoZSBjb21wbGV0ZWQKZGVmaW5lQ2xhdXNlIGxpc3QsIG1lYW5pbmcgcHVs bF92YXJfY2xhdXNlKCkgcmFuIG9uIGFuIGV4cHJlc3Npb24gdGhhdCBoYWQgbm90CnlldCBiZWVu IGZ1bGx5IGNvZXJjZWQvdHJhbnNmb3JtZWQuIFRoZSBtb3JlIGludHVpdGl2ZWx5IG9yZGVyIHNo b3VsZCBiZToKdHJhbnNmb3JtRXhwciDihpIgY29lcmNlX3RvX2Jvb2xlYW4g4oaSIHB1bGxfdmFy X2NsYXVzZSwgc28gcHVsbF92YXJfY2xhdXNlIGFsd2F5cwpzZWVzIHRoZSBmaW5hbCBleHByZXNz aW9uIGZvcm0uCi0tLQogc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jICAgICAgICAgfCAx NDIgKysrKysrKysrKysrLS0tLS0tLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9y cHJfYmFzZS5vdXQgfCAgIDIgKy0KIDIgZmlsZXMgY2hhbmdlZCwgNjcgaW5zZXJ0aW9ucygrKSwg NzcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jw ci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCmluZGV4IDg1MjFjOGVlOWYuLjU5 NjI0YzdhNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYworKysg Yi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMKQEAgLTI4NCw5ICsyODQsNyBAQCBzdGF0 aWMgTGlzdCAqCiB0cmFuc2Zvcm1EZWZpbmVDbGF1c2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBXaW5k b3dDbGF1c2UgKndjLCBXaW5kb3dEZWYgKndpbmRlZiwKIAkJCQkJICBMaXN0ICoqdGFyZ2V0bGlz dCkKIHsKLQlMaXN0CSAgICpyZXN0YXJnZXRzOwogCUxpc3QJICAgKmRlZmluZUNsYXVzZSA9IE5J TDsKLQljaGFyCSAgICpuYW1lOwogCUxpc3QJICAgKnBhdHRlcm5WYXJOYW1lcyA9IE5JTDsKIAog CS8qCkBAIC0zMjYsMzIgKzMyNCwzNiBAQCB0cmFuc2Zvcm1EZWZpbmVDbGF1c2UoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBXaW5kb3dDbGF1c2UgKndjLCBXaW5kb3dEZWYgKndpbmRlZiwKIAlwc3RhdGUt PnBfcnByX3BhdHRlcm5fdmFycyA9IHBhdHRlcm5WYXJOYW1lczsKIAogCS8qCi0JICogQ2hlY2sg Zm9yIGR1cGxpY2F0ZSByb3cgcGF0dGVybiBkZWZpbml0aW9uIHZhcmlhYmxlcy4gIFRoZSBzdGFu ZGFyZAorCSAqIENoZWNrIGZvciBkdXBsaWNhdGUgcm93IHBhdHRlcm4gZGVmaW5pdGlvbiB2YXJp YWJsZXMuICBUaGUgU1FMIHN0YW5kYXJkCiAJICogcmVxdWlyZXMgdGhhdCBubyB0d28gcm93IHBh dHRlcm4gZGVmaW5pdGlvbiB2YXJpYWJsZSBuYW1lcyBzaGFsbCBiZQogCSAqIGVxdWl2YWxlbnQu CiAJICovCi0JcmVzdGFyZ2V0cyA9IE5JTDsKKwlmb3IgKGludCBvdXRlcnBvcyA9IDA7IG91dGVy cG9zIDwgbGlzdF9sZW5ndGgod2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBEZWZzKTsgb3V0ZXJw b3MrKykKKwl7CisJCVJlc1RhcmdldCAgKnJlc3RhcmdldCA9IGxpc3RfbnRoX25vZGUoUmVzVGFy Z2V0LAorCQkJCQkJCQkJCQkgIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcywKKwkJCQkJ CQkJCQkJICBvdXRlcnBvcyk7CisKKwkJZm9yIChpbnQgcmVzdHBvcyA9IG91dGVycG9zICsgMTsg cmVzdHBvcyA8IGxpc3RfbGVuZ3RoKHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcyk7IHJl c3Rwb3MrKykKKwkJeworCQkJUmVzVGFyZ2V0ICAqaW5uZXJfcmVzID0gbGlzdF9udGhfbm9kZShS ZXNUYXJnZXQsCisJCQkJCQkJCQkJCQkgIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcywK KwkJCQkJCQkJCQkJCSAgcmVzdHBvcyk7CisKKwkJCWlmICghc3RyY21wKHJlc3RhcmdldC0+bmFt ZSwgaW5uZXJfcmVzLT5uYW1lKSkKKwkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJZXJyY29kZShF UlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJCQllcnJtc2coIkRFRklORSB2YXJpYWJsZSBcIiVz XCIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSIsCisJCQkJCQkJICAgcmVzdGFyZ2V0LT5uYW1lKSwK KwkJCQkJCXBhcnNlcl9lcnJwb3NpdGlvbihwc3RhdGUsIGV4cHJMb2NhdGlvbigoTm9kZSAqKSBp bm5lcl9yZXMpKSk7CisJCX0KKwl9CisKIAlmb3JlYWNoX25vZGUoUmVzVGFyZ2V0LCByZXN0YXJn ZXQsIHdpbmRlZi0+cnBDb21tb25TeW50YXgtPnJwRGVmcykKIAl7CiAJCVRhcmdldEVudHJ5ICp0 ZURlZmluZTsKLQotCQluYW1lID0gcmVzdGFyZ2V0LT5uYW1lOwotCi0JCWZvcmVhY2hfbm9kZShS ZXNUYXJnZXQsIHIsIHJlc3RhcmdldHMpCi0JCXsKLQkJCWNoYXIJICAgKm47Ci0KLQkJCW4gPSBy LT5uYW1lOwotCi0JCQlpZiAoIXN0cmNtcChuLCBuYW1lKSkKLQkJCQllcmVwb3J0KEVSUk9SLAot CQkJCQkJZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCi0JCQkJCQllcnJtc2coIkRFRklO RSB2YXJpYWJsZSBcIiVzXCIgYXBwZWFycyBtb3JlIHRoYW4gb25jZSIsCi0JCQkJCQkJICAgbmFt ZSksCi0JCQkJCQlwYXJzZXJfZXJycG9zaXRpb24ocHN0YXRlLCBleHByTG9jYXRpb24oKE5vZGUg KikgcikpKTsKLQkJfQotCi0JCXJlc3RhcmdldHMgPSBsYXBwZW5kKHJlc3RhcmdldHMsIHJlc3Rh cmdldCk7CisJCU5vZGUJICAgKmV4cHI7CisJCUxpc3QJICAgKnZhcnM7CiAKIAkJLyoKIAkJICog VHJhbnNmb3JtIHRoZSBERUZJTkUgZXhwcmVzc2lvbi4gIFdlIG11c3QgTk9UIGFkZCB0aGUgd2hv bGUKQEAgLTM2Myw2OCArMzY1LDU2IEBAIHRyYW5zZm9ybURlZmluZUNsYXVzZShQYXJzZVN0YXRl ICpwc3RhdGUsIFdpbmRvd0NsYXVzZSAqd2MsIFdpbmRvd0RlZiAqd2luZGVmLAogCQkgKiB0aGUg aW5kaXZpZHVhbCBWYXIgbm9kZXMgaXQgcmVmZXJlbmNlcyBhcmUgcHJlc2VudCBpbiB0aGUKIAkJ ICogdGFyZ2V0bGlzdCwgc28gdGhlIHBsYW5uZXIgY2FuIHByb3BhZ2F0ZSB0aGUgcmVmZXJlbmNl ZCBjb2x1bW5zLgogCQkgKi8KLQkJewotCQkJTm9kZQkgICAqZXhwcjsKLQkJCUxpc3QJICAgKnZh cnM7CisJCWV4cHIgPSB0cmFuc2Zvcm1FeHByKHBzdGF0ZSwgcmVzdGFyZ2V0LT52YWwsIEVYUFJf S0lORF9SUFJfREVGSU5FKTsKIAotCQkJZXhwciA9IHRyYW5zZm9ybUV4cHIocHN0YXRlLCByZXN0 YXJnZXQtPnZhbCwKLQkJCQkJCQkJIEVYUFJfS0lORF9SUFJfREVGSU5FKTsKKwkJZXhwciA9IGNv ZXJjZV90b19ib29sZWFuKHBzdGF0ZSwgZXhwciwgIkRFRklORSIpOwogCi0JCQkvKgotCQkJICog UHVsbCBvdXQgVmFyIG5vZGVzIGZyb20gdGhlIHRyYW5zZm9ybWVkIGV4cHJlc3Npb24gYW5kIGVu c3VyZQotCQkJICogZWFjaCBvbmUgaXMgcHJlc2VudCBpbiB0aGUgdGFyZ2V0bGlzdC4gIFRoaXMg aXMgbmVlZGVkIHNvIHRoZQotCQkJICogcGxhbm5lciBwcm9wYWdhdGVzIHRoZSByZWZlcmVuY2Vk IGNvbHVtbnMgdGhyb3VnaCB0aGUgcGxhbgotCQkJICogdHJlZSwgbWFraW5nIHRoZW0gYXZhaWxh YmxlIHRvIHRoZSBXaW5kb3dBZ2cncyBERUZJTkUKLQkJCSAqIGV2YWx1YXRpb24uCi0JCQkgKi8K LQkJCXZhcnMgPSBwdWxsX3Zhcl9jbGF1c2UoZXhwciwgMCk7Ci0JCQlmb3JlYWNoX25vZGUoVmFy LCB2YXIsIHZhcnMpCi0JCQl7Ci0JCQkJYm9vbAkJZm91bmQgPSBmYWxzZTsKLQotCQkJCWZvcmVh Y2hfbm9kZShUYXJnZXRFbnRyeSwgdGxlLCAqdGFyZ2V0bGlzdCkKLQkJCQl7Ci0JCQkJCWlmIChJ c0EodGxlLT5leHByLCBWYXIpICYmCi0JCQkJCQkoKFZhciAqKSB0bGUtPmV4cHIpLT52YXJubyA9 PSB2YXItPnZhcm5vICYmCi0JCQkJCQkoKFZhciAqKSB0bGUtPmV4cHIpLT52YXJhdHRubyA9PSB2 YXItPnZhcmF0dG5vKQotCQkJCQl7Ci0JCQkJCQlmb3VuZCA9IHRydWU7Ci0JCQkJCQlicmVhazsK LQkJCQkJfQotCQkJCX0KLQkJCQlpZiAoIWZvdW5kKQotCQkJCXsKLQkJCQkJVGFyZ2V0RW50cnkg Km5ld3RsZTsKLQotCQkJCQluZXd0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgY29weU9i amVjdCh2YXIpLAotCQkJCQkJCQkJCQkgbGlzdF9sZW5ndGgoKnRhcmdldGxpc3QpICsgMSwKLQkJ CQkJCQkJCQkJIE5VTEwsCi0JCQkJCQkJCQkJCSB0cnVlKTsKLQkJCQkJKnRhcmdldGxpc3QgPSBs YXBwZW5kKCp0YXJnZXRsaXN0LCBuZXd0bGUpOwotCQkJCX0KLQkJCX0KLQkJCWxpc3RfZnJlZSh2 YXJzKTsKLQotCQkJLyogQnVpbGQgdGhlIGRlZmluZUNsYXVzZSBlbnRyeSBkaXJlY3RseSBmcm9t IHRoZSB0cmFuc2Zvcm1lZCBleHByICovCi0JCQl0ZURlZmluZSA9IG1ha2VUYXJnZXRFbnRyeSgo RXhwciAqKSBleHByLAotCQkJCQkJCQkJICAgbGlzdF9sZW5ndGgoZGVmaW5lQ2xhdXNlKSArIDEs Ci0JCQkJCQkJCQkgICBwc3RyZHVwKG5hbWUpLAotCQkJCQkJCQkJICAgdHJ1ZSk7Ci0JCX0KKwkJ LyogQnVpbGQgdGhlIGRlZmluZUNsYXVzZSBlbnRyeSBkaXJlY3RseSBmcm9tIHRoZSB0cmFuc2Zv cm1lZCBleHByICovCisJCXRlRGVmaW5lID0gbWFrZVRhcmdldEVudHJ5KChFeHByICopIGV4cHIs CisJCQkJCQkJCSAgIGxpc3RfbGVuZ3RoKGRlZmluZUNsYXVzZSkgKyAxLAorCQkJCQkJCQkgICBw c3RyZHVwKHJlc3RhcmdldC0+bmFtZSksCisJCQkJCQkJCSAgIHRydWUpOwogCiAJCS8qIGJ1aWxk IHRyYW5zZm9ybWVkIERFRklORSBjbGF1c2UgKGxpc3Qgb2YgVGFyZ2V0RW50cnkpICovCiAJCWRl ZmluZUNsYXVzZSA9IGxhcHBlbmQoZGVmaW5lQ2xhdXNlLCB0ZURlZmluZSk7CisKKwkJLyoKKwkJ ICogUHVsbCBvdXQgVmFyIG5vZGVzIGZyb20gdGhlIHRyYW5zZm9ybWVkIGV4cHJlc3Npb24gYW5k IGVuc3VyZSBlYWNoCisJCSAqIG9uZSBpcyBwcmVzZW50IGluIHRoZSB0YXJnZXRsaXN0LiAgVGhp cyBpcyBuZWVkZWQgc28gdGhlIHBsYW5uZXIKKwkJICogcHJvcGFnYXRlcyB0aGUgcmVmZXJlbmNl ZCBjb2x1bW5zIHRocm91Z2ggdGhlIHBsYW4gdHJlZSwgbWFraW5nCisJCSAqIHRoZW0gYXZhaWxh YmxlIHRvIHRoZSBXaW5kb3dBZ2cncyBERUZJTkUgZXZhbHVhdGlvbi4KKwkJICovCisJCXZhcnMg PSBwdWxsX3Zhcl9jbGF1c2UoZXhwciwgMCk7CisKKwkJZm9yZWFjaF9ub2RlKFZhciwgdmFyLCB2 YXJzKQorCQl7CisJCQlib29sCQlmb3VuZCA9IGZhbHNlOworCisJCQlmb3JlYWNoX25vZGUoVGFy Z2V0RW50cnksIHRsZSwgKnRhcmdldGxpc3QpCisJCQl7CisJCQkJaWYgKGVxdWFsKHRsZS0+ZXhw ciwgdmFyKSkKKwkJCQl7CisJCQkJCWZvdW5kID0gdHJ1ZTsKKwkJCQkJYnJlYWs7CisJCQkJfQor CQkJfQorCisJCQlpZiAoIWZvdW5kKQorCQkJeworCQkJCVRhcmdldEVudHJ5ICpuZXd0bGU7CisK KwkJCQluZXd0bGUgPSBtYWtlVGFyZ2V0RW50cnkoKEV4cHIgKikgY29weU9iamVjdCh2YXIpLAor CQkJCQkJCQkJCSBsaXN0X2xlbmd0aCgqdGFyZ2V0bGlzdCkgKyAxLAorCQkJCQkJCQkJCSBOVUxM LAorCQkJCQkJCQkJCSB0cnVlKTsKKwkJCQkqdGFyZ2V0bGlzdCA9IGxhcHBlbmQoKnRhcmdldGxp c3QsIG5ld3RsZSk7CisJCQl9CisJCX0KKwkJbGlzdF9mcmVlKHZhcnMpOwogCX0KLQlsaXN0X2Zy ZWUocmVzdGFyZ2V0cyk7CisKIAlwc3RhdGUtPnBfcnByX3BhdHRlcm5fdmFycyA9IE5JTDsKIAot CS8qCi0JICogTWFrZSBzdXJlIHRoYXQgdGhlIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24gc2VhcmNo IGNvbmRpdGlvbiBpcyBhIGJvb2xlYW4KLQkgKiBleHByZXNzaW9uLgotCSAqLwotCWZvcmVhY2hf cHRyKFRhcmdldEVudHJ5LCB0ZSwgZGVmaW5lQ2xhdXNlKQotCQl0ZS0+ZXhwciA9IChFeHByICop IGNvZXJjZV90b19ib29sZWFuKHBzdGF0ZSwgKE5vZGUgKikgdGUtPmV4cHIsICJERUZJTkUiKTsK LQogCS8qCiAJICogVmFsaWRhdGUgREVGSU5FIGV4cHJlc3Npb25zOiBuZXN0ZWQgUFJFVi9ORVhU LCBjb2x1bW4gcmVmZXJlbmNlcywKIAkgKiBjb21wb3VuZCBmbGF0dGVuLCB2b2xhdGlsZSBjYWxs ZWVzIC0tIGFsbCBpbiBhIHNpbmdsZSB3YWxrIHBlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9ycHJfYmFzZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jw cl9iYXNlLm91dAppbmRleCA0MTU0MTg5OGY1Li5jYWU1Y2FiMGQ4IDEwMDY0NAotLS0gYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwcl9iYXNlLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3Jwcl9iYXNlLm91dApAQCAtMjM2LDcgKzIzNiw3IEBAIFdJTkRPVyB3IEFTICgK ICk7CiBFUlJPUjogIERFRklORSB2YXJpYWJsZSAiYSIgYXBwZWFycyBtb3JlIHRoYW4gb25jZQog TElORSA3OiAgICAgREVGSU5FIEEgQVMgaWQgPiAwLCBBIEFTIGlkIDwgMTAKLSAgICAgICAgICAg ICAgICAgICBeCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF4KIERST1AgVEFCTEUg cnByX2R1cDsKIC0tIEJvb2xlYW4gY29lcmNpb24KIENSRUFURSBUQUJMRSBycHJfYm9vbCAoaWQg SU5ULCBmbGFnIEJPT0xFQU4pOwotLSAKMi4zNC4xCgo= --000000000000850e0a06540c4952 Content-Type: application/octet-stream; name="v47-0001-replace-some-AST-to-clause.nocfbot" Content-Disposition: attachment; filename="v47-0001-replace-some-AST-to-clause.nocfbot" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqat2yme5 RnJvbSA5NTZkMGQxM2M1NzA1YTVjNDQ1ZDlkZjcxMTE3ZDJhNmY0YjE5MDRmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBqaWFuIGhlIDxqaWFuLnVuaXZlcnNhbGl0eUBnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMTIgSnVuIDIwMjYgMTE6MzA6MjUgKzA4MDAKU3ViamVjdDogW1BBVENIIHY0 NyAxLzZdIHJlcGxhY2Ugc29tZSBBU1QgdG8gY2xhdXNlCgotLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL1JFQURNRS5ycHIgfCA0ICsrLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYyAg fCA1ICsrLS0tCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggIHwgOSArKysrLS0tLS0K IDMgZmlsZXMgY2hhbmdlZCwgOCBpbnNlcnRpb25zKCspLCAxMCBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUucnByIGIvc3JjL2JhY2tlbmQvZXhl Y3V0b3IvUkVBRE1FLnJwcgppbmRleCAwMGFmODY2ODFiLi5lOTEzZTE5MmIyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9leGVjdXRvci9SRUFETUUucnByCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1 dG9yL1JFQURNRS5ycHIKQEAgLTk4LDEwICs5OCwxMCBAQCBSUFIgcHJvY2Vzc2luZyBpcyBkaXZp ZGVkIGludG8gdGhyZWUgcGhhc2VzOgogCiAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCiAgIHwgIDEuIFBhcnNpbmcgKFBhcnNl cikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gIHwgICAgIFNRTCB0 ZXh0IC0+IFBBVFRFUk4gQVNUICsgREVGSU5FIGV4cHJlc3Npb24gdHJlZSAgICAgICB8CisgIHwg ICAgIFNRTCB0ZXh0IC0+IFBBVFRFUk4gY2xhdXNlICsgREVGSU5FIGV4cHJlc3Npb24gdHJlZSAg ICAgICB8CiAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8CiAgIHwgIDIuIENvbXBpbGF0aW9uIChPcHRpbWl6ZXIvUGxhbm5lcikg ICAgICAgICAgICAgICAgICAgICAgICB8Ci0gIHwgICAgIFBBVFRFUk4gQVNUIC0+IG9wdGltaXph dGlvbiAtPiBmbGF0IE5GQSBlbGVtZW50IGFycmF5ICB8CisgIHwgICAgIFBBVFRFUk4gY2xhdXNl IC0+IG9wdGltaXphdGlvbiAtPiBmbGF0IE5GQSBlbGVtZW50IGFycmF5ICB8CiAgIHwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAg IHwgIDMuIEV4ZWN1dGlvbiAoRXhlY3V0b3IpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8CiAgIHwgICAgIFJvdy1ieS1yb3cgbWF0Y2hpbmcgdmlhIE5GQSBzaW11bGF0aW9uICAg ICAgICAgICAgICAgICB8CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnBy LmMgYi9zcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VfcnByLmMKaW5kZXggM2VhZWEyYmU3NS4uYTIx YWFkYWU3MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlX3Jwci5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZV9ycHIuYwpAQCAtOCw3ICs4LDcgQEAKICAqICAgLSBW YWxpZGF0ZXMgZnJhbWUgb3B0aW9ucyAobXVzdCBzdGFydCBhdCBDVVJSRU5UIFJPVywgbm8gRVhD TFVERSkKICAqICAgLSBWYWxpZGF0ZXMgUEFUVEVSTiB2YXJpYWJsZSBjb3VudCAobWF4IFJQUl9W QVJJRF9NQVggKyAxKQogICogICAtIFRyYW5zZm9ybXMgREVGSU5FIGNsYXVzZQotICogICAtIFN0 b3JlcyB0aGUgUEFUVEVSTiBBU1QgYW5kIHRoZSBTS0lQIFRPL0lOSVRJQUwgZmxhZ3MKKyAqICAg LSBTdG9yZXMgdGhlIFBBVFRFUk4gY2xhdXNlIGFuZCB0aGUgU0tJUCBUTy9JTklUSUFMIGZsYWdz CiAgKgogICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMjYsIFBvc3RncmVTUUwgR2xv YmFsIERldmVsb3BtZW50IEdyb3VwCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFJl Z2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYQpAQCAtNjcsNyArNjcsNyBAQCBz dGF0aWMgYm9vbCBkZWZpbmVfd2Fsa2VyKE5vZGUgKm5vZGUsIHZvaWQgKmNvbnRleHQpOwogICog ICAtIFNldCBBRlRFUiBNQVRDSCBTS0lQIFRPIGZsYWcKICAqICAgLSBTZXQgU0VFSy9JTklUSUFM IGZsYWcKICAqICAgLSBUcmFuc2Zvcm1zIERFRklORSBjbGF1c2UgaW50byBUYXJnZXRFbnRyeSBs aXN0Ci0gKiAgIC0gU3RvcmVzIFBBVFRFUk4gQVNUIGZvciBkZXBhcnNpbmcgKG9wdGltaXphdGlv biBoYXBwZW5zIGluIHBsYW5uZXIpCisgKiAgIC0gU3RvcmVzIFBBVFRFUk4gY2xhdXNlCiAgKgog ICogUmV0dXJucyBlYXJseSBpZiB3aW5kZWYgaGFzIG5vIHJwQ29tbW9uU3ludGF4IChub24tUlBS IHdpbmRvdykuCiAgKi8KQEAgLTE4MCw3ICsxODAsNiBAQCB0cmFuc2Zvcm1SUFIoUGFyc2VTdGF0 ZSAqcHN0YXRlLCBXaW5kb3dDbGF1c2UgKndjLCBXaW5kb3dEZWYgKndpbmRlZiwKIAkvKiBUcmFu c2Zvcm0gREVGSU5FIGNsYXVzZSBpbnRvIGxpc3Qgb2YgVGFyZ2V0RW50cnkncyAqLwogCXdjLT5k ZWZpbmVDbGF1c2UgPSB0cmFuc2Zvcm1EZWZpbmVDbGF1c2UocHN0YXRlLCB3Yywgd2luZGVmLCB0 YXJnZXRsaXN0KTsKIAotCS8qIFN0b3JlIFBBVFRFUk4gQVNUIGZvciBkZXBhcnNpbmcgKi8KIAl3 Yy0+cnBQYXR0ZXJuID0gd2luZGVmLT5ycENvbW1vblN5bnRheC0+cnBQYXR0ZXJuOwogfQogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXJzZW5vZGVzLmggYi9zcmMvaW5jbHVkZS9u b2Rlcy9wYXJzZW5vZGVzLmgKaW5kZXggMzI2NmMxMWE3MS4uZjIxMGVlMDhlZCAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGFyc2Vub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVz L3BhcnNlbm9kZXMuaApAQCAtNjE5LDcgKzYxOSw3IEBAIHR5cGVkZWYgZW51bSBSUFJQYXR0ZXJu Tm9kZVR5cGUKIH0gUlBSUGF0dGVybk5vZGVUeXBlOwogCiAvKgotICogUlBSUGF0dGVybk5vZGUg LSBSb3cgUGF0dGVybiBSZWNvZ25pdGlvbiBwYXR0ZXJuIEFTVCBub2RlCisgKiBSUFJQYXR0ZXJu Tm9kZSAtIFJvdyBQYXR0ZXJuIFJlY29nbml0aW9uIFBBVFRFUiBjbGF1c2UKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgUlBSUGF0dGVybk5vZGUKIHsKQEAgLTY1MCw3ICs2NTAsNyBAQCB0eXBlZGVmIHN0 cnVjdCBSUENvbW1vblN5bnRheAogCVJQU2tpcFRvCXJwU2tpcFRvOwkJLyogUm93IFBhdHRlcm4g QUZURVIgTUFUQ0ggU0tJUCB0eXBlICovCiAJYm9vbAkJaW5pdGlhbDsJCS8qIHRydWUgaWYgPHJv dyBwYXR0ZXJuIGluaXRpYWwgb3Igc2Vlaz4gaXMKIAkJCQkJCQkJICogaW5pdGlhbCAqLwotCVJQ UlBhdHRlcm5Ob2RlICpycFBhdHRlcm47CS8qIFBBVFRFUk4gY2xhdXNlIEFTVCAqLworCVJQUlBh dHRlcm5Ob2RlICpycFBhdHRlcm47CS8qIFBBVFRFUk4gY2xhdXNlICovCiAJTGlzdAkgICAqcnBE ZWZzOwkJCS8qIHJvdyBwYXR0ZXJuIGRlZmluaXRpb25zIGNsYXVzZSAobGlzdCBvZgogCQkJCQkJ CQkgKiBSZXNUYXJnZXQpICovCiAJUGFyc2VMb2MJbG9jYXRpb247CQkvKiBQQVRURVJOIGtleXdv cmQgbG9jYXRpb24sIG9yIC0xICovCkBAIC0xNzI4LDggKzE3MjgsNyBAQCB0eXBlZGVmIHN0cnVj dCBHcm91cGluZ1NldAogICoKICAqICJkZWZpbmVDbGF1c2UiIGlzIFJvdyBQYXR0ZXJuIFJlY29n bml0aW9uIERFRklORSBjbGF1c2UgKGxpc3Qgb2YKICAqIFRhcmdldEVudHJ5KS4gVGFyZ2V0RW50 cnkucmVzbmFtZSByZXByZXNlbnRzIHJvdyBwYXR0ZXJuIGRlZmluaXRpb24KLSAqIHZhcmlhYmxl IG5hbWUuICJycFBhdHRlcm4iIHJlcHJlc2VudHMgUEFUVEVSTiBjbGF1c2UgYXMgYW4gQVNUIHRy ZWUKLSAqIChSUFJQYXR0ZXJuTm9kZSkuCisgKiB2YXJpYWJsZSBuYW1lLiAicnBQYXR0ZXJuIiBy ZXByZXNlbnRzIHRoZSBQQVRURVJOIGNsYXVzZS4KICAqCiAgKiBUaGUgaW5mb3JtYXRpb24gcmVs ZXZhbnQgZm9yIHRoZSBxdWVyeSBqdW1ibGluZyBpcyB0aGUgcGFydGl0aW9uIGNsYXVzZQogICog dHlwZSBhbmQgaXRzIGJvdW5kcy4KQEAgLTE3NjYsNyArMTc2NSw3IEBAIHR5cGVkZWYgc3RydWN0 IFdpbmRvd0NsYXVzZQogCQkJCQkJCQkgKiBpbml0aWFsICovCiAJLyogUm93IFBhdHRlcm4gREVG SU5FIGNsYXVzZSAobGlzdCBvZiBUYXJnZXRFbnRyeSkgKi8KIAlMaXN0CSAgICpkZWZpbmVDbGF1 c2U7Ci0JLyogUm93IFBhdHRlcm4gUEFUVEVSTiBjbGF1c2UgQVNUICovCisJLyogUm93IFBhdHRl cm4gUEFUVEVSTiBjbGF1c2UgKi8KIAlSUFJQYXR0ZXJuTm9kZSAqcnBQYXR0ZXJuOwogfSBXaW5k b3dDbGF1c2U7CiAKLS0gCjIuMzQuMQoK --000000000000850e0a06540c4952--