<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>81459</bug_id>
          
          <creation_ts>2012-03-17 17:15:47 -0700</creation_ts>
          <short_desc>Strength reduction, RegExp.exec -&gt; RegExp.test</short_desc>
          <delta_ts>2016-03-05 15:07:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>jberlin</cc>
    
    <cc>ssandela</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>581387</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-17 17:15:47 -0700</bug_when>
    <thetext>RegExp.prototype.exec &amp; RegExp.prototype.test can both be used to test a regular expression for a match against a string - however exec is more expensive, since it allocates a matches array object.  In cases where the result is consumed in a boolean context the allocation of the matches array can be trivially elided.

For example:
    function f()
    {
        for (i =0; i &lt; 10000000; ++i)
            if(!/a/.exec(&quot;a&quot;))
                err = true;
    }

This is a 2.5x speedup on this example microbenchmark loop.

In a more advanced for of this optimization, we may be able to avoid allocating the array where access to the array can be observed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581390</commentid>
    <comment_count>1</comment_count>
      <attachid>132473</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-17 17:37:44 -0700</bug_when>
    <thetext>Created attachment 132473
Fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581391</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-17 17:51:08 -0700</bug_when>
    <thetext>Attachment 132473 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/dfg/DFGOperations.h:64:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:65:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:67:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:68:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:70:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:72:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:73:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:78:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:79:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:80:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:81:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:82:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:83:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:84:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:87:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:90:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:91:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/dfg/DFGOperations.h:94:  DFG_OPERATION is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Source/JavaScriptCore/runtime/JSFunction.h:57:  The parameter name &quot;nativeFunction&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/RegExpObject.h:70:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/JavaScriptCore/runtime/RegExpObject.h:71:  The parameter name &quot;string&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 21 in 21 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581398</commentid>
    <comment_count>3</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-17 18:08:43 -0700</bug_when>
    <thetext>Fixed in r111129</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581742</commentid>
    <comment_count>4</comment_count>
    <who name="SravanKumar S(:sravan)">ssandela</who>
    <bug_when>2012-03-19 06:58:35 -0700</bug_when>
    <thetext>Hi Gavin,

The code changes are still resulting in windows build break(as of 111160). The error is same as mentioned by win build bot. Can you please fix it ASAP. I am stalled by this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581838</commentid>
    <comment_count>5</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-03-19 08:55:20 -0700</bug_when>
    <thetext>3&gt;JSBase.obj : warning LNK4217: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific&lt;class WTF::WTFThreadData&gt; * WTF::WTFThreadData::staticData) imported in function &quot;public: __thiscall JSC::APIEntryShim::~APIEntryShim(void)&quot; (??1APIEntryShim@JSC@@QAE@XZ)
3&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: static class JSC::JSFunction * __cdecl JSC::JSFunction::create(class JSC::ExecState *,class JSC::JSGlobalObject *,int,class JSC::Identifier const &amp;,__int64 (__fastcall*)(class JSC::ExecState *),__int64 (__fastcall*)(class JSC::ExecState *))&quot; (?create@JSFunction@JSC@@SAPAV12@PAVExecState@2@PAVJSGlobalObject@2@HABVIdentifier@2@P6I_J0@Z3@Z)
3&gt;C:\cygwin\home\buildbot\slave\win-debug\build\WebKitBuild\Debug\bin\JavaScriptCore.dll : fatal error LNK1120: 1 unresolved externals
3&gt;Build log was saved at &quot;file://C:\cygwin\home\buildbot\slave\win-debug\build\WebKitBuild\Debug\obj\JavaScriptCore\BuildLog.htm&quot;
3&gt;JavaScriptCore - 2 error(s), 16 warning(s)

http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/47242/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581855</commentid>
    <comment_count>6</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-03-19 09:19:34 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; 3&gt;JSBase.obj : warning LNK4217: locally defined symbol ?staticData@WTFThreadData@WTF@@0PAV?$ThreadSpecific@VWTFThreadData@WTF@@@2@A (private: static class WTF::ThreadSpecific&lt;class WTF::WTFThreadData&gt; * WTF::WTFThreadData::staticData) imported in function &quot;public: __thiscall JSC::APIEntryShim::~APIEntryShim(void)&quot; (??1APIEntryShim@JSC@@QAE@XZ)
&gt; 3&gt;JavaScriptCore.exp : error LNK2001: unresolved external symbol &quot;public: static class JSC::JSFunction * __cdecl JSC::JSFunction::create(class JSC::ExecState *,class JSC::JSGlobalObject *,int,class JSC::Identifier const &amp;,__int64 (__fastcall*)(class JSC::ExecState *),__int64 (__fastcall*)(class JSC::ExecState *))&quot; (?create@JSFunction@JSC@@SAPAV12@PAVExecState@2@PAVJSGlobalObject@2@HABVIdentifier@2@P6I_J0@Z3@Z)
&gt; 3&gt;C:\cygwin\home\buildbot\slave\win-debug\build\WebKitBuild\Debug\bin\JavaScriptCore.dll : fatal error LNK1120: 1 unresolved externals
&gt; 3&gt;Build log was saved at &quot;file://C:\cygwin\home\buildbot\slave\win-debug\build\WebKitBuild\Debug\obj\JavaScriptCore\BuildLog.htm&quot;
&gt; 3&gt;JavaScriptCore - 2 error(s), 16 warning(s)
&gt; 
&gt; http://build.webkit.org/builders/Windows%20Debug%20%28Build%29/builds/47242/steps/compile-webkit/logs/stdio

Fixed in http://trac.webkit.org/changeset/111188</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>581974</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-03-19 11:28:22 -0700</bug_when>
    <thetext>Ooops!- thanks Jessie!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>582704</commentid>
    <comment_count>8</comment_count>
    <who name="SravanKumar S(:sravan)">ssandela</who>
    <bug_when>2012-03-19 20:54:33 -0700</bug_when>
    <thetext>Hi, The issue is still present when building WebKit project, it is fixed when building JavaScriptCore though.

5&gt;   Creating library C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\lib\WebKit.lib and object C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\lib\WebKit.exp
5&gt;WebCore.lib(JSBindingsAllInOne.obj) : error LNK2001: unresolved external symbol &quot;public: static class JSC::JSFunction * __cdecl JSC::JSFunction::create(class JSC::ExecState *,class JSC::JSGlobalObject *,int,class JSC::Identifier const &amp;,__int64 (__fastcall*)(class JSC::ExecState *),enum JSC::Intrinsic,__int64 (__fastcall*)(class JSC::ExecState *))&quot; (?create@JSFunction@JSC@@SAPAV12@PAVExecState@2@PAVJSGlobalObject@2@HABVIdentifier@2@P6I_J0@ZW4Intrinsic@2@3@Z)
5&gt;C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\bin\WebKit.dll : fatal error LNK1120: 1 unresolved externals</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>583182</commentid>
    <comment_count>9</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2012-03-20 10:13:32 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Hi, The issue is still present when building WebKit project, it is fixed when building JavaScriptCore though.
&gt; 
&gt; 5&gt;   Creating library C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\lib\WebKit.lib and object C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\lib\WebKit.exp
&gt; 5&gt;WebCore.lib(JSBindingsAllInOne.obj) : error LNK2001: unresolved external symbol &quot;public: static class JSC::JSFunction * __cdecl JSC::JSFunction::create(class JSC::ExecState *,class JSC::JSGlobalObject *,int,class JSC::Identifier const &amp;,__int64 (__fastcall*)(class JSC::ExecState *),enum JSC::Intrinsic,__int64 (__fastcall*)(class JSC::ExecState *))&quot; (?create@JSFunction@JSC@@SAPAV12@PAVExecState@2@PAVJSGlobalObject@2@HABVIdentifier@2@P6I_J0@ZW4Intrinsic@2@3@Z)
&gt; 5&gt;C:\cygwin\home\ssandela\new_webkit\WebKit\WebKitBuild\Debug\bin\WebKit.dll : fatal error LNK1120: 1 unresolved externals

This was fixed in http://trac.webkit.org/changeset/111197</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1171276</commentid>
    <comment_count>10</comment_count>
      <attachid>132473</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-03-05 15:07:39 -0800</bug_when>
    <thetext>Comment on attachment 132473
Fix

View in context: https://bugs.webkit.org/attachment.cgi?id=132473&amp;action=review

&gt; Source/JavaScriptCore/dfg/DFGAbstractState.cpp:638
&gt; +    case RegExpExec:
&gt; +    case RegExpTest:
&gt; +        forNode(node.child1()).filter(PredictCell);
&gt; +        forNode(node.child2()).filter(PredictCell);
&gt; +        forNode(nodeIndex).makeTop();
&gt; +        break;
&gt; +            

This AI rule is wrong because it fails to call clobberStructures(), or clobberWorld() in the modern DFG.  This bug has managed to survive until now!

The implication is that RegExpExec/RegExpTest could clobber the world if the second argument is an object with a toString method, but AI would incorrectly assume that all of its structure proofs are still intact.  Because of this logic, when we wrote clobberize() we also failed to make RegExpExec/RegExpTest clobber the world there.  That means we will CSE and LICM around these clobbering operations, too.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>132473</attachid>
            <date>2012-03-17 17:37:44 -0700</date>
            <delta_ts>2012-03-17 17:47:47 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>81459.patch</filename>
            <type>text/plain</type>
            <size>34162</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTExMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBA
CisyMDEyLTAzLTE3ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBTdHJlbmd0aCByZWR1Y3Rpb24sIFJlZ0V4cC5leGVjIC0+IFJlZ0V4cC50ZXN0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04MTQ1OQor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlZ0V4cC5w
cm90b3R5cGUuZXhlYyAmIFJlZ0V4cC5wcm90b3R5cGUudGVzdCBjYW4gYm90aCBiZSB1c2VkIHRv
IHRlc3QgYSByZWd1bGFyCisgICAgICAgIGV4cHJlc3Npb24gZm9yIGEgbWF0Y2ggYWdhaW5zdCBh
IHN0cmluZyAtIGhvd2V2ZXIgZXhlYyBpcyBtb3JlIGV4cGVuc2l2ZSwgc2luY2UKKyAgICAgICAg
aXQgYWxsb2NhdGVzIGEgbWF0Y2hlcyBhcnJheSBvYmplY3QuIEluIGNhc2VzIHdoZXJlIHRoZSBy
ZXN1bHQgaXMgY29uc3VtZWQgaW4gYQorICAgICAgICBib29sZWFuIGNvbnRleHQgdGhlIGFsbG9j
YXRpb24gb2YgdGhlIG1hdGNoZXMgYXJyYXkgY2FuIGJlIHRyaXZpYWxseSBlbGlkZWQuCisKKyAg
ICAgICAgRm9yIGV4YW1wbGU6CisgICAgICAgICAgICBmdW5jdGlvbiBmKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPTA7IGkgPCAxMDAwMDAwMDsgKytpKQorICAgICAg
ICAgICAgICAgICAgICBpZighL2EvLmV4ZWMoImEiKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVyciA9IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgVGhpcyBpcyBhIDIuNXggc3Bl
ZWR1cCBvbiB0aGlzIGV4YW1wbGUgbWljcm9iZW5jaG1hcmsgbG9vcC4KKworICAgICAgICBJbiBh
IG1vcmUgYWR2YW5jZWQgZm9ybSBvZiB0aGlzIG9wdGltaXphdGlvbiwgd2UgbWF5IGJlIGFibGUg
dG8gYXZvaWQgYWxsb2NhdGluZworICAgICAgICB0aGUgYXJyYXkgd2hlcmUgYWNjZXNzIHRvIHRo
ZSBhcnJheSBjYW4gYmUgb2JzZXJ2ZWQuCisKKyAgICAgICAgKiBjcmVhdGVfaGFzaF90YWJsZToK
KyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2lj
KToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhh
c0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAg
KERGRyk6CisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9E
RkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6
cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyk6CisgICAgICAg
IChERkcpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlND
OjpERkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICoganNj
LmNwcDoKKyAgICAgICAgKEdsb2JhbE9iamVjdDo6YWRkQ29uc3RydWN0YWJsZUZ1bmN0aW9uKToK
KyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5j
dGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6CisgICAgICAgIChK
U0MpOgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNGdW5jdGlv
bik6CisgICAgICAgICogcnVudGltZS9Mb29rdXAuY3BwOgorICAgICAgICAoSlNDOjpzZXRVcFN0
YXRpY0Z1bmN0aW9uU2xvdCk6CisgICAgICAgICogcnVudGltZS9SZWdFeHBPYmplY3QuY3BwOgor
ICAgICAgICAoSlNDOjpSZWdFeHBPYmplY3Q6OmV4ZWMpOgorICAgICAgICAoSlNDOjpSZWdFeHBP
YmplY3Q6Om1hdGNoKToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cE9iamVjdC5oOgorICAgICAg
ICAoUmVnRXhwT2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OnJlZ0V4cFByb3RvRnVuY1Rlc3QpOgorICAgICAgICAoSlNDOjpyZWdF
eHBQcm90b0Z1bmNFeGVjKToKKwogMjAxMi0wMy0xNiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2Zm
QGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIGRpYWdub3N0aWMgYmVuZWZpdCBvZiBKU0ds
b2JhbERhdGE6Om1faXNJbml0aWFsaXppbmdPYmplY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9jcmVhdGVfaGFzaF90YWJsZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvY3JlYXRlX2hhc2hfdGFibGUJKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9jcmVhdGVfaGFzaF90YWJsZQkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCwx
MCBAQCBzdWIgb3V0cHV0KCkgewogICAgICAgICAgICAgJGludHJpbnNpYyA9ICJBcnJheVB1c2hJ
bnRyaW5zaWMiIGlmICgka2V5IGVxICJwdXNoIik7CiAgICAgICAgICAgICAkaW50cmluc2ljID0g
IkFycmF5UG9wSW50cmluc2ljIiBpZiAoJGtleSBlcSAicG9wIik7CiAgICAgICAgIH0KKyAgICAg
ICAgaWYgKCRuYW1lIGVxICJyZWdFeHBQcm90b3R5cGVUYWJsZSIpIHsKKyAgICAgICAgICAgICRp
bnRyaW5zaWMgPSAiUmVnRXhwRXhlY0ludHJpbnNpYyIgaWYgKCRrZXkgZXEgImV4ZWMiKTsKKyAg
ICAgICAgICAgICRpbnRyaW5zaWMgPSAiUmVnRXhwVGVzdEludHJpbnNpYyIgaWYgKCRrZXkgZXEg
InRlc3QiKTsKKyAgICAgICAgfQogCiAgICAgICAgIHByaW50ICIgICB7IFwiJGtleVwiLCAkYXR0
cnNbJGldLCAoaW50cHRyX3QpIiAuICRjYXN0U3RyIC4gIigkZmlyc3RWYWx1ZSksIChpbnRwdHJf
dCkkc2Vjb25kVmFsdWUsICRpbnRyaW5zaWMgfSxcbiI7CiAgICAgICAgICRpKys7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvanNjLmNwcAkocmV2aXNpb24gMTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCBwcm90ZWN0ZWQ6
CiAgICAgdm9pZCBhZGRDb25zdHJ1Y3RhYmxlRnVuY3Rpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBjb25zdCBjaGFyKiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBmdW5jdGlvbiwgdW5zaWduZWQg
YXJndW1lbnRzKQogICAgIHsKICAgICAgICAgSWRlbnRpZmllciBpZGVudGlmaWVyKGdsb2JhbEV4
ZWMoKSwgbmFtZSk7Ci0gICAgICAgIHB1dERpcmVjdChnbG9iYWxEYXRhLCBpZGVudGlmaWVyLCBK
U0Z1bmN0aW9uOjpjcmVhdGUoZ2xvYmFsRXhlYygpLCB0aGlzLCBhcmd1bWVudHMsIGlkZW50aWZp
ZXIsIGZ1bmN0aW9uLCBmdW5jdGlvbikpOworICAgICAgICBwdXREaXJlY3QoZ2xvYmFsRGF0YSwg
aWRlbnRpZmllciwgSlNGdW5jdGlvbjo6Y3JlYXRlKGdsb2JhbEV4ZWMoKSwgdGhpcywgYXJndW1l
bnRzLCBpZGVudGlmaWVyLCBmdW5jdGlvbiwgTm9JbnRyaW5zaWMsIGZ1bmN0aW9uKSk7CiAgICAg
fQogfTsKIENPTVBJTEVfQVNTRVJUKCFJc0ludGVnZXI8R2xvYmFsT2JqZWN0Pjo6dmFsdWUsIFdU
Rl9Jc0ludGVnZXJfR2xvYmFsT2JqZWN0X2ZhbHNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTExMTE0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNjI5LDYgKzYyOSwxMyBAQCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5z
aWduZWQgaW5kCiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgIGNhc2UgUmVn
RXhwVGVzdDoKKyAgICAgICAgZm9yTm9kZShub2RlLmNoaWxkMSgpKS5maWx0ZXIoUHJlZGljdENl
bGwpOworICAgICAgICBmb3JOb2RlKG5vZGUuY2hpbGQyKCkpLmZpbHRlcihQcmVkaWN0Q2VsbCk7
CisgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5tYWtlVG9wKCk7CisgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgCiAgICAgY2FzZSBKdW1wOgogICAgICAgICBicmVhazsKICAgICAgICAgICAg
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Qnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzc5LDYgKzEzNzksMjggQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICByZXR1cm4g
dHJ1ZTsKICAgICB9CiAKKyAgICBjYXNlIFJlZ0V4cEV4ZWNJbnRyaW5zaWM6IHsKKyAgICAgICAg
aWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICBOb2RlSW5kZXggcmVnRXhwRXhlYyA9IGFkZFRvR3Jh
cGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpKTsKKyAgICAgICAgaWYgKHVzZXNSZXN1bHQpCisgICAgICAgICAg
ICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CisgICAgICAgIAorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgUmVnRXhwVGVzdEludHJpbnNpYzog
eworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIE5vZGVJbmRleCByZWdFeHBFeGVj
ID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwg
Z2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOworICAgICAgICBpZiAodXNlc1Jlc3VsdCkK
KyAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKKyAgICAgICAgCisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAgICAgCiAgICAgZGVmYXVsdDoKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDYgKzQ5Miw4IEBAIHN0cnVjdCBOb2RlIHsKICAg
ICAgICAgY2FzZSBSZXNvbHZlR2xvYmFsOgogICAgICAgICBjYXNlIEFycmF5UG9wOgogICAgICAg
ICBjYXNlIEFycmF5UHVzaDoKKyAgICAgICAgY2FzZSBSZWdFeHBFeGVjOgorICAgICAgICBjYXNl
IFJlZ0V4cFRlc3Q6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTMxLDYgKzEzMSwxMCBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQXJyYXlQdXNoLCBOb2Rl
UmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBt
YWNybyhBcnJheVBvcCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9i
YmVyc1dvcmxkKSBcCiAgICAgXAorICAgIC8qIE9wdGltaXphdGlvbnMgZm9yIHJlZ3VsYXIgZXhw
cmVzc2lvbiBtYXRjaGluZy4gKi9cCisgICAgbWFjcm8oUmVnRXhwRXhlYywgTm9kZVJlc3VsdEpT
IHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFJlZ0V4cFRlc3QsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBcCiAgICAgLyogT3B0aW1pemF0aW9ucyBmb3Ig
c3RyaW5nIGFjY2VzcyAqLyBcCiAgICAgbWFjcm8oU3RyaW5nQ2hhckNvZGVBdCwgTm9kZVJlc3Vs
dEludDMyKSBcCiAgICAgbWFjcm8oU3RyaW5nQ2hhckF0LCBOb2RlUmVzdWx0SlMpIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNTAyLDYgKzUwMiwyOCBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkFyCiAgICAgYXJyYXktPnB1c2goZXhlYywgSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRWYWx1ZSkpOwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoYXJy
YXktPmxlbmd0aCgpKSk7CiB9CisKK0VuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUmVnRXhwRXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgSlNDZWxsKiBhcmd1
bWVudCkKK3sKKyAgICBpZiAoIWJhc2UtPmluaGVyaXRzKCZSZWdFeHBPYmplY3Q6OnNfaW5mbykp
CisgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMpOworCisgICAgQVNTRVJUKGFy
Z3VtZW50LT5pc1N0cmluZygpIHx8IGFyZ3VtZW50LT5pc09iamVjdCgpKTsKKyAgICBKU1N0cmlu
ZyogaW5wdXQgPSBhcmd1bWVudC0+aXNTdHJpbmcoKSA/IGFzU3RyaW5nKGFyZ3VtZW50KSA6IGFz
T2JqZWN0KGFyZ3VtZW50KS0+dG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhc1JlZ0V4cE9iamVjdChiYXNlKS0+ZXhlYyhleGVjLCBpbnB1dCkpOworfQorICAgICAg
ICAKK3NpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblJlZ0V4cFRlc3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIEpTQ2VsbCogYXJndW1lbnQpCit7CisgICAgaWYgKCFiYXNlLT5p
bmhlcml0cygmUmVnRXhwT2JqZWN0OjpzX2luZm8pKSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgQVNTRVJUKGFyZ3Vt
ZW50LT5pc1N0cmluZygpIHx8IGFyZ3VtZW50LT5pc09iamVjdCgpKTsKKyAgICBKU1N0cmluZyog
aW5wdXQgPSBhcmd1bWVudC0+aXNTdHJpbmcoKSA/IGFzU3RyaW5nKGFyZ3VtZW50KSA6IGFzT2Jq
ZWN0KGFyZ3VtZW50KS0+dG9TdHJpbmcoZXhlYyk7CisgICAgcmV0dXJuIGFzUmVnRXhwT2JqZWN0
KGJhc2UpLT5tYXRjaChleGVjLCBpbnB1dCk7Cit9CiAgICAgICAgIAogRW5jb2RlZEpTVmFsdWUg
REZHX09QRVJBVElPTiBvcGVyYXRpb25BcnJheVBvcChFeGVjU3RhdGUqIGV4ZWMsIEpTQXJyYXkq
IGFycmF5KQogewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDExMTExNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MCwzNiArNjAsMzggQEAgZXh0ZXJuICJDIiB7
CiAgICAgSTogSWRlbnRpZmllcioKICAgICBHOiBHbG9iYWxSZXNvbHZlSW5mbyoKICovCi10eXBl
ZGVmIGludDMyX3QgREZHX09QRVJBVElPTiAoKlpfREZHT3BlcmF0aW9uX0QpKGRvdWJsZSk7Ci10
eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0UpKEV4ZWNTdGF0
ZSopOwotdHlwZWRlZiBKU0NlbGwqIERGR19PUEVSQVRJT04gKCpDX0RGR09wZXJhdGlvbl9FQyko
RXhlY1N0YXRlKiwgSlNDZWxsKik7Ci10eXBlZGVmIEpTQ2VsbCogREZHX09QRVJBVElPTiAoKkNf
REZHT3BlcmF0aW9uX0VDQykoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKik7CiB0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQSkoRXhlY1N0
YXRlKiwgSlNBcnJheSopOwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRUpBKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNBcnJheSop
OwordHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VDSSkoRXhlY1N0YXRlKiwgSlNDZWxs
KiwgSWRlbnRpZmllciopOwogdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgq
Sl9ERkdPcGVyYXRpb25fRUNKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSk7
Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9F
SkopKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FR0kpKEV4ZWNT
dGF0ZSosIEdsb2JhbFJlc29sdmVJbmZvKiwgSWRlbnRpZmllciopOwordHlwZWRlZiBFbmNvZGVk
SlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRUkpKEV4ZWNTdGF0ZSosIElk
ZW50aWZpZXIqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZH
T3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FSlApKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVS
QVRJT04gKCpKX0RGR09wZXJhdGlvbl9FQ0kpKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIElkZW50aWZp
ZXIqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0
aW9uX0VKQSkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEpTQXJyYXkqKTsKIHR5cGVkZWYg
RW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKSSkoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIqKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFs
dWUgREZHX09QRVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRlKiwgRW5jb2Rl
ZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VKUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IHZvaWQqKTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiAoKkpfREZHT3Bl
cmF0aW9uX0VQKShFeGVjU3RhdGUqLCB2b2lkKik7CiB0eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERG
R19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlvbl9FUFApKEV4ZWNTdGF0ZSosIHZvaWQqLCB2b2lk
Kik7Ci10eXBlZGVmIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gKCpKX0RGR09wZXJhdGlv
bl9FR0kpKEV4ZWNTdGF0ZSosIEdsb2JhbFJlc29sdmVJbmZvKiwgSWRlbnRpZmllciopOwogdHlw
ZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25fRVBTKShF
eGVjU3RhdGUqLCB2b2lkKiwgc2l6ZV90KTsKIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgREZHX09Q
RVJBVElPTiAoKkpfREZHT3BlcmF0aW9uX0VTUykoRXhlY1N0YXRlKiwgc2l6ZV90LCBzaXplX3Qp
OwotdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OICgqSl9ERkdPcGVyYXRpb25f
RUkpKEV4ZWNTdGF0ZSosIElkZW50aWZpZXIqKTsKK3R5cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFU
SU9OICgqQ19ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7Cit0eXBlZGVmIEpTQ2VsbCogREZH
X09QRVJBVElPTiAoKkNfREZHT3BlcmF0aW9uX0VDKShFeGVjU3RhdGUqLCBKU0NlbGwqKTsKK3R5
cGVkZWYgSlNDZWxsKiBERkdfT1BFUkFUSU9OICgqQ19ERkdPcGVyYXRpb25fRUNDKShFeGVjU3Rh
dGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKK3R5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpE
X0RGR09wZXJhdGlvbl9ERCkoZG91YmxlLCBkb3VibGUpOwordHlwZWRlZiBkb3VibGUgREZHX09Q
RVJBVElPTiAoKkRfREZHT3BlcmF0aW9uX0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7
Cit0eXBlZGVmIGludDMyX3QgREZHX09QRVJBVElPTiAoKlpfREZHT3BlcmF0aW9uX0QpKGRvdWJs
ZSk7Cit0eXBlZGVmIHNpemVfdCBERkdfT1BFUkFUSU9OICgqU19ERkdPcGVyYXRpb25fRUNDKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5cGVkZWYgc2l6ZV90IERGR19PUEVSQVRJ
T04gKCpTX0RGR09wZXJhdGlvbl9FSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwogdHlw
ZWRlZiBzaXplX3QgREZHX09QRVJBVElPTiAoKlNfREZHT3BlcmF0aW9uX0VKSikoRXhlY1N0YXRl
KiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKLXR5cGVkZWYgdm9pZCBERkdfT1BF
UkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpKSikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgREZHX09QRVJB
VElPTiAoKlZfREZHT3BlcmF0aW9uX0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90
LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3Bl
cmF0aW9uX0VDSkopKEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9uX0VK
UFApKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgdm9pZCopOwog
dHlwZWRlZiB2b2lkIERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkNJKShFeGVjU3Rh
dGUqLCBFbmNvZGVkSlNWYWx1ZSwgSlNDZWxsKiwgSWRlbnRpZmllciopOwordHlwZWRlZiB2b2lk
IERGR19PUEVSQVRJT04gKCpWX0RGR09wZXJhdGlvbl9FSkpKKShFeGVjU3RhdGUqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBE
RkdfT1BFUkFUSU9OICgqVl9ERkdPcGVyYXRpb25fRUpQUCkoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUsIEVuY29kZWRKU1ZhbHVlLCB2b2lkKik7CiB0eXBlZGVmIHZvaWQgREZHX09QRVJBVElP
TiAoKlZfREZHT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNv
ZGVkSlNWYWx1ZSk7Ci10eXBlZGVmIHZvaWQgREZHX09QRVJBVElPTiAoKlZfREZHT3BlcmF0aW9u
X0VBWkopKEV4ZWNTdGF0ZSosIEpTQXJyYXkqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7Ci10
eXBlZGVmIGRvdWJsZSBERkdfT1BFUkFUSU9OICgqRF9ERkdPcGVyYXRpb25fREQpKGRvdWJsZSwg
ZG91YmxlKTsKLXR5cGVkZWYgZG91YmxlIERGR19PUEVSQVRJT04gKCpEX0RGR09wZXJhdGlvbl9F
SikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUpOwotdHlwZWRlZiB2b2lkKiBERkdfT1BFUkFU
SU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiB0eXBlZGVmIHZvaWQgREZHX09Q
RVJBVElPTiAoVl9ERkdPcGVyYXRpb25fRUMpKEV4ZWNTdGF0ZSosIEpTQ2VsbCopOwordHlwZWRl
ZiB2b2lkKiBERkdfT1BFUkFUSU9OICgqUF9ERkdPcGVyYXRpb25fRSkoRXhlY1N0YXRlKik7CiAK
IC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBwcm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxl
bWVudGF0aW9ucyBvZiBvcGVyYXRpb25zIHRvbyBjb21wbGV4IHRvIEpJVC4KIEpTQ2VsbCogREZH
X09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKik7CkBAIC0xMjMsNiArMTI1
LDcgQEAgdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5bwogdm9pZCBERkdf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNOb25TdHJpY3QoRXhl
Y1N0YXRlKiwgSlNBcnJheSosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRW
YWx1ZSk7CiBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkFycmF5UHVzaChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQXJyYXkqKTsKIEVuY29k
ZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQXJyYXlQb3AoRXhlY1N0YXRlKiwgSlNB
cnJheSopOworRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25SZWdFeHBFeGVj
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCopOwogdm9pZCBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWRTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBKU0NlbGwqIGJhc2UsIElkZW50aWZpZXIqKTsKIHZvaWQgREZHX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1
ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7CiB2b2lkIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRlbnRpZmllciopOwpAQCAtMTM2LDYgKzEzOSw3IEBAIHZv
aWQgREZHX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKIHZvaWQgREZHX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0QnVpbGRMaXN0KEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgSlNDZWxsKiBiYXNlLCBJZGVudGlmaWVyKik7CiB2b2lk
IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1aWxkTGlzdChF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEpTQ2VsbCogYmFzZSwgSWRl
bnRpZmllciopOwogLy8gVGhlc2UgY29tcGFyaXNvbnMgcmV0dXJuIGEgYm9vbGVhbiB3aXRoaW4g
YSBzaXplX3Qgc3VjaCB0aGF0IHRoZSB2YWx1ZSBpcyB6ZXJvIGV4dGVuZGVkIHRvIGZpbGwgdGhl
IHJlZ2lzdGVyLgorc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uUmVnRXhwVGVzdChFeGVj
U3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlv
bkNvbXBhcmVMZXNzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwogc2l6ZV90IERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ29t
cGFyZUxlc3NFcShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKTsKIHNpemVfdCBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbXBh
cmVHcmVhdGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9u
IDExMTExNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODYsNiArMTg2LDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCisgICAgICAgIGNhc2UgUmVnRXhw
RXhlYzoKKyAgICAgICAgY2FzZSBSZWdFeHBUZXN0OiB7CisgICAgICAgICAgICBpZiAobm9kZS5n
ZXRIZWFwUHJlZGljdGlvbigpKQorICAgICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVk
aWN0aW9uKG5vZGUuZ2V0SGVhcFByZWRpY3Rpb24oKSk7CisgICAgICAgICAgICBjaGFuZ2VkIHw9
IG1lcmdlRGVmYXVsdEFyaXRoRmxhZ3Mobm9kZSwgZmxhZ3MpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKwogICAgICAgICBjYXNlIFN0cmluZ0NoYXJDb2RlQXQ6IHsKICAgICAgICAg
ICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFByZWRpY3RJbnQzMik7CiAgICAgICAgICAg
ICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEFyaXRoRmxhZ3Mobm9kZSwgZmxhZ3MpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTE1LDYgKzI1MTUs
NTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBi
cmVhazsKICAgICB9CiAKKyAgICBjYXNlIFJlZ0V4cEV4ZWM6IHsKKyAgICAgICAgaWYgKGNvbXBp
bGVSZWdFeHBFeGVjKG5vZGUpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICgh
bm9kZS5hZGp1c3RlZFJlZkNvdW50KCkpIHsKKyAgICAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICBTcGVjdWxhdGVDZWxs
T3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgIEdQUlJl
ZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9
IGFyZ3VtZW50LmdwcigpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmbHVzaFJlZ2lzdGVy
cygpOworICAgICAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwVGVzdCwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBh
cmd1bWVudEdQUik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG5vUmVzdWx0KG1fY29tcGls
ZUluZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgICAgIEdQ
UlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIGFyZ3VtZW50R1BSID0g
YXJndW1lbnQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBHUFJSZXN1bHQyIHJlc3VsdFRhZyh0aGlzKTsKKyAgICAgICAgR1BSUmVzdWx0IHJlc3Vs
dFBheWxvYWQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUmVnRXhwRXhl
YywgcmVzdWx0VGFnLmdwcigpLCByZXN1bHRQYXlsb2FkLmdwcigpLCBiYXNlR1BSLCBhcmd1bWVu
dEdQUik7CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZy5ncHIoKSwg
cmVzdWx0UGF5bG9hZC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgICAgIAorICAgIGNhc2UgUmVnRXhwVGVzdDogeworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYXJndW1lbnRHUFIgPSBhcmd1
bWVudC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAg
IEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
UmVnRXhwVGVzdCwgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7CisgICAgICAg
IAorICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBp
dCBoZXJlLgorICAgICAgICBib29sZWFuUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAogICAgIGNhc2UgQXJyYXlQdXNo
OiB7CiAgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEo
KSk7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUuY2hpbGQyKCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
NjQuY3BwCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNTU5LDYgKzI1NTksNTMg
QEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlJiBub2RlKQogICAgICAgICBicmVh
azsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUmVnRXhwRXhlYzogeworICAgICAgICBpZiAo
Y29tcGlsZVJlZ0V4cEV4ZWMobm9kZSkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
aWYgKCFub2RlLmFkanVzdGVkUmVmQ291bnQoKSkgeworICAgICAgICAgICAgU3BlY3VsYXRlQ2Vs
bE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIGFyZ3VtZW50KHRoaXMsIG5vZGUuY2hpbGQyKCkpOworICAgICAgICAgICAg
R1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICAgICAgR1BSUmVnIGFyZ3VtZW50
R1BSID0gYXJndW1lbnQuZ3ByKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisgICAgICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25SZWdFeHBUZXN0LCByZXN1bHQuZ3ByKCksIGJhc2VH
UFIsIGFyZ3VtZW50R1BSKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbm9SZXN1bHQobV9j
b21waWxlSW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBT
cGVjdWxhdGVDZWxsT3BlcmFuZCBhcmd1bWVudCh0aGlzLCBub2RlLmNoaWxkMigpKTsKKyAgICAg
ICAgR1BSUmVnIGJhc2VHUFIgPSBiYXNlLmdwcigpOworICAgICAgICBHUFJSZWcgYXJndW1lbnRH
UFIgPSBhcmd1bWVudC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7
CisgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uUmVnRXhwRXhlYywgcmVzdWx0LmdwcigpLCBiYXNlR1BSLCBhcmd1bWVudEdQUik7
CisgICAgICAgIAorICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIFJlZ0V4cFRlc3Q6IHsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsK
KyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS5jaGlsZDIo
KSk7CisgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gYmFzZS5ncHIoKTsKKyAgICAgICAgR1BSUmVn
IGFyZ3VtZW50R1BSID0gYXJndW1lbnQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3QsIHJlc3VsdC5ncHIoKSwgYmFzZUdQUiwgYXJn
dW1lbnRHUFIpOworICAgICAgICAKKyAgICAgICAgLy8gSWYgd2UgYWRkIGEgRGF0YUZvcm1hdEJv
b2wsIHdlIHNob3VsZCB1c2UgaXQgaGVyZS4KKyAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1t
MzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCwgRGF0YUZvcm1hdEpTQm9vbGVhbik7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2g6IHsKICAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS5jaGlsZDIoKSk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24g
MTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3NjQsNiArMjc2NCw0NiBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlTmV3RnVuY3Rpb25FCiAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29t
cGlsZUluZGV4KTsKIH0KIAorYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMo
Tm9kZSYgbm9kZSkKK3sKKyAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQ
ZWVwSG9sZUJyYW5jaCgpOworICAgIGlmIChicmFuY2hJbmRleEluQmxvY2sgPT0gVUlOVF9NQVgp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBOb2RlSW5kZXggYnJhbmNoTm9kZUluZGV4ID0g
bV9qaXQuZ3JhcGgoKS5tX2Jsb2Nrc1ttX2Jsb2NrXS0+YXQoYnJhbmNoSW5kZXhJbkJsb2NrKTsK
KyAgICBBU1NFUlQobm9kZS5hZGp1c3RlZFJlZkNvdW50KCkgPT0gMSk7CisKKyAgICBOb2RlJiBi
cmFuY2hOb2RlID0gYXQoYnJhbmNoTm9kZUluZGV4KTsKKyAgICBCbG9ja0luZGV4IHRha2VuID0g
YnJhbmNoTm9kZS50YWtlbkJsb2NrSW5kZXgoKTsKKyAgICBCbG9ja0luZGV4IG5vdFRha2VuID0g
YnJhbmNoTm9kZS5ub3RUYWtlbkJsb2NrSW5kZXgoKTsKKyAgICAKKyAgICBib29sIGludmVydCA9
IGZhbHNlOworICAgIGlmICh0YWtlbiA9PSAobV9ibG9jayArIDEpKSB7CisgICAgICAgIGludmVy
dCA9IHRydWU7CisgICAgICAgIEJsb2NrSW5kZXggdG1wID0gdGFrZW47CisgICAgICAgIHRha2Vu
ID0gbm90VGFrZW47CisgICAgICAgIG5vdFRha2VuID0gdG1wOworICAgIH0KKworICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRl
Q2VsbE9wZXJhbmQgYXJndW1lbnQodGhpcywgbm9kZS5jaGlsZDIoKSk7CisgICAgR1BSUmVnIGJh
c2VHUFIgPSBiYXNlLmdwcigpOworICAgIEdQUlJlZyBhcmd1bWVudEdQUiA9IGFyZ3VtZW50Lmdw
cigpOworICAgIAorICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblJlZ0V4cFRlc3QsIHJlc3VsdC5ncHIo
KSwgYmFzZUdQUiwgYXJndW1lbnRHUFIpOworCisgICAgYnJhbmNoVGVzdDMyKGludmVydCA/IEpJ
VENvbXBpbGVyOjpaZXJvIDogSklUQ29tcGlsZXI6Ok5vblplcm8sIHJlc3VsdC5ncHIoKSwgdGFr
ZW4pOworICAgIGp1bXAobm90VGFrZW4pOworCisgICAgdXNlKG5vZGUuY2hpbGQxKCkpOworICAg
IHVzZShub2RlLmNoaWxkMigpKTsKKyAgICBtX2luZGV4SW5CbG9jayA9IGJyYW5jaEluZGV4SW5C
bG9jazsKKyAgICBtX2NvbXBpbGVJbmRleCA9IGJyYW5jaE5vZGVJbmRleDsKKworICAgIHJldHVy
biB0cnVlOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6REZHCiAKICNlbmRpZgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTg0LDYgKzExODQsMTEgQEAgcHJpdmF0ZToKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwogICAgICAg
ICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24s
IHJlc3VsdCk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oU19E
RkdPcGVyYXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQ
UlJlZyBhcmcyKQorICAgIHsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZzEsIGFyZzIpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25D
aGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdCk7CisgICAgfQogICAgIEpJVENvbXBpbGVy
OjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVyYXRpb25fRVBQIG9wZXJhdGlvbiwgR1BSUmVn
IHJlc3VsdCwgR1BSUmVnIGFyZzEsIEdQUlJlZyBhcmcyKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIpOwpAQCAtMTE5OSw2ICsxMjA0
LDExIEBAIHByaXZhdGU6CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbS5tX3ZhbHVlKSkpKSwgYXJnMik7CiAgICAgICAg
IHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwg
cmVzdWx0KTsKICAgICB9CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RG
R09wZXJhdGlvbl9FQ0Mgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BS
UmVnIGFyZzIpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoYXJnMSwgYXJnMik7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNo
ZWNrU2V0UmVzdWx0KG9wZXJhdGlvbiwgcmVzdWx0KTsKKyAgICB9CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgY2FsbE9wZXJhdGlvbihKX0RGR09wZXJhdGlvbl9FQ0ogb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIpCiAgICAgewogICAgICAgICBtX2ppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMik7CkBAIC0xMzU3LDYgKzEzNjcs
MTEgQEAgcHJpdmF0ZToKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KKyAgICBKSVRD
b21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZHT3BlcmF0aW9uX0VDQyBvcGVyYXRpb24s
IEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCBy
ZXN1bHQpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFNfREZH
T3BlcmF0aW9uX0VKSiBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxVGFnLCBH
UFJSZWcgYXJnMVBheWxvYWQsIEdQUlJlZyBhcmcyVGFnLCBHUFJSZWcgYXJnMlBheWxvYWQpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMVBheWxv
YWQsIGFyZzFUYWcsIGFyZzJQYXlsb2FkLCBhcmcyVGFnKTsKQEAgLTEzODIsNiArMTM5NywxMSBA
QCBwcml2YXRlOgogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJn
MSwgYXJnMlBheWxvYWQsIGFyZzJUYWcpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhF
eGNlcHRpb25DaGVja1NldFJlc3VsdChvcGVyYXRpb24sIHJlc3VsdFBheWxvYWQsIHJlc3VsdFRh
Zyk7CiAgICAgfQorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9ERkdPcGVy
YXRpb25fRUNDIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdFRhZywgR1BSUmVnIHJlc3VsdFBheWxv
YWQsIEdQUlJlZyBhcmcxLCBHUFJSZWcgYXJnMikKKyAgICB7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyKTsKKyAgICAgICAgcmV0dXJuIGFwcGVu
ZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHRQYXlsb2Fk
LCByZXN1bHRUYWcpOworICAgIH0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KFZfREZHT3BlcmF0aW9uX0VDIG9wZXJhdGlvbiwgR1BSUmVnIGFyZzEpCiAgICAgewogICAgICAg
ICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7CkBAIC0xNzM4LDggKzE3
NTgsOSBAQCBwcml2YXRlOgogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9ySW50VHlwZWRBcnJh
eShjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYsIEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVy
dHksIE5vZGUmLCBzaXplX3QgZWxlbWVudFNpemUsIFR5cGVkQXJyYXlTcGVjdWxhdGlvblJlcXVp
cmVtZW50cywgVHlwZWRBcnJheVNpZ25lZG5lc3MsIFR5cGVkQXJyYXlSb3VuZGluZyA9IFRydW5j
YXRlUm91bmRpbmcpOwogICAgIHZvaWQgY29tcGlsZUdldEJ5VmFsT25GbG9hdFR5cGVkQXJyYXko
Y29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImLCBOb2RlJiwgc2l6ZV90IGVsZW1lbnRTaXplLCBU
eXBlZEFycmF5U3BlY3VsYXRpb25SZXF1aXJlbWVudHMpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5
VmFsRm9yRmxvYXRUeXBlZEFycmF5KGNvbnN0IFR5cGVkQXJyYXlEZXNjcmlwdG9yJiwgR1BSUmVn
IGJhc2UsIEdQUlJlZyBwcm9wZXJ0eSwgTm9kZSYsIHNpemVfdCBlbGVtZW50U2l6ZSwgVHlwZWRB
cnJheVNwZWN1bGF0aW9uUmVxdWlyZW1lbnRzKTsKLSAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlv
bk5vQ2hlY2soTm9kZSYgbm9kZSk7Ci0gICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNz
aW9uKE5vZGUmIG5vZGUpOworICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uTm9DaGVjayhOb2Rl
Jik7CisgICAgdm9pZCBjb21waWxlTmV3RnVuY3Rpb25FeHByZXNzaW9uKE5vZGUmKTsKKyAgICBi
b29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUmKTsKICAgICAKICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQ2xhc3NUeXBlLCBib29sIGRlc3RydWN0b3IsIHR5cGVuYW1lIFN0cnVjdHVyZVR5cGU+IAog
ICAgIHZvaWQgZW1pdEFsbG9jYXRlQmFzaWNKU09iamVjdChTdHJ1Y3R1cmVUeXBlIHN0cnVjdHVy
ZSwgR1BSUmVnIHJlc3VsdEdQUiwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCYgc2xvd1BhdGgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRyaW5zaWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bnRyaW5zaWMuaAkocmV2aXNpb24gMTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50cmluc2ljLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAgZW51bSBJ
bnRyaW5zaWMgewogICAgIFJvdW5kSW50cmluc2ljLAogICAgIEV4cEludHJpbnNpYywKICAgICBM
b2dJbnRyaW5zaWMsCisgICAgUmVnRXhwRXhlY0ludHJpbnNpYywKKyAgICBSZWdFeHBUZXN0SW50
cmluc2ljLAogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2aXNpb24gMTExMTE0KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDIyICs1OSwyMyBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5s
aW5lCiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKLUpTRnVuY3Rpb24qIEpTRnVu
Y3Rpb246OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmpl
Y3QsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5h
dGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKK0pTRnVuY3Rp
b24qIEpTRnVuY3Rpb246OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1
bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlv
biBuYXRpdmVDb25zdHJ1Y3RvcikKIHsKLSAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgbmF0
aXZlQ29uc3RydWN0b3IpOworICAgIE5hdGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CisjaWYg
RU5BQkxFKEpJVCkKKyAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2ljICYmIGV4ZWMtPmds
b2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgeworICAgICAgICBBU1NFUlQobmF0aXZlQ29uc3RydWN0
b3IgPT0gY2FsbEhvc3RGdW5jdGlvbkFzQ29uc3RydWN0b3IpOworICAgICAgICBleGVjdXRhYmxl
ID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgaW50
cmluc2ljKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBleGVjdXRhYmxlID0gZXhlYy0+
Z2xvYmFsRGF0YSgpLmdldEhvc3RGdW5jdGlvbihuYXRpdmVGdW5jdGlvbiwgbmF0aXZlQ29uc3Ry
dWN0b3IpOworCiAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9j
YXRlQ2VsbDxKU0Z1bmN0aW9uPigqZXhlYy0+aGVhcCgpKSkgSlNGdW5jdGlvbihleGVjLCBnbG9i
YWxPYmplY3QsIGdsb2JhbE9iamVjdC0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSk7CiAgICAgLy8gQ2Fu
J3QgZG8gdGhpcyBkdXJpbmcgaW5pdGlhbGl6YXRpb24gYmVjYXVzZSBnZXRIb3N0RnVuY3Rpb24g
bWlnaHQgZG8gYSBHQyBhbGxvY2F0aW9uLgogICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbihl
eGVjLCBleGVjdXRhYmxlLCBsZW5ndGgsIG5hbWUpOwogICAgIHJldHVybiBmdW5jdGlvbjsKIH0K
IAotSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFt
ZSwgTmF0aXZlRXhlY3V0YWJsZSogbmF0aXZlRXhlY3V0YWJsZSkKLXsKLSAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KCpleGVj
LT5oZWFwKCkpKSBKU0Z1bmN0aW9uKGV4ZWMsIGdsb2JhbE9iamVjdCwgZ2xvYmFsT2JqZWN0LT5m
dW5jdGlvblN0cnVjdHVyZSgpKTsKLSAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24oZXhlYywg
bmF0aXZlRXhlY3V0YWJsZSwgbGVuZ3RoLCBuYW1lKTsKLSAgICByZXR1cm4gZnVuY3Rpb247Ci19
Ci0KIEpTRnVuY3Rpb246OkpTRnVuY3Rpb24oRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICA6IEJhc2UoZXhlYy0+
Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUpCiAgICAgLCBtX2V4ZWN1dGFibGUoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTExMTE0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC01NCw4ICs1NCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHB1YmxpYzoKICAg
ICAgICAgdHlwZWRlZiBKU05vbkZpbmFsT2JqZWN0IEJhc2U7CiAKLSAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9i
amVjdCosIGludCBsZW5ndGgsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIE5hdGl2ZUZ1bmN0aW9u
IG5hdGl2ZUZ1bmN0aW9uLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKLSAgICAgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNy
ZWF0ZShFeGVjU3RhdGUqLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IElkZW50
aWZpZXImIG5hbWUsIE5hdGl2ZUV4ZWN1dGFibGUqIG5hdGl2ZUV4ZWN1dGFibGUpOworICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSos
IEpTR2xvYmFsT2JqZWN0KiwgaW50IGxlbmd0aCwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgTmF0
aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBOYXRp
dmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVj
dG9yKTsKIAogICAgICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKEV4ZWNTdGF0ZSogZXhl
YywgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBTY29wZUNoYWluTm9kZSogc2NvcGVD
aGFpbikKICAgICAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTG9v
a3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29r
dXAuY3BwCShyZXZpc2lvbiAxMTExMTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Mb29rdXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxNSArNzYsNyBAQCBib29sIHNldFVw
U3RhdGljRnVuY3Rpb25TbG90KEV4ZWNTdGF0ZSogCiAgICAgICAgIGlmICh0aGlzT2JqLT5zdGF0
aWNGdW5jdGlvbnNSZWlmaWVkKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0g
ICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0ID0gdGhpc09iai0+Z2xvYmFsT2JqZWN0KCk7Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgaWYgKGV4ZWMtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSAmJiBlbnRyeS0+aW50cmlu
c2ljKCkgIT0gTm9JbnRyaW5zaWMpCi0gICAgICAgICAgICBmdW5jdGlvbiA9IEpTRnVuY3Rpb246
OmNyZWF0ZShleGVjLCBnbG9iYWxPYmplY3QsIGVudHJ5LT5mdW5jdGlvbkxlbmd0aCgpLCBwcm9w
ZXJ0eU5hbWUsIGV4ZWMtPmdsb2JhbERhdGEoKS5nZXRIb3N0RnVuY3Rpb24oZW50cnktPmZ1bmN0
aW9uKCksIGVudHJ5LT5pbnRyaW5zaWMoKSkpOwotICAgICAgICBlbHNlCi0jZW5kaWYKLSAgICAg
ICAgICAgIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4ZWMsIGdsb2JhbE9iamVjdCwg
ZW50cnktPmZ1bmN0aW9uTGVuZ3RoKCksIHByb3BlcnR5TmFtZSwgZW50cnktPmZ1bmN0aW9uKCkp
OwotCisgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gSlNGdW5jdGlvbjo6Y3JlYXRlKGV4
ZWMsIHRoaXNPYmotPmdsb2JhbE9iamVjdCgpLCBlbnRyeS0+ZnVuY3Rpb25MZW5ndGgoKSwgcHJv
cGVydHlOYW1lLCBlbnRyeS0+ZnVuY3Rpb24oKSwgZW50cnktPmludHJpbnNpYygpKTsKICAgICAg
ICAgdGhpc09iai0+cHV0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgcHJvcGVydHlOYW1lLCBm
dW5jdGlvbiwgZW50cnktPmF0dHJpYnV0ZXMoKSk7CiAgICAgICAgIGxvY2F0aW9uID0gdGhpc09i
ai0+Z2V0RGlyZWN0TG9jYXRpb24oZXhlYy0+Z2xvYmFsRGF0YSgpLCBwcm9wZXJ0eU5hbWUpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjc2LDIzICsyNzYsMTggQEAg
dm9pZCBSZWdFeHBPYmplY3Q6OnB1dChKU0NlbGwqIGNlbGwsIEV4ZQogICAgIGxvb2t1cFB1dDxS
ZWdFeHBPYmplY3QsIEpTT2JqZWN0PihleGVjLCBwcm9wZXJ0eU5hbWUsIHZhbHVlLCBFeGVjU3Rh
dGU6OnJlZ0V4cFRhYmxlKGV4ZWMpLCBqc0Nhc3Q8UmVnRXhwT2JqZWN0Kj4oY2VsbCksIHNsb3Qp
OwogfQogCi1KU1ZhbHVlIFJlZ0V4cE9iamVjdDo6dGVzdChFeGVjU3RhdGUqIGV4ZWMpCitKU1Zh
bHVlIFJlZ0V4cE9iamVjdDo6ZXhlYyhFeGVjU3RhdGUqIGV4ZWMsIEpTU3RyaW5nKiBzdHJpbmcp
CiB7Ci0gICAgcmV0dXJuIGpzQm9vbGVhbihtYXRjaChleGVjKSk7Ci19Ci0KLUpTVmFsdWUgUmVn
RXhwT2JqZWN0OjpleGVjKEV4ZWNTdGF0ZSogZXhlYykKLXsKLSAgICBpZiAobWF0Y2goZXhlYykp
CisgICAgaWYgKG1hdGNoKGV4ZWMsIHN0cmluZykpCiAgICAgICAgIHJldHVybiBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnJlZ0V4cENvbnN0cnVjdG9yKCktPmFycmF5T2ZNYXRjaGVzKGV4
ZWMpOwogICAgIHJldHVybiBqc051bGwoKTsKIH0KIAogLy8gU2hhcmVkIGltcGxlbWVudGF0aW9u
IHVzZWQgYnkgdGVzdCBhbmQgZXhlYy4KLWJvb2wgUmVnRXhwT2JqZWN0OjptYXRjaChFeGVjU3Rh
dGUqIGV4ZWMpCitib29sIFJlZ0V4cE9iamVjdDo6bWF0Y2goRXhlY1N0YXRlKiBleGVjLCBKU1N0
cmluZyogc3RyaW5nKQogewogICAgIFJlZ0V4cENvbnN0cnVjdG9yKiByZWdFeHBDb25zdHJ1Y3Rv
ciA9IGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cmVnRXhwQ29uc3RydWN0b3IoKTsKLSAg
ICBVU3RyaW5nIGlucHV0ID0gZXhlYy0+YXJndW1lbnQoMCkudG9TdHJpbmcoZXhlYyktPnZhbHVl
KGV4ZWMpOworICAgIFVTdHJpbmcgaW5wdXQgPSBzdHJpbmctPnZhbHVlKGV4ZWMpOwogICAgIEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAgaWYgKCFy
ZWdFeHAoKS0+Z2xvYmFsKCkpIHsKICAgICAgICAgaW50IHBvc2l0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwT2JqZWN0LmgJKHJldmlzaW9uIDExMTEx
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cE9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw4ICs2Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIG1fbGFzdEluZGV4LmdldCgpOwogICAgICAgICB9CiAKLSAgICAgICAgSlNWYWx1ZSB0
ZXN0KEV4ZWNTdGF0ZSopOwotICAgICAgICBKU1ZhbHVlIGV4ZWMoRXhlY1N0YXRlKik7CisgICAg
ICAgIGJvb2wgbWF0Y2goRXhlY1N0YXRlKiwgSlNTdHJpbmcqIHN0cmluZyk7CisgICAgICAgIEpT
VmFsdWUgZXhlYyhFeGVjU3RhdGUqLCBKU1N0cmluZyogc3RyaW5nKTsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgY29uc3QgSWRl
bnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKICAgICAgICAgc3RhdGljIGJv
b2wgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgY29uc3Qg
SWRlbnRpZmllciYsIFByb3BlcnR5RGVzY3JpcHRvciYpOwpAQCAtOTUsOCArOTUsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIGJvb2wgZGVmaW5l
T3duUHJvcGVydHkoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eU5hbWUsIFByb3BlcnR5RGVzY3JpcHRvciYsIGJvb2wgc2hvdWxkVGhyb3cpOwogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgYm9vbCBtYXRjaChFeGVjU3RhdGUqKTsKLQogICAgICAgICBXcml0
ZUJhcnJpZXI8UmVnRXhwPiBtX3JlZ0V4cDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1fbGFzdEluZGV4OwogICAgICAgICBib29sIG1fbGFzdEluZGV4SXNXcml0YWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cFByb3RvdHlwZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwUHJvdG90eXBlLmNw
cAkocmV2aXNpb24gMTExMTE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIHJlZ0V4cFByb3RvCiAgICAgSlNWYWx1ZSB0aGlzVmFsdWUg
PSBleGVjLT5ob3N0VGhpc1ZhbHVlKCk7CiAgICAgaWYgKCF0aGlzVmFsdWUuaW5oZXJpdHMoJlJl
Z0V4cE9iamVjdDo6c19pbmZvKSkKICAgICAgICAgcmV0dXJuIHRocm93Vk1UeXBlRXJyb3IoZXhl
Yyk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0aGlzVmFsdWUp
LT50ZXN0KGV4ZWMpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc1Jl
Z0V4cE9iamVjdCh0aGlzVmFsdWUpLT5tYXRjaChleGVjLCBleGVjLT5hcmd1bWVudCgwKS50b1N0
cmluZyhleGVjKSkpKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQ
cm90b0Z1bmNFeGVjKEV4ZWNTdGF0ZSogZXhlYykKQEAgLTkyLDcgKzkyLDcgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCByZWdFeHBQcm90bwogICAgIEpTVmFsdWUgdGhpc1ZhbHVlID0g
ZXhlYy0+aG9zdFRoaXNWYWx1ZSgpOwogICAgIGlmICghdGhpc1ZhbHVlLmluaGVyaXRzKCZSZWdF
eHBPYmplY3Q6OnNfaW5mbykpCiAgICAgICAgIHJldHVybiB0aHJvd1ZNVHlwZUVycm9yKGV4ZWMp
OwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYXNSZWdFeHBPYmplY3QodGhpc1ZhbHVlKS0+
ZXhlYyhleGVjKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhc1JlZ0V4cE9iamVjdCh0
aGlzVmFsdWUpLT5leGVjKGV4ZWMsIGV4ZWMtPmFyZ3VtZW50KDApLnRvU3RyaW5nKGV4ZWMpKSk7
CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgcmVnRXhwUHJvdG9GdW5jQ29tcGls
ZShFeGVjU3RhdGUqIGV4ZWMpCg==
</data>
<flag name="review"
          id="136132"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>