<?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>63347</bug_id>
          
          <creation_ts>2011-06-24 13:28:19 -0700</creation_ts>
          <short_desc>DFG non-speculative JIT has potentially harmful speculations with respect to arithmetic operations.</short_desc>
          <delta_ts>2011-06-26 12:31:13 -0700</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>All</rep_platform>
          <op_sys>All</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>0</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barraclough</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>427070</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-24 13:28:19 -0700</bug_when>
    <thetext>Currently, the DFG speculative JIT speculates that numbers are integers, while the DFG non-speculative JIT speculates that numbers are doubles.  The latter means that if speculative execution bails out for any reason, then any subsequent arithmetic operation will rebox the integers involved as doubles, meaning that after that all operations on that value (outside of this current non-speculative call frame) will bail out of the fast path.  This even affects GetByVal within non-speculative execution, but it may also affect other call frames if that value is returned or stored into the heap.  Instead, the non-speculative JIT should use the same policy as the baseline JIT: attempt a fast path integer operation and box the value as an integer if possible, and only bail to double arithmetic (or value operations) if it&apos;s really necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427094</commentid>
    <comment_count>1</comment_count>
      <attachid>98534</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-24 13:44:55 -0700</bug_when>
    <thetext>Created attachment 98534
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427102</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-24 13:47:48 -0700</bug_when>
    <thetext>Attachment 98534 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/DFGNonSpeculativeJIT.h:104:  The parameter name &quot;node&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 5 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>427108</commentid>
    <comment_count>3</comment_count>
      <attachid>98537</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-24 13:50:38 -0700</bug_when>
    <thetext>Created attachment 98537
the patch (fix style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427209</commentid>
    <comment_count>4</comment_count>
      <attachid>98537</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-24 15:40:44 -0700</bug_when>
    <thetext>Comment on attachment 98537
the patch (fix style)

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

Hi Filip, looks pretty good, just a few issues to fix.

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:242
&gt; +    GPRTemporary temp(this);

Can either of these temporaries reuse arg1/arg2?

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:292
&gt; +        appendCallWithExceptionCheck(operationValueAdd);

I think it would be a mistake to call operationValueAdd, which is passed an ExecState, but not check for an exception.  We wouldn&apos;t expect one to be thrown with numeric operands, but this is a subtlety that could a future change could trip over.  It&apos;s probably best to add an operationArithAdd that does not take an ExecState, and can assert that its arguments are numeric.

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:424
&gt; +        GPRTemporary result(this);

I think this result should be able to reuse op1.

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:480
&gt; +            GPRTemporary result(this);

We should reuse the register from op1 here, where possible.  (Not only will this reduce register pressure, but if the register bank returns the same register then the MacroAssembler will omit the move).

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:551
&gt; +

For the Div &amp; Mod I think it would be cleaner to follow the current pattern of planting calls out via a helper &apos;callOperation&apos; method in JITCodeGenerator.h.  This should mean adding a J_DFGOperation_JJ operation type.

&gt; Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:586
&gt; +    case CompareLess:

Sharing the code for these four ops seems like a great idea, but merging them here has meant adding two extra switches &amp; interleaves one in the implementation of a call.  I&apos;d suggest it might be cleaner to add a helper function function that is passed a RelationalCondition, and a Z_DFGOperation_EJJ - each op could call the helper with the appropriate args &amp; the extra switches could be ditched.

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:120
&gt; +// FIXME: these operations would be faster if the arguments were pushed, since we will almost

I not sure that I believe this FIXME, particularly wrt. ARM platforms.  Please give a clearer explanation to justify this, or remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427323</commentid>
    <comment_count>5</comment_count>
      <attachid>98583</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-24 23:27:49 -0700</bug_when>
    <thetext>Created attachment 98583
the patch (fix for review)

Fixed all of the issues except creating a callOperation-like helper for div/mod and the other arithmetic operations, since I suspect that we&apos;ll be modifying the ABIs of these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427325</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-24 23:31:45 -0700</bug_when>
    <thetext>Attachment 98583 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/DFGNonSpeculativeJIT.cpp:167:  Missing space after ,  [whitespace/comma] [3]
Source/JavaScriptCore/dfg/DFGNonSpeculativeJIT.cpp:276:  Missing space after ,  [whitespace/comma] [3]
Total errors found: 2 in 5 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>427331</commentid>
    <comment_count>7</comment_count>
      <attachid>98584</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-25 00:15:22 -0700</bug_when>
    <thetext>Created attachment 98584
the patch (fixed review, style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427472</commentid>
    <comment_count>8</comment_count>
      <attachid>98584</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-06-25 19:24:38 -0700</bug_when>
    <thetext>Comment on attachment 98584
the patch (fixed review, style)

Hey Filip, looks good now, but I think you missed a review comment, I believe that in the case of UInt32ToNumber &amp; ValueToNumber the result could be reusing the operand&apos;s register?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427542</commentid>
    <comment_count>9</comment_count>
      <attachid>98630</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2011-06-26 10:38:28 -0700</bug_when>
    <thetext>Created attachment 98630
the patch (fixed review, style)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427563</commentid>
    <comment_count>10</comment_count>
      <attachid>98630</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-26 12:31:08 -0700</bug_when>
    <thetext>Comment on attachment 98630
the patch (fixed review, style)

Clearing flags on attachment: 98630

Committed r89772: &lt;http://trac.webkit.org/changeset/89772&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>427564</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-06-26 12:31:13 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98534</attachid>
            <date>2011-06-24 13:44:55 -0700</date>
            <delta_ts>2011-06-24 13:50:38 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>nonspecarith_patch_1.diff</filename>
            <type>text/plain</type>
            <size>24749</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDYtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgbm9uLXNwZWN1bGF0aXZl
IEpJVCBoYXMgcG90ZW50aWFsbHkgaGFybWZ1bCBzcGVjdWxhdGlvbnMgd2l0aCByZXNwZWN0IHRv
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMzQ3CisKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAgICAgLSBDaGFuZ2VkIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBz
cGVjdWxhdGUgaW4gZmF2b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9u
U3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgICAgIC0gQWRk
ZWQgc2xvdy1wYXRoIHJvdXRpbmVzIGZvciBhcml0aG1ldGljIHRoYXQgcGVyZm9ybSBubyBzcGVj
dWxhdGlvbjsgdGhlCisgICAgICAgICAgICAgIG5vbi1zcGVjdWxhdGl2ZSBKSVQgd2lsbCBnZW5l
cmF0ZSBjYWxscyB0byB0aGVzZSBpbiBjYXNlcyB3aGVyZSBpdHMKKyAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb24gZmFpbHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKwogMjAxMS0w
Ni0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg5NTk0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5
Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDM3ICs1NiwzMiBAQCBFbnRyeUxvY2F0aW9uOjpFbnRy
eUxvY2F0aW9uKE1hY3JvQXNzZW1iCiAgICAgfQogfQogCi12b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojp2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGUFJSZWcgZnByKQordm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYgb3BlcmFu
ZCwgR1BSUmVnIGdwcikKIHsKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAg
dGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8K
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwotICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHRlbXBHcHIpOwotICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wR3ByLCBm
cHIpOworICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5k
bGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1f
aml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwciwganNWYWx1ZUdwcik7CiAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1faml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKTsKLSAg
ICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBmcHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZnByKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGdwcik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7Cisg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3By
LCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxl
ZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiB9
CiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVlT3BlcmFuZCYg
b3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKQEAgLTE2NSw2ICsxNjAsMTU5IEBAIGJvb2wgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBO
b2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJl
Z0FyZ0dQUiA9IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RJbnQ7CisgICAgCisgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChpbW1DaGlsZCk7CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIocmVnQ2hpbGQp
KQorICAgICAgICBub3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIAor
ICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKHJlZ0FyZ0dQUiwgcmVzdWx0R1BSKTsgCisgICAg
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG92ZXJmbG93OworICAgIAorICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJh
bmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBJbW0zMihpbW0pLCByZXN1bHRHUFIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6IHsK
KyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIEltbTMyKGltbSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJlZ0NoaWxkKSkKKyAgICAg
ICAgbm90SW50LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7
CisgICAgCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCByZWdBcmdHUFIp
OworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBpZiAoY29t
bXV0ZSkgeworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgICAgICB9CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVmFsdWVBZGQpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgQVNTRVJUKCFjb21tdXRlKTsKKyAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJpdGhTdWIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOworfQorCit2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0Fy
aXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2Rl
LmNoaWxkMik7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
KyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MikpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAKKyAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihhcmcxR1BSLCByZXN1bHRHUFIpOworICAg
IG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzJHUFIsIHRlbXBHUFIpOworICAgIAorICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHRlbXBHUFIsIHJl
c3VsdEdQUikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJp
dGhTdWI6IHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgdGVtcEdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCB0ZW1w
R1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAg
CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BS
KTsKKyAgICBpZiAob3AgPT0gQXJpdGhBZGQpIHsKKyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRz
KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblZhbHVlQWRkKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxPihhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEFyaXRoU3ViOgorICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25B
cml0aFN1Yik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoTXVsOgorICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25Bcml0aE11
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7Cit9CisKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hl
Y2sgZm9yIHNwZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0
aW9uIGluIHRoZQpAQCAtMjcyLDE0ICs0MjAsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICBJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEu
Z3ByKCksIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcG9z
aXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIG1faml0LmFkZERvdWJsZShK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRp
dmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBv
cDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICAgICAgbV9qaXQu
YWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBib3hl
ci5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG9QdHIoYm94ZXIu
ZnByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIAorICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKICAgICAgICAgcG9z
aXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
MzE0LDE0MCArNDc0LDczIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKTsKICAgICAg
ICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CiAKLSAgICAgICAgaWYg
KGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3By
KCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0Lmdy
YXBoKClbbm9kZS5jaGlsZDFdLnZpcnR1YWxSZWdpc3RlcigpXTsKICAgICAgICAgaWYgKChjaGls
ZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8fCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0Rv
dWJsZSkgewotICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5m
cHIoKSk7Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BS
ID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5ncHIoKSwg
YXJnMUdQUiwgYXJnMkdQUik7Ci0KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7Cisg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7CisgICAgICAgICAgICBr
bm93bkNvbnN0YW50QXJpdGhPcChBcml0aEFkZCwgbm9kZS5jaGlsZDIsIG5vZGUuY2hpbGQxLCB0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAga25vd25Db25z
dGFudEFyaXRoT3AoQXJpdGhBZGQsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJhc2ljQXJp
dGhPcChBcml0aEFkZCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAK
ICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwot
ICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7CisgICAgICAgICAgICBrbm93bkNv
bnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyLCBmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmFzaWNB
cml0aE9wKEFyaXRoU3ViLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBBcml0aE11bDogewotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgRlBSUmVn
IHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAg
ICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJh
c2ljQXJpdGhPcChBcml0aE11bCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAg
ICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBEb3VibGVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIpOwotICAgICAgICBGUFJSZWcgYXJnMUZQUiA9IGFyZzEuZnByKCk7Ci0g
ICAgICAgIEZQUlJlZyBhcmcyRlBSID0gYXJnMi5mcHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLQotICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKGZtb2QsIHJlc3VsdC5mcHIoKSwgYXJnMUZQUiwgYXJnMkZQUik7Ci0KLSAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIpOwotCi0gICAgICAgIC8vIElmIHdlIGFkZCBh
IERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIG1faml0Lnhv
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBjYXNlIENvbXBhcmVMZXNzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwog
ICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgIAogICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUxlc3MsIHJlc3VsdC5ncHIoKSwgYXJn
MUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CisgICAg
ICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9w
ZXJhdGlvbkFyaXRoRGl2KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIENv
bXBhcmVMZXNzRXE6IHsKKyAgICBjYXNlIEFyaXRoTW9kOiB7CiAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcy
KHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigp
OwpAQCAtNDU1LDQwICs1NDgsMTIxIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VS
VChpc0ZsdXNoZWQoKSk7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAg
ICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoTW9kKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVFcTogeworICAgIGNhc2UgTG9naWNhbE5vdDogewog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJH
UFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUiwgYXJnMUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbik7CisgICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGZhc3RDYXNlLmxpbmso
Jm1faml0KTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIENvbXBhcmVMZXNzOgorICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICBjYXNlIENvbXBh
cmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogeworICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIGRvIHNvbWUgcGVlcGhvbGUgdG8gZnVzZSBjb21wYXJlL2JyYW5jaAorICAgICAgICAKICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBHUFJSZWcgYXJn
MUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVz
dWx0LmdwcigpLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgIAorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkK
KyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgCisgICAgICAgIG1faml0
Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzFHUFIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1B0cihhcmcyR1BSLCByZXN1bHRHUFIpOworICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kOworICAgICAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgICAgICBjb25kID0gTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgICAgICBjb25kID0gTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuT3JFcXVhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb21wYXJlRXEgfHwgb3AgPT0gQ29tcGFy
ZVN0cmljdEVxKTsKKyAgICAgICAgICAgIGNvbmQgPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIAorICAgICAgICBtX2ppdC5jb21wYXJl
MzIoY29uZCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgIAorICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIHNldHVwU3R1YkFy
Z3VtZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25Db21wYXJlTGVzcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAg
ICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25Db21wYXJlRXEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6CisgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KDEp
KSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Cisg
ICAgCisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1
c2VkIHRvIHBsYW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBoZWxwZXIgcm91dGluZXMgdG8g
Y29udmVydCBiZXR3ZWVuIHR5cGVzLgotICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEZQUlJlZyByZXN1bHQpOworICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEdQUlJlZyByZXN1bHQpOwogICAgIHZvaWQgdmFsdWVUb0ludDMyKEpTVmFsdWVPcGVy
YW5kJiwgR1BSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCBudW1iZXJUb0ludDMyKEZQUlJlZywgR1BS
UmVnIHJlc3VsdCk7CiAKQEAgLTk4LDcgKzk4LDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX2VudHJ5TG9jYXRpb25zLmFwcGVuZChFbnRyeUxvY2F0aW9uKGVudHJ5LCB0aGlzKSk7CiAg
ICAgfQotCisgICAgCisgICAgLy8gaW50ZXJuYWwgaGVscGVycyBmb3IgYWRkL3N1Yi9tdWwgb3Bl
cmF0aW9ucworICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGVJ
bmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpOworICAgIHZv
aWQgYmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlICZub2RlKTsKKyAgICAKICAgICBFbnRy
eUxvY2F0aW9uVmVjdG9yIG1fZW50cnlMb2NhdGlvbnM7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDg5Njk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDYgKzExNyw5IEBAIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRUaGlz
KEV4ZWMKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3ApLnRvVGhpc09iamVjdChleGVjKSk7CiB9CiAKKy8vIEZJWE1FOiB0aGVzZSBvcGVyYXRpb25z
IHdvdWxkIGJlIGZhc3RlciBpZiB0aGUgYXJndW1lbnRzIHdlcmUgcHVzaGVkLCBzaW5jZSB3ZSB3
aWxsIGFsbW9zdAorLy8gY2VydGFpbmx5IGhhdmUgdG8gYm91bmNlIG9mZiBtZW1vcnkgYW55d2F5
LgorCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqIGV4ZWMsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCiB7CiAg
ICAgSlNWYWx1ZSBvcDEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSk7CkBAIC0xMzgsNiAr
MTQxLDM0IEBAIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGEKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzQWRkU2xvd0Nhc2UoZXhlYywgb3AxLCBvcDIpKTsKIH0K
IAorRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhTdWIoRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3Vi
bGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIo
KTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgLSBudW0yKSk7Cit9
CisKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91
YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVy
KCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihudW0xICogbnVtMikpOwor
fQorCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRv
dWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJl
cigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSAvIG51bTIpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhNb2QoRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBk
b3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1i
ZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGZtb2QobnVtMSwgbnVt
MikpKTsKK30KKwogc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7CiAgICAgSlNHbG9iYWxE
YXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
OSw2ICs0OSwxMCBAQCB0eXBlZGVmIGRvdWJsZSAoKkRfREZHT3BlcmF0aW9uX0REKShkb3ViCiAv
LyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1l
bnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBFbmNvZGVkSlNWYWx1
ZSBvcGVyYXRpb25Db252ZXJ0VGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2Rl
ZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhTdWIoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aE11
bChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsK
K0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoRGl2KEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9u
QXJpdGhNb2QoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZE9wMik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeVZhbChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5KTsK
IEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5SWQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEJhc2UsIElkZW50aWZpZXIqKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdl
dEJ5SWRPcHRpbWl6ZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRl
bnRpZmllciopOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98537</attachid>
            <date>2011-06-24 13:50:38 -0700</date>
            <delta_ts>2011-06-24 23:27:49 -0700</delta_ts>
            <desc>the patch (fix style)</desc>
            <filename>nonspecarith_patch_2.diff</filename>
            <type>text/plain</type>
            <size>24744</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDYtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgbm9uLXNwZWN1bGF0aXZl
IEpJVCBoYXMgcG90ZW50aWFsbHkgaGFybWZ1bCBzcGVjdWxhdGlvbnMgd2l0aCByZXNwZWN0IHRv
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMzQ3CisKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAgICAgLSBDaGFuZ2VkIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBz
cGVjdWxhdGUgaW4gZmF2b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9u
U3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgICAgIC0gQWRk
ZWQgc2xvdy1wYXRoIHJvdXRpbmVzIGZvciBhcml0aG1ldGljIHRoYXQgcGVyZm9ybSBubyBzcGVj
dWxhdGlvbjsgdGhlCisgICAgICAgICAgICAgIG5vbi1zcGVjdWxhdGl2ZSBKSVQgd2lsbCBnZW5l
cmF0ZSBjYWxscyB0byB0aGVzZSBpbiBjYXNlcyB3aGVyZSBpdHMKKyAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb24gZmFpbHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKwogMjAxMS0w
Ni0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg5NTk0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5
Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDM3ICs1NiwzMiBAQCBFbnRyeUxvY2F0aW9uOjpFbnRy
eUxvY2F0aW9uKE1hY3JvQXNzZW1iCiAgICAgfQogfQogCi12b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojp2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGUFJSZWcgZnByKQordm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYgb3BlcmFu
ZCwgR1BSUmVnIGdwcikKIHsKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAg
dGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8K
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwotICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHRlbXBHcHIpOwotICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wR3ByLCBm
cHIpOworICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5k
bGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1f
aml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwciwganNWYWx1ZUdwcik7CiAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1faml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKTsKLSAg
ICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBmcHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZnByKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGdwcik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7Cisg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3By
LCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxl
ZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiB9
CiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVlT3BlcmFuZCYg
b3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKQEAgLTE2NSw2ICsxNjAsMTU5IEBAIGJvb2wgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBO
b2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJl
Z0FyZ0dQUiA9IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICBKSVRDb21waWxlcjo6
SnVtcCBub3RJbnQ7CisgICAgCisgICAgaW50MzJfdCBpbW0gPSB2YWx1ZU9mSW50MzJDb25zdGFu
dChpbW1DaGlsZCk7CisgICAgICAgIAorICAgIGlmICghaXNLbm93bkludGVnZXIocmVnQ2hpbGQp
KQorICAgICAgICBub3RJbnQgPSBtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93
LCByZWdBcmdHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgIAor
ICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKHJlZ0FyZ0dQUiwgcmVzdWx0R1BSKTsgCisgICAg
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIG92ZXJmbG93OworICAgIAorICAgIHN3aXRjaCAo
b3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJh
bmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBJbW0zMihpbW0pLCByZXN1bHRHUFIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhTdWI6IHsK
KyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3Zl
cmZsb3csIEltbTMyKGltbSksIHJlc3VsdEdQUik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorICAgIAorICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rlciwg
cmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0
Lmp1bXAoKTsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJlZ0NoaWxkKSkKKyAgICAg
ICAgbm90SW50LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBvdmVyZmxvdy5saW5rKCZtX2ppdCk7
CisgICAgCisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCByZWdBcmdHUFIp
OworICAgIHN3aXRjaCAob3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBpZiAoY29t
bXV0ZSkgeworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMik7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIo
c3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjIpOworICAgICAgICB9CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhj
ZXB0aW9uQ2hlY2sob3BlcmF0aW9uVmFsdWVBZGQpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBBcml0aFN1YjoKKyAgICAgICAgQVNTRVJUKCFjb21tdXRlKTsKKyAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1f
aml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4o
SlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7
CisgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJpdGhTdWIpOworICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAg
IGRvbmUubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQ
UiwgbV9jb21waWxlSW5kZXgpOworfQorCit2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0Fy
aXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
MSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2Rl
LmNoaWxkMik7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
KyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSUmVnIHRlbXBH
UFIgPSB0ZW1wLmdwcigpOworICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7Cisg
ICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgIAorICAgIGlmICgh
aXNLbm93bkludGVnZXIobm9kZS5jaGlsZDEpKQorICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9q
aXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMUdQUiwgR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxk
MikpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcyR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAKKyAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihhcmcxR1BSLCByZXN1bHRHUFIpOworICAg
IG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzJHUFIsIHRlbXBHUFIpOworICAgIAorICAgIHN3
aXRjaCAob3ApIHsKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIHNsb3dQYXRoLmFwcGVu
ZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHRlbXBHUFIsIHJl
c3VsdEdQUikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJp
dGhTdWI6IHsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFN1YjMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgdGVtcEdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAgICAgCisgICAgY2FzZSBBcml0aE11bDogeworICAgICAgICBzbG93UGF0
aC5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCB0ZW1w
R1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRl
c3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorICAgIAorICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9u
ZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAg
CisgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCBhcmcxR1BSLCBhcmcyR1BS
KTsKKyAgICBpZiAob3AgPT0gQXJpdGhBZGQpIHsKKyAgICAgICAgc2V0dXBTdHViQXJndW1lbnRz
KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBhcHBlbmRDYWxsV2l0
aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblZhbHVlQWRkKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1l
bnRHUFIxPihhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgc3dpdGNoIChvcCkgeworICAgICAg
ICBjYXNlIEFyaXRoU3ViOgorICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25B
cml0aFN1Yik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBjYXNl
IEFyaXRoTXVsOgorICAgICAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25Bcml0aE11
bCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
bV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgCisgICAgZG9uZS5saW5rKCZtX2pp
dCk7CisgICAgICAgIAorICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRl
eCk7Cit9CisKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVj
a0luZGV4SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hl
Y2sgZm9yIHNwZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0
aW9uIGluIHRoZQpAQCAtMjcyLDE0ICs0MjAsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShTcGVjdWxhdAogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICBJ
bnRlZ2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBGUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEu
Z3ByKCksIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcG9z
aXRpdmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFs
LCBvcDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIG1faml0LmFkZERvdWJsZShK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsK
KyAgICAgICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRp
dmUgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBv
cDEuZ3ByKCksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICAgICAgbV9qaXQu
YWRkRG91YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBib3hl
ci5mcHIoKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG9QdHIoYm94ZXIu
ZnByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdU
eXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIAorICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKICAgICAgICAgcG9z
aXRpdmUubGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAg
ICAgIAorICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgICAgICBkb3VibGVSZXN1bHQo
cmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAt
MzE0LDE0MCArNDc0LDczIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3Vs
YXQKICAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKTsKICAgICAg
ICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CiAKLSAgICAgICAgaWYg
KGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3By
KCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAg
ICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0Lmdy
YXBoKClbbm9kZS5jaGlsZDFdLnZpcnR1YWxSZWdpc3RlcigpXTsKICAgICAgICAgaWYgKChjaGls
ZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8fCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0Rv
dWJsZSkgewotICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAg
ICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgR1BS
VGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigp
LCByZXN1bHQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCks
IG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRlBSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5m
cHIoKSk7Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BS
ID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAg
ICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7
Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5ncHIoKSwg
YXJnMUdQUiwgYXJnMkdQUik7Ci0KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwog
ICAgIH0KLSAgICAgICAgCi0gICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBEb3VibGVPcGVy
YW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEs
IG9wMik7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJl
ZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnMSwgcmVnMiwg
cmVzdWx0LmZwcigpKTsKIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2Nv
bXBpbGVJbmRleCk7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7Cisg
ICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7CisgICAgICAgICAgICBr
bm93bkNvbnN0YW50QXJpdGhPcChBcml0aEFkZCwgbm9kZS5jaGlsZDIsIG5vZGUuY2hpbGQxLCB0
cnVlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAga25vd25Db25z
dGFudEFyaXRoT3AoQXJpdGhBZGQsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJhc2ljQXJp
dGhPcChBcml0aEFkZCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAK
ICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUuY2hpbGQxKTsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIp
OwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBS
UmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwot
ICAgICAgICBtX2ppdC5zdWJEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDIpKSB7CisgICAgICAgICAgICBrbm93bkNv
bnN0YW50QXJpdGhPcChBcml0aFN1Yiwgbm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyLCBmYWxzZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmFzaWNB
cml0aE9wKEFyaXRoU3ViLCBub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2Fz
ZSBBcml0aE11bDogewotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAg
ICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgRlBSUmVn
IHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAg
ICAgICBtX2ppdC5tdWxEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJh
c2ljQXJpdGhPcChBcml0aE11bCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAg
IGNhc2UgQXJpdGhEaXY6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5j
aGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0g
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcg
cmVnMSA9IG9wMS5mcHIoKTsKLSAgICAgICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAg
ICAgIG1faml0LmRpdkRvdWJsZShyZWcxLCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBBcml0aE1vZDogewotICAgICAgICBEb3VibGVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIGFyZzIodGhp
cywgbm9kZS5jaGlsZDIpOwotICAgICAgICBGUFJSZWcgYXJnMUZQUiA9IGFyZzEuZnByKCk7Ci0g
ICAgICAgIEZQUlJlZyBhcmcyRlBSID0gYXJnMi5mcHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3Rl
cnMoKTsKLQotICAgICAgICBGUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3Bl
cmF0aW9uKGZtb2QsIHJlc3VsdC5mcHIoKSwgYXJnMUZQUiwgYXJnMkZQUik7Ci0KLSAgICAgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KLSAgICBjYXNlIExvZ2ljYWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9C
b29sZWFuLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIpOwotCi0gICAgICAgIC8vIElmIHdlIGFkZCBh
IERhdGFGb3JtYXRCb29sLCB3ZSBzaG91bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIG1faml0Lnhv
cjMyKFRydXN0ZWRJbW0zMihWYWx1ZVRydWUpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsK
LSAgICB9Ci0KLSAgICBjYXNlIENvbXBhcmVMZXNzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwog
ICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgICAgIAogICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwogCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUxlc3MsIHJlc3VsdC5ncHIoKSwgYXJn
MUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFs
c2UpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CisgICAg
ICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9w
ZXJhdGlvbkFyaXRoRGl2KTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIENv
bXBhcmVMZXNzRXE6IHsKKyAgICBjYXNlIEFyaXRoTW9kOiB7CiAgICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcy
KHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigp
OwpAQCAtNDU1LDQwICs1NDgsMTIxIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VS
VChpc0ZsdXNoZWQoKSk7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAg
ICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoTW9kKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVFcTogeworICAgIGNhc2UgTG9naWNhbE5vdDogewog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJH
UFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUiwgYXJnMUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbik7CisgICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGZhc3RDYXNlLmxpbmso
Jm1faml0KTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIENvbXBhcmVMZXNzOgorICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICBjYXNlIENvbXBh
cmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogeworICAgICAgICAvLyBGSVhNRTogc2hv
dWxkIGRvIHNvbWUgcGVlcGhvbGUgdG8gZnVzZSBjb21wYXJlL2JyYW5jaAorICAgICAgICAKICAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CiAgICAgICAgIEpT
VmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwogICAgICAgICBHUFJSZWcgYXJn
MUdQUiA9IGFyZzEuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsK
LSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRo
aXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgcmVz
dWx0LmdwcigpLCBhcmcxR1BSLCBhcmcyR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVk
SW1tMzIoVmFsdWVGYWxzZSksIHJlc3VsdC5ncHIoKSk7Ci0KLSAgICAgICAganNWYWx1ZVJlc3Vs
dChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CisgICAg
ICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyB0ZW1w
R1BSID0gdGVtcC5ncHIoKTsKKyAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IHNs
b3dQYXRoOworICAgIAorICAgICAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkK
KyAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9Bc3NlbWJs
ZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2RlLmNoaWxkMikpCisgICAgICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgCisgICAgICAgIG1faml0
Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzFHUFIsIHRlbXBHUFIpOworICAgICAgICBtX2ppdC56ZXJv
RXh0ZW5kMzJUb1B0cihhcmcyR1BSLCByZXN1bHRHUFIpOworICAgIAorICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kOworICAgICAgICBzd2l0Y2ggKG9wKSB7
CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgICAgICBjb25kID0gTWFjcm9Bc3Nl
bWJsZXI6Okxlc3NUaGFuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgICAgICBj
YXNlIENvbXBhcmVMZXNzRXE6CisgICAgICAgICAgICBjb25kID0gTWFjcm9Bc3NlbWJsZXI6Okxl
c3NUaGFuT3JFcXVhbDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIEFTU0VSVChvcCA9PSBDb21wYXJlRXEgfHwgb3AgPT0gQ29tcGFy
ZVN0cmljdEVxKTsKKyAgICAgICAgICAgIGNvbmQgPSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIAorICAgICAgICBtX2ppdC5jb21wYXJl
MzIoY29uZCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgIAorICAgICAgICBK
SVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAgICAg
ICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIHNldHVwU3R1YkFy
Z3VtZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgc3dpdGNo
IChvcCkgeworICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25Db21wYXJlTGVzcyk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKKyAgICAgICAgICAg
IGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgICAgIGNhc2UgQ29tcGFyZUVxOgorICAg
ICAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25Db21wYXJlRXEp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBDb21wYXJl
U3RyaWN0RXE6CisgICAgICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJh
dGlvbkNvbXBhcmVTdHJpY3RFcSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
fQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIp
OworICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIAor
ICAgICAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KDEp
KSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICAgICAgaGF2ZVJlc3VsdC5saW5rKCZtX2ppdCk7Cisg
ICAgCisgICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkp
CkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1
c2VkIHRvIHBsYW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBoZWxwZXIgcm91dGluZXMgdG8g
Y29udmVydCBiZXR3ZWVuIHR5cGVzLgotICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEZQUlJlZyByZXN1bHQpOworICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3Bl
cmFuZCYsIEdQUlJlZyByZXN1bHQpOwogICAgIHZvaWQgdmFsdWVUb0ludDMyKEpTVmFsdWVPcGVy
YW5kJiwgR1BSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCBudW1iZXJUb0ludDMyKEZQUlJlZywgR1BS
UmVnIHJlc3VsdCk7CiAKQEAgLTk4LDcgKzk4LDExIEBAIHByaXZhdGU6CiAgICAgewogICAgICAg
ICBtX2VudHJ5TG9jYXRpb25zLmFwcGVuZChFbnRyeUxvY2F0aW9uKGVudHJ5LCB0aGlzKSk7CiAg
ICAgfQotCisgICAgCisgICAgLy8gaW50ZXJuYWwgaGVscGVycyBmb3IgYWRkL3N1Yi9tdWwgb3Bl
cmF0aW9ucworICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGVJ
bmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpOworICAgIHZv
aWQgYmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7CisgICAgCiAgICAgRW50cnlMb2Nh
dGlvblZlY3RvciBtX2VudHJ5TG9jYXRpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTExNyw2ICsxMTcsOSBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Db252ZXJ0VGhpcyhFeGVj
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wKS50
b1RoaXNPYmplY3QoZXhlYykpOwogfQogCisvLyBGSVhNRTogdGhlc2Ugb3BlcmF0aW9ucyB3b3Vs
ZCBiZSBmYXN0ZXIgaWYgdGhlIGFyZ3VtZW50cyB3ZXJlIHB1c2hlZCwgc2luY2Ugd2Ugd2lsbCBh
bG1vc3QKKy8vIGNlcnRhaW5seSBoYXZlIHRvIGJvdW5jZSBvZmYgbWVtb3J5IGFueXdheS4KKwog
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQogewogICAgIEpT
VmFsdWUgb3AxID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpOwpAQCAtMTM4LDYgKzE0MSwz
NCBAQCBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhCiAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShqc0FkZFNsb3dDYXNlKGV4ZWMsIG9wMSwgb3AyKSk7CiB9CiAKK0Vu
Y29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoU3ViKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEs
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG51
bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7Cisg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihudW0xIC0gbnVtMikpOworfQorCitF
bmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aE11bChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ax
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBu
dW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigpOwor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSAqIG51bTIpKTsKK30KKwor
RW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhEaXYoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUg
bnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIoKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgLyBudW0yKSk7Cit9CisK
K0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoTW9kKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRP
cDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91Ymxl
IG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7
CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihmbW9kKG51bTEsIG51bTIpKSk7
Cit9CisKIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgZ2V0QnlWYWwoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGJhc2UsIHVpbnQzMl90IGluZGV4KQogewogICAgIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiAr
NDksMTAgQEAgdHlwZWRlZiBkb3VibGUgKCpEX0RGR09wZXJhdGlvbl9ERCkoZG91YgogLy8gVGhl
c2Ugcm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRp
b25zIG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogRW5jb2RlZEpTVmFsdWUgb3Bl
cmF0aW9uQ29udmVydFRoaXMoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSk7
CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKK0VuY29kZWRKU1Zh
bHVlIG9wZXJhdGlvbkFyaXRoU3ViKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhNdWwoRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CitFbmNv
ZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBF
bmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRo
TW9kKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIp
OwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSk7CiBFbmNv
ZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIElkZW50aWZp
ZXIqKTsK
</data>
<flag name="review"
          id="92786"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="92787"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98583</attachid>
            <date>2011-06-24 23:27:49 -0700</date>
            <delta_ts>2011-06-25 00:15:22 -0700</delta_ts>
            <desc>the patch (fix for review)</desc>
            <filename>nonspecarith_patch_3.diff</filename>
            <type>text/plain</type>
            <size>25783</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDYtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgbm9uLXNwZWN1bGF0aXZl
IEpJVCBoYXMgcG90ZW50aWFsbHkgaGFybWZ1bCBzcGVjdWxhdGlvbnMgd2l0aCByZXNwZWN0IHRv
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMzQ3CisKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAgICAgLSBDaGFuZ2VkIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBz
cGVjdWxhdGUgaW4gZmF2b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9u
U3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgICAgIC0gQWRk
ZWQgc2xvdy1wYXRoIHJvdXRpbmVzIGZvciBhcml0aG1ldGljIHRoYXQgcGVyZm9ybSBubyBzcGVj
dWxhdGlvbjsgdGhlCisgICAgICAgICAgICAgIG5vbi1zcGVjdWxhdGl2ZSBKSVQgd2lsbCBnZW5l
cmF0ZSBjYWxscyB0byB0aGVzZSBpbiBjYXNlcyB3aGVyZSBpdHMKKyAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb24gZmFpbHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKwogMjAxMS0w
Ni0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg5NTk0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5
Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDM3ICs1NiwzMiBAQCBFbnRyeUxvY2F0aW9uOjpFbnRy
eUxvY2F0aW9uKE1hY3JvQXNzZW1iCiAgICAgfQogfQogCi12b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojp2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGUFJSZWcgZnByKQordm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYgb3BlcmFu
ZCwgR1BSUmVnIGdwcikKIHsKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAg
dGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8K
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwotICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHRlbXBHcHIpOwotICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wR3ByLCBm
cHIpOworICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5k
bGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1f
aml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwciwganNWYWx1ZUdwcik7CiAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1faml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKTsKLSAg
ICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBmcHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZnByKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGdwcik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7Cisg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3By
LCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxl
ZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiB9
CiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVlT3BlcmFuZCYg
b3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKQEAgLTE2NSw2ICsxNjAsMjQ2IEBAIGJvb2wgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBO
b2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJl
Z0FyZ0dQUiA9IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMscmVn
QXJnKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworCisgICAgSklUQ29t
cGlsZXI6Okp1bXAgbm90SW50OworICAgIAorICAgIGludDMyX3QgaW1tID0gdmFsdWVPZkludDMy
Q29uc3RhbnQoaW1tQ2hpbGQpOworICAgICAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJl
Z0NoaWxkKSkKKyAgICAgICAgbm90SW50ID0gbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgcmVnQXJnR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAg
ICAgICAKKyAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihyZWdBcmdHUFIsIHJlc3VsdEdQUik7
IAorICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBvdmVyZmxvdzsKKyAgICAKKyAgICBz
d2l0Y2ggKG9wKSB7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7Cisg
ICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJhbmNoQWRkMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93LCBJbW0zMihpbW0pLCByZXN1bHRHUFIpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
ICAgIAorICAgIGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgb3ZlcmZsb3cgPSBtX2ppdC5icmFu
Y2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIEltbTMyKGltbSksIHJlc3VsdEdQUik7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG1faml0Lm9yUHRyKEdQUklu
Zm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAKKyAgICBvdmVyZmxvdy5s
aW5rKCZtX2ppdCk7CisgICAgCisgICAgaWYgKHJlZ0FyZ0dQUiA9PSByZXN1bHRHUFIpIHsKKyAg
ICAgICAgc3dpdGNoIChvcCkgeworICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBjYXNl
IEFyaXRoQWRkOiB7CisgICAgICAgICAgICBtX2ppdC5zdWIzMihJbW0zMihpbW0pLCByZWdBcmdH
UFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgICAgICBtX2ppdC5hZGQzMihJbW0zMihpbW0pLCBy
ZWdBcmdHUFIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
LCByZWdBcmdHUFIpOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKHJlZ0No
aWxkKSkKKyAgICAgICAgbm90SW50LmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBzaWxlbnRTcGls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIsIHJlZ0FyZ0dQUik7CisgICAgc3dpdGNoIChvcCkgewor
ICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgICAgIGlmIChjb21tdXRlKSB7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKHJlZ0FyZ0dQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIyKTsKKyAgICAgICAgICAg
IG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lk
Kj4oSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHJlZ0FyZ0dQUiwg
R1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3Nl
bWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5jb2RlKGpz
TnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgIH0KKyAgICAg
ICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25W
YWx1ZUFkZCk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIEFyaXRoQWRkOgor
ICAgICAgICBpZiAoY29tbXV0ZSkgeworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BS
MCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGlj
X2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICB9CisgICAgICAgIG1faml0LmFwcGVuZENhbGwo
b3BlcmF0aW9uQXJpdGhBZGQpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBB
cml0aFN1YjoKKyAgICAgICAgQVNTRVJUKCFjb21tdXRlKTsKKyAgICAgICAgbV9qaXQubW92ZShy
ZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIG1faml0Lm1vdmUoTWFj
cm9Bc3NlbWJsZXI6OkltbVB0cihzdGF0aWNfY2FzdDxjb25zdCB2b2lkKj4oSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGltbSkpKSksIEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgIG1f
aml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJpdGhTdWIpOworICAgICAgICBicmVhazsKKyAgICAg
ICAgCisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAg
c2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAgIGRvbmUubGluaygm
bV9qaXQpOworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgpOworfQorCit2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpiYXNpY0FyaXRoT3AoTm9kZVR5
cGUgb3AsIE5vZGUgJm5vZGUpCit7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2Rl
LmNoaWxkMSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Cisg
ICAgCisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQUlJlZyBhcmcyR1BS
ID0gYXJnMi5ncHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzLGFyZzIpOwor
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisKKyAgICBHUFJSZWcgdGVtcEdQUiA9IHRl
bXAuZ3ByKCk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgSklUQ29tcGlsZXI6Okp1bXBM
aXN0IG92ZXJmbG93U2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihub2Rl
LmNoaWxkMSkpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHIoTWFjcm9B
c3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIp
KTsKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkKKyAgICAgICAgc2xvd1Bh
dGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzJHUFIs
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgIAorICAgIG1faml0Lnplcm9F
eHRlbmQzMlRvUHRyKGFyZzFHUFIsIHJlc3VsdEdQUik7CisgICAgbV9qaXQuemVyb0V4dGVuZDMy
VG9QdHIoYXJnMkdQUiwgdGVtcEdQUik7CisgICAgCisgICAgc3dpdGNoIChvcCkgeworICAgIGNh
c2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBvdmVyZmxvd1Nsb3dQ
YXRoLmFwcGVuZChtX2ppdC5icmFuY2hBZGQzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHRl
bXBHUFIsIHJlc3VsdEdQUikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAg
IGNhc2UgQXJpdGhTdWI6IHsKKyAgICAgICAgb3ZlcmZsb3dTbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCB0ZW1wR1BSLCByZXN1bHRHUFIp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBjYXNlIEFyaXRoTXVsOiB7
CisgICAgICAgIG92ZXJmbG93U2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaE11bDMyKE1hY3Jv
QXNzZW1ibGVyOjpPdmVyZmxvdywgdGVtcEdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIG92ZXJm
bG93U2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisgICAgZGVm
YXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIG1f
aml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAK
KyAgICBvdmVyZmxvd1Nsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBpZiAoYXJnMkdQ
UiA9PSB0ZW1wR1BSKQorICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIGFyZzJHUFIpOworICAgIAorICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAg
ICAKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJH
UFIpOworICAgIGlmIChvcCA9PSBWYWx1ZUFkZCkgeworICAgICAgICBzZXR1cFN0dWJBcmd1bWVu
dHMoYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVmFsdWVBZGQpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1
bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBzd2l0Y2ggKG9wKSB7CisgICAg
ICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlv
bkFyaXRoQWRkKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNh
c2UgQXJpdGhTdWI6CisgICAgICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRo
U3ViKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGNhc2UgQXJp
dGhNdWw6CisgICAgICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoTXVsKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAgIHNpbGVudEZp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmsoJm1faml0KTsK
KyAgICAgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsK
K30KKwordm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShOb2RlJiBub2RlLCBNYWNyb0Fz
c2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBjb25zdCBaX0RGR09wZXJhdGlvbl9F
SkomIGhlbHBlckZ1bmN0aW9uKQoreworICAgIC8vIEZJWE1FOiBzaG91bGQgZG8gc29tZSBwZWVw
aG9sZSB0byBmdXNlIGNvbXBhcmUvYnJhbmNoCisgICAgICAgIAorICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywg
bm9kZS5jaGlsZDIpOworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJS
ZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BS
ID0gcmVzdWx0LmdwcigpOworICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAgCisgICAgaWYgKCFpc0tu
b3duSW50ZWdlcihub2RlLmNoaWxkMSkpCisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5i
cmFuY2hQdHIoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBhcmcxR1BSLCBHUFJJbmZvOjp0YWdUeXBl
TnVtYmVyUmVnaXN0ZXIpKTsKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQyKSkK
KyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6
QmVsb3csIGFyZzJHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOworICAgIAor
ICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzFHUFIsIHRlbXBHUFIpOworICAgIG1faml0
Lnplcm9FeHRlbmQzMlRvUHRyKGFyZzJHUFIsIHJlc3VsdEdQUik7CisgICAgCisgICAgbV9qaXQu
Y29tcGFyZTMyKGNvbmQsIHRlbXBHUFIsIHJlc3VsdEdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAg
ICBKSVRDb21waWxlcjo6SnVtcCBoYXZlUmVzdWx0ID0gbV9qaXQuanVtcCgpOworICAgIAorICAg
IHNsb3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAKKyAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIsIGFyZzFHUFIsIGFyZzJHUFIpOworICAgIHNldHVwU3R1YkFyZ3VtZW50cyhh
cmcxR1BSLCBhcmcyR1BSKTsKKyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lz
dGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2soaGVscGVyRnVuY3Rpb24pOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIHJlc3VsdEdQUik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIp
OworICAgICAgICAKKyAgICBtX2ppdC5hbmRQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KDEpKSwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBoYXZlUmVzdWx0LmxpbmsoJm1faml0
KTsKKyAgICAKKyAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
R1BSKTsKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOworfQor
CiB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0aW9uQ2hlY2tJbmRleEl0
ZXJhdG9yJiBjaGVja0l0ZXJhdG9yLCBOb2RlJiBub2RlKQogewogICAgIC8vIENoZWNrIGZvciBz
cGVjdWxhdGlvbiBjaGVja3MgZnJvbSB0aGUgY29ycmVzcG9uZGluZyBpbnN0cnVjdGlvbiBpbiB0
aGUKQEAgLTI3MiwxNCArNTA3LDI2IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKIAogICAgIGNhc2UgVUludDMyVG9OdW1iZXI6IHsKICAgICAgICAgSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKLSAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCBy
ZXN1bHQuZnByKCkpOwotCi0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHBvc2l0aXZlID0g
bV9qaXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdw
cigpLCBUcnVzdGVkSW1tMzIoMCkpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUoSklUQ29tcGls
ZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIHJlc3VsdC5mcHIoKSk7CisgICAgICAg
IEZQUlRlbXBvcmFyeSBib3hlcih0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHBvc2l0aXZlID0gbV9q
aXQuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbCwgb3AxLmdwcigp
LCBUcnVzdGVkSW1tMzIoMCkpOworICAgICAgICAKKyAgICAgICAgbV9qaXQuY29udmVydEludDMy
VG9Eb3VibGUob3AxLmdwcigpLCBib3hlci5mcHIoKSk7CisgICAgICAgIG1faml0LmFkZERvdWJs
ZShKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgYm94ZXIuZnByKCkp
OworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZURvdWJsZVRvUHRyKGJveGVyLmZwcigpLCBy
ZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2ppdC5zdWJQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCiAgICAgICAgIHBvc2l0aXZlLmxp
bmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlciwgb3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICAKKyAg
ICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTMxNCwxNDAg
KzU2MSw3MyBAQCB2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21waWxlKFNwZWN1bGF0CiAgICAg
ICAgIEFTU0VSVCghaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CiAgICAgICAgIEFTU0VS
VCghaXNEb3VibGVDb25zdGFudChub2RlLmNoaWxkMSkpOwogCi0gICAgICAgIGlmIChpc0tub3du
SW50ZWdlcihub2RlLmNoaWxkMSkpIHsKLSAgICAgICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0
aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMp
OwotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUob3AxLmdwcigpLCByZXN1
bHQuZnByKCkpOwotICAgICAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21w
aWxlSW5kZXgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQogICAgICAgICBHZW5l
cmF0aW9uSW5mbyYgY2hpbGRJbmZvID0gbV9nZW5lcmF0aW9uSW5mb1ttX2ppdC5ncmFwaCgpW25v
ZGUuY2hpbGQxXS52aXJ0dWFsUmVnaXN0ZXIoKV07CiAgICAgICAgIGlmICgoY2hpbGRJbmZvLnJl
Z2lzdGVyRm9ybWF0KCkgfHwgRGF0YUZvcm1hdEpTKSA9PSBEYXRhRm9ybWF0SlNEb3VibGUpIHsK
LSAgICAgICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAg
ICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgICAgIG1faml0
Lm1vdmVEb3VibGUob3AxLmZwcigpLCByZXN1bHQuZnByKCkpOwotICAgICAgICAgICAgZG91Ymxl
UmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKKyAgICAgICAgICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcyk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBp
bGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCiAgICAgICAgIEpTVmFs
dWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSBy
ZXN1bHQodGhpcyk7Ci0gICAgICAgIHZhbHVlVG9OdW1iZXIob3AxLCByZXN1bHQuZnByKCkpOwot
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgVmFsdWVBZGQ6IHsKLSAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEu
Z3ByKCk7Ci0gICAgICAgIEdQUlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKLSAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVlQWRkLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIs
IGFyZzJHUFIpOwotCisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAg
IHZhbHVlVG9OdW1iZXIob3AxLCByZXN1bHQuZ3ByKCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0
KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9Ci0g
ICAgICAgIAotICAgIGNhc2UgQXJpdGhBZGQ6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEo
dGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2Rl
LmNoaWxkMik7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwot
Ci0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgICAgICBGUFJSZWcgcmVnMiA9
IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuYWRkRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5m
cHIoKSk7CiAKLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5k
ZXgpOworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogeworICAgICAgICBp
ZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQxKSkgeworICAgICAgICAgICAga25vd25Db25z
dGFudEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQyLCBub2RlLmNoaWxkMSwgdHJ1ZSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGlzSW50MzJDb25z
dGFudChub2RlLmNoaWxkMikpIHsKKyAgICAgICAgICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9w
LCBub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIsIGZhbHNlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBiYXNpY0FyaXRoT3Aob3AsIG5vZGUpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAgCiAgICAgY2FzZSBBcml0aFN1YjogewotICAg
ICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJs
ZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwotCi0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAg
ICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHJl
ZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5m
cHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUu
Y2hpbGQyKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5v
ZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGJhc2ljQXJpdGhPcChBcml0aFN1Yiwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJpdGhNdWw6IHsKLSAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5k
IG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxLCBvcDIpOwotCi0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgICAg
ICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEs
IHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBiYXNpY0FyaXRoT3AoQXJpdGhNdWwsIG5vZGUp
OwogICAgICAgICBicmVhazsKICAgICB9CiAKICAgICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAg
IERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRG91YmxlT3Bl
cmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAg
IEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwg
cmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigp
LCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXJp
dGhNb2Q6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
LSAgICAgICAgRG91YmxlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAg
RlBSUmVnIGFyZzFGUFIgPSBhcmcxLmZwcigpOwotICAgICAgICBGUFJSZWcgYXJnMkZQUiA9IGFy
ZzIuZnByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgRlBSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihmbW9kLCByZXN1bHQuZnByKCks
IGFyZzFGUFIsIGFyZzJGUFIpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBMb2dp
Y2FsTm90OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0KLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2Fs
bE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbiwgcmVzdWx0LmdwcigpLCBhcmcx
R1BSKTsKLQotICAgICAgICAvLyBJZiB3ZSBhZGQgYSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxk
IHVzZSBpdCBoZXJlLgotICAgICAgICBtX2ppdC54b3IzMihUcnVzdGVkSW1tMzIoVmFsdWVUcnVl
KSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1f
Y29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBDb21wYXJl
TGVzczogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsK
ICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7CiAgICAgICAg
IEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBh
cmcyLmdwcigpOworICAgICAgICAKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAg
ICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNvbXBhcmVMZXNzLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBt
X2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKworICAg
ICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOworICAgICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUklu
Zm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJndW1lbnRHUFIxPihhcmcxR1BSLCBhcmcyR1BS
KTsKKyAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChvcGVyYXRpb25Bcml0aERpdik7CisgICAgICAg
IG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdC5ncHIoKSk7CiAKICAg
ICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBDb21wYXJlTGVzc0VxOiB7CisgICAgY2FzZSBB
cml0aE1vZDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQx
KTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7CiAgICAg
ICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKQEAgLTQ1NSw0MiArNjM1LDU2IEBAIHZv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgZmx1c2hSZWdp
c3RlcnMoKTsKIAogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwg
YXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCBy
ZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CisgICAgICAgIHNl
dHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlv
bkFyaXRoTW9kKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVF
cTogeworICAgIGNhc2UgTG9naWNhbE5vdDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcx
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBu
b2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAg
ICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygp
OworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogCi0gICAgICAgIEdQUlJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVx
LCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRy
dXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgR1BSUmVnIGFy
ZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0Lmdw
cigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQubW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOwor
ICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZh
bHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENh
c2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENvbXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRy
dXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKTsKKyAgICAgICAgCisgICAgICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUik7CisgICAgICAgIG1f
aml0Lm1vdmUoYXJnMUdQUiwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQu
bW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsK
KyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRv
Qm9vbGVhbik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJl
c3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAg
ICAgICAgCisgICAgICAgIGZhc3RDYXNlLmxpbmsoJm1faml0KTsKIAotICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBtX2ppdC54b3JQ
dHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRH
UFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVTdHJpY3RFcTogewotICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcx
R1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwot
ICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhp
cyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1
bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJ
bW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0LmdwcigpKTsKKyAgICBjYXNlIENvbXBhcmVMZXNzOgor
ICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgb3BlcmF0aW9u
Q29tcGFyZUxlc3MpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJl
TGVzc0VxOgorICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9y
RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEpOworICAgICAgICBicmVhazsKKyAgICAgICAg
CisgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJs
ZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlRXEpOworICAgICAgICBicmVhazsKIAotICAgICAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGNhc2Ug
Q29tcGFyZVN0cmljdEVxOgorICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpF
cXVhbCwgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxKTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQog
CiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMs
IG5vZGUuY2hpbGQxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3Bl
Y3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3
ICs4Nyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBUaGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIHBs
YW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBoZWxwZXIgcm91dGluZXMgdG8gY29udmVydCBi
ZXR3ZWVuIHR5cGVzLgotICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYsIEZQ
UlJlZyByZXN1bHQpOworICAgIHZvaWQgdmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYsIEdQ
UlJlZyByZXN1bHQpOwogICAgIHZvaWQgdmFsdWVUb0ludDMyKEpTVmFsdWVPcGVyYW5kJiwgR1BS
UmVnIHJlc3VsdCk7CiAgICAgdm9pZCBudW1iZXJUb0ludDMyKEZQUlJlZywgR1BSUmVnIHJlc3Vs
dCk7CiAKQEAgLTk4LDcgKzk4LDEyIEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX2VudHJ5
TG9jYXRpb25zLmFwcGVuZChFbnRyeUxvY2F0aW9uKGVudHJ5LCB0aGlzKSk7CiAgICAgfQotCisg
ICAgCisgICAgLy8gaW50ZXJuYWwgaGVscGVycyBmb3IgYWRkL3N1Yi9tdWwgb3BlcmF0aW9ucwor
ICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGVJbmRleCByZWdD
aGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29sIGNvbW11dGUpOworICAgIHZvaWQgYmFzaWNB
cml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7CisgICAgdm9pZCBjb21wYXJlKE5vZGUmLCBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiwgY29uc3QgWl9ERkdPcGVyYXRpb25fRUpK
Jik7CisgICAgCiAgICAgRW50cnlMb2NhdGlvblZlY3RvciBtX2VudHJ5TG9jYXRpb25zOwogfTsK
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShy
ZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2ICsxMzgsNDEgQEAgRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNB
ZGRTbG93Q2FzZShleGVjLCBvcDEsIG9wMikpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRp
b25Bcml0aEFkZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEp
LnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIobnVtMSArIG51bTIpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uQXJpdGhTdWIoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3Ax
KS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKG51bTEgLSBudW0yKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIG9wZXJh
dGlvbkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihudW0xICogbnVtMikpOworfQorCitFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIobnVtMSAvIG51bTIpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3Bl
cmF0aW9uQXJpdGhNb2QoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKGZtb2QobnVtMSwgbnVtMikpKTsKK30KKwogc3RhdGljIGlubGlu
ZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwg
dWludDMyX3QgaW5kZXgpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMt
Pmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0
aW9ucy5oCShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw2ICs0OSwxMSBAQCB0eXBlZGVmIGRv
dWJsZSAoKkRfREZHT3BlcmF0aW9uX0REKShkb3ViCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJv
dmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0
b28gY29tcGxleCB0byBKSVQuCiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Db252ZXJ0VGhpcyhF
eGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKTsKIEVuY29kZWRKU1ZhbHVlIG9w
ZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhB
ZGQoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7
CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aFN1YihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
T3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlv
bkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhEaXYoRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBv
cGVyYXRpb25Bcml0aE1vZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJv
cGVydHkpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNv
ZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRpZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRC
YXNlLCBJZGVudGlmaWVyKik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98584</attachid>
            <date>2011-06-25 00:15:22 -0700</date>
            <delta_ts>2011-06-26 10:38:28 -0700</delta_ts>
            <desc>the patch (fixed review, style)</desc>
            <filename>nonspecarith_patch_4.diff</filename>
            <type>text/plain</type>
            <size>25785</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDYtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgbm9uLXNwZWN1bGF0aXZl
IEpJVCBoYXMgcG90ZW50aWFsbHkgaGFybWZ1bCBzcGVjdWxhdGlvbnMgd2l0aCByZXNwZWN0IHRv
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMzQ3CisKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAgICAgLSBDaGFuZ2VkIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBz
cGVjdWxhdGUgaW4gZmF2b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9u
U3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgICAgIC0gQWRk
ZWQgc2xvdy1wYXRoIHJvdXRpbmVzIGZvciBhcml0aG1ldGljIHRoYXQgcGVyZm9ybSBubyBzcGVj
dWxhdGlvbjsgdGhlCisgICAgICAgICAgICAgIG5vbi1zcGVjdWxhdGl2ZSBKSVQgd2lsbCBnZW5l
cmF0ZSBjYWxscyB0byB0aGVzZSBpbiBjYXNlcyB3aGVyZSBpdHMKKyAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb24gZmFpbHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKwogMjAxMS0w
Ni0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg5NTk0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5
Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDM3ICs1NiwzMiBAQCBFbnRyeUxvY2F0aW9uOjpFbnRy
eUxvY2F0aW9uKE1hY3JvQXNzZW1iCiAgICAgfQogfQogCi12b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojp2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGUFJSZWcgZnByKQordm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYgb3BlcmFu
ZCwgR1BSUmVnIGdwcikKIHsKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAg
dGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8K
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwotICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHRlbXBHcHIpOwotICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wR3ByLCBm
cHIpOworICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5k
bGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1f
aml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwciwganNWYWx1ZUdwcik7CiAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1faml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKTsKLSAg
ICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBmcHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZnByKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGdwcik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7Cisg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3By
LCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxl
ZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiB9
CiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVlT3BlcmFuZCYg
b3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKQEAgLTE2NSw2ICsxNjAsMjQ2IEBAIGJvb2wgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBO
b2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJl
Z0FyZ0dQUiA9IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHJl
Z0FyZyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEludDsKKyAgICAKKyAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KGltbUNoaWxkKTsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihy
ZWdDaGlsZCkpCisgICAgICAgIG5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHJlZ0FyZ0dQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgCisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIocmVnQXJnR1BSLCByZXN1bHRHUFIp
OyAKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgb3ZlcmZsb3c7CisgICAgCisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogewor
ICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
ZmxvdywgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJh
bmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBJbW0zMihpbW0pLCByZXN1bHRHUFIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgb3ZlcmZsb3cu
bGluaygmbV9qaXQpOworICAgIAorICAgIGlmIChyZWdBcmdHUFIgPT0gcmVzdWx0R1BSKSB7Cisg
ICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2Fz
ZSBBcml0aEFkZDogeworICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tKSwgcmVnQXJn
R1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tKSwg
cmVnQXJnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVnQXJnR1BSKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdD
aGlsZCkpCisgICAgICAgIG5vdEludC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCByZWdBcmdHUFIpOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBpZiAoY29tbXV0ZSkgeworICAgICAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICB9CisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VmFsdWVBZGQpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBcml0aEFkZDoK
KyAgICAgICAgaWYgKGNvbW11dGUpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BS
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tUHRyKHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoaW1tKSkpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHN0YXRp
Y19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tKSkpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgfQorICAgICAgICBtX2ppdC5hcHBlbmRDYWxs
KG9wZXJhdGlvbkFyaXRoQWRkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
QXJpdGhTdWI6CisgICAgICAgIEFTU0VSVCghY29tbXV0ZSk7CisgICAgICAgIG1faml0Lm1vdmUo
cmVnQXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBt
X2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoU3ViKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKK30KKwordm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZGVU
eXBlIG9wLCBOb2RlICZub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgIAorICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQ
UiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcywgYXJnMik7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgb3ZlcmZsb3dTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQxKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgCisgICAgbV9qaXQuemVy
b0V4dGVuZDMyVG9QdHIoYXJnMUdQUiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC56ZXJvRXh0ZW5k
MzJUb1B0cihhcmcyR1BSLCB0ZW1wR1BSKTsKKyAgICAKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIG92ZXJmbG93U2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
dGVtcEdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICBvdmVyZmxvd1Nsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHRlbXBHUFIsIHJlc3VsdEdQ
UikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhNdWw6
IHsKKyAgICAgICAgb3ZlcmZsb3dTbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCB0ZW1wR1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgb3Zl
cmZsb3dTbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAg
IAorICAgIG92ZXJmbG93U2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIGlmIChhcmcy
R1BSID09IHRlbXBHUFIpCisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgYXJnMkdQUik7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwor
ICAgIAorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJn
MkdQUik7CisgICAgaWYgKG9wID09IFZhbHVlQWRkKSB7CisgICAgICAgIHNldHVwU3R1YkFyZ3Vt
ZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25WYWx1ZUFkZCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFy
Z3VtZW50R1BSMT4oYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0
aW9uQXJpdGhBZGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJp
dGhTdWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cml0aE11bDoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJpdGhNdWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OworfQorCit2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFpfREZHT3BlcmF0aW9u
X0VKSiYgaGVscGVyRnVuY3Rpb24pCit7CisgICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBl
ZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9icmFuY2gKKyAgICAgICAgCisgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQ
UlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
IAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIp
KQorICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAg
CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoYXJnMUdQUiwgdGVtcEdQUik7CisgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBtX2pp
dC5jb21wYXJlMzIoY29uZCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CisgICAgCisg
ICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgc2V0dXBTdHViQXJndW1lbnRz
KGFyZzFHUFIsIGFyZzJHUFIpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhoZWxwZXJGdW5jdGlvbik7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oMSkpLCByZXN1bHRHUFIpOworICAgIAorICAgIGhhdmVSZXN1bHQubGluaygmbV9q
aXQpOworICAgIAorICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Cit9
CisKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4
SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgZm9y
IHNwZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGlu
IHRoZQpAQCAtMjcyLDE0ICs1MDcsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCks
IHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcG9zaXRpdmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDEu
Z3ByKCksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21w
aWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgICAgICAKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgcG9zaXRpdmUgPSBt
X2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDEuZ3By
KCksIFRydXN0ZWRJbW0zMigwKSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5jb252ZXJ0SW50
MzJUb0RvdWJsZShvcDEuZ3ByKCksIGJveGVyLmZwcigpKTsKKyAgICAgICAgbV9qaXQuYWRkRG91
YmxlKEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3MoJnR3b1RvVGhlMzIpLCBib3hlci5mcHIo
KSk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlRG91YmxlVG9QdHIoYm94ZXIuZnByKCks
IHJlc3VsdC5ncHIoKSk7CisgICAgICAgIG1faml0LnN1YlB0cihHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIsIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICAKICAgICAgICAgcG9zaXRpdmUu
bGluaygmbV9qaXQpOworICAgICAgICAKKyAgICAgICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFn
VHlwZU51bWJlclJlZ2lzdGVyLCBvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7CisgICAgICAgIAor
ICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0Lmdw
cigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApAQCAtMzE0LDE0
MCArNTYxLDczIEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAg
ICAgICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKTsKICAgICAgICAgQVNT
RVJUKCFpc0RvdWJsZUNvbnN0YW50KG5vZGUuY2hpbGQxKSk7CiAKLSAgICAgICAgaWYgKGlzS25v
d25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkgewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3Ax
KHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7Ci0gICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIHJl
c3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2Nv
bXBpbGVJbmRleCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCiAgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClb
bm9kZS5jaGlsZDFdLnZpcnR1YWxSZWdpc3RlcigpXTsKICAgICAgICAgaWYgKChjaGlsZEluZm8u
cmVnaXN0ZXJGb3JtYXQoKSB8fCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZSkg
ewotICAgICAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAg
ICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgbV9q
aXQubW92ZURvdWJsZShvcDEuZnByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3Vi
bGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOworICAgICAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1
bHQuZ3ByKCkpOworICAgICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29t
cGlsZUluZGV4KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5mcHIoKSk7
Ci0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBWYWx1ZUFkZDogewotICAgICAgICBKU1Zh
bHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICBm
bHVzaFJlZ2lzdGVycygpOwotCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAg
ICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVmFsdWVBZGQsIHJlc3VsdC5ncHIoKSwgYXJnMUdQ
UiwgYXJnMkdQUik7Ci0KKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAg
ICAgdmFsdWVUb051bWJlcihvcDEsIHJlc3VsdC5ncHIoKSk7CiAgICAgICAgIGpzVmFsdWVSZXN1
bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICAgICAgCi0gICAgY2FzZSBBcml0aEFkZDogewotICAgICAgICBEb3VibGVPcGVyYW5kIG9w
MSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5v
ZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEsIG9wMik7
Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcy
ID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5hZGREb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0
LmZwcigpKTsKIAotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJ
bmRleCk7CisgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAg
IGlmIChpc0ludDMyQ29uc3RhbnQobm9kZS5jaGlsZDEpKSB7CisgICAgICAgICAgICBrbm93bkNv
bnN0YW50QXJpdGhPcChvcCwgbm9kZS5jaGlsZDIsIG5vZGUuY2hpbGQxLCB0cnVlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaXNJbnQzMkNv
bnN0YW50KG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Ao
b3AsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2UpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJhc2ljQXJpdGhPcChvcCwgbm9kZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KLQorICAgICAgICAKICAgICBjYXNlIEFyaXRoU3ViOiB7Ci0g
ICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAgICBGUFJUZW1wb3Jhcnkg
cmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0g
ICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5zdWJEb3VibGUo
cmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0
LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGlmIChpc0ludDMyQ29uc3RhbnQobm9k
ZS5jaGlsZDIpKSB7CisgICAgICAgICAgICBrbm93bkNvbnN0YW50QXJpdGhPcChBcml0aFN1Yiwg
bm9kZS5jaGlsZDEsIG5vZGUuY2hpbGQyLCBmYWxzZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYmFzaWNBcml0aE9wKEFyaXRoU3ViLCBub2RlKTsK
ICAgICAgICAgYnJlYWs7CiAgICAgfQogCiAgICAgY2FzZSBBcml0aE11bDogewotICAgICAgICBE
b3VibGVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJh
bmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzLCBvcDEsIG9wMik7Ci0KLSAgICAgICAgRlBSUmVnIHJlZzEgPSBvcDEuZnByKCk7Ci0gICAg
ICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAgICAgICBtX2ppdC5tdWxEb3VibGUocmVn
MSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJhc2ljQXJpdGhPcChBcml0aE11bCwgbm9k
ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNhc2UgQXJpdGhEaXY6IHsKLSAgICAg
ICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBEb3VibGVP
cGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1
bHQodGhpcywgb3AxKTsKLQotICAgICAgICBGUFJSZWcgcmVnMSA9IG9wMS5mcHIoKTsKLSAgICAg
ICAgRlBSUmVnIHJlZzIgPSBvcDIuZnByKCk7Ci0gICAgICAgIG1faml0LmRpdkRvdWJsZShyZWcx
LCByZWcyLCByZXN1bHQuZnByKCkpOwotCi0gICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnBy
KCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY2FzZSBB
cml0aE1vZDogewotICAgICAgICBEb3VibGVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEp
OwotICAgICAgICBEb3VibGVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwotICAgICAg
ICBGUFJSZWcgYXJnMUZQUiA9IGFyZzEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyBhcmcyRlBSID0g
YXJnMi5mcHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBGUFJSZXN1
bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKGZtb2QsIHJlc3VsdC5mcHIo
KSwgYXJnMUZQUiwgYXJnMkZQUik7Ci0KLSAgICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIExv
Z2ljYWxOb3Q6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgZmx1c2hS
ZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBj
YWxsT3BlcmF0aW9uKGRmZ0NvbnZlcnRKU1ZhbHVlVG9Cb29sZWFuLCByZXN1bHQuZ3ByKCksIGFy
ZzFHUFIpOwotCi0gICAgICAgIC8vIElmIHdlIGFkZCBhIERhdGFGb3JtYXRCb29sLCB3ZSBzaG91
bGQgdXNlIGl0IGhlcmUuCi0gICAgICAgIG1faml0LnhvcjMyKFRydXN0ZWRJbW0zMihWYWx1ZVRy
dWUpLCByZXN1bHQuZ3ByKCkpOwotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjYXNlIENvbXBh
cmVMZXNzOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEp
OwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAgICAg
ICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwogICAgICAgICBHUFJSZWcgYXJnMkdQUiA9
IGFyZzIuZ3ByKCk7CisgICAgICAgIAogICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwogCiAgICAg
ICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uQ29tcGFyZUxlc3MsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAg
IG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworCisg
ICAgICAgIEFTU0VSVChpc0ZsdXNoZWQoKSk7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BS
SW5mbzo6YXJndW1lbnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJH
UFIpOworICAgICAgICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoRGl2KTsKKyAgICAg
ICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAog
ICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVMZXNzRXE6IHsKKyAgICBjYXNl
IEFyaXRoTW9kOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGls
ZDEpOwogICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKICAg
ICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwpAQCAtNDU1LDQyICs2MzUsNTYgQEAg
dm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAogICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOwogCiAgICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUxlc3NFcSwgcmVzdWx0LmdwcigpLCBhcmcxR1BS
LCBhcmcyR1BSKTsKLSAgICAgICAgbV9qaXQub3IzMihUcnVzdGVkSW1tMzIoVmFsdWVGYWxzZSks
IHJlc3VsdC5ncHIoKSk7CisKKyAgICAgICAgQVNTRVJUKGlzRmx1c2hlZCgpKTsKKyAgICAgICAg
c2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFyZ3VtZW50
R1BSMT4oYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0
aW9uQXJpdGhNb2QpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BS
LCByZXN1bHQuZ3ByKCkpOwogCiAgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgQ29tcGFy
ZUVxOiB7CisgICAgY2FzZSBMb2dpY2FsTm90OiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFy
ZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMs
IG5vZGUuY2hpbGQyKTsKLSAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOwotICAg
ICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAKLSAgICAgICAgR1BSUmVz
dWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJl
RXEsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBHUFJSZWcg
YXJnMUdQUiA9IGFyZzEuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5tb3ZlKGFyZzFHUFIsIHJlc3VsdEdQUik7
CisgICAgICAgIG1faml0LnhvclB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4o
VmFsdWVGYWxzZSkpLCByZXN1bHRHUFIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBmYXN0
Q2FzZSA9IG1faml0LmJyYW5jaFRlc3RQdHIoSklUQ29tcGlsZXI6Olplcm8sIHJlc3VsdEdQUiwg
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KH4xKSkpOworICAgICAgICAKKyAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCBhcmcxR1BSKTsKKyAgICAgICAg
bV9qaXQubW92ZShhcmcxR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBtX2pp
dC5tb3ZlKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
OworICAgICAgICBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKGRmZ0NvbnZlcnRKU1ZhbHVl
VG9Cb29sZWFuKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICAgICAgZmFzdENhc2UubGluaygmbV9qaXQpOwogCi0gICAgICAgIGpzVmFs
dWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIG1faml0Lnhv
clB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4oVmFsdWVUcnVlKSksIHJlc3Vs
dEdQUik7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOiB7Ci0g
ICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBhcmcyKHRoaXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgR1BSUmVnIGFy
ZzFHUFIgPSBhcmcxLmdwcigpOwotICAgICAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7
Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgR1BSUmVzdWx0IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIHJl
c3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIoVHJ1c3Rl
ZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworICAgIGNhc2UgQ29tcGFyZUxlc3M6
CisgICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCBvcGVyYXRp
b25Db21wYXJlTGVzcyk7CisgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICBjYXNlIENvbXBh
cmVMZXNzRXE6CisgICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFu
T3JFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZUxlc3NFcSk7CisgICAgICAgIGJyZWFrOworICAgICAg
ICAKKyAgICBjYXNlIENvbXBhcmVFcToKKyAgICAgICAgY29tcGFyZShub2RlLCBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVFcSk7CisgICAgICAgIGJyZWFrOwogCi0gICAg
ICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CisgICAgY2Fz
ZSBDb21wYXJlU3RyaWN0RXE6CisgICAgICAgIGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6
OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEpOwogICAgICAgICBicmVhazsKLSAgICB9
CiAKICAgICBjYXNlIEdldEJ5VmFsOiB7CiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGJhc2UodGhp
cywgbm9kZS5jaGlsZDEpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25T
cGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHTm9uU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTg3
LDcgKzg3LDcgQEAgcHJpdmF0ZToKIAogICAgIC8vIFRoZXNlIG1ldGhvZHMgYXJlIHVzZWQgdG8g
cGxhbnQgY2FsbHMgb3V0IHRvIEMrKwogICAgIC8vIGhlbHBlciByb3V0aW5lcyB0byBjb252ZXJ0
IGJldHdlZW4gdHlwZXMuCi0gICAgdm9pZCB2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiwg
RlBSUmVnIHJlc3VsdCk7CisgICAgdm9pZCB2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiwg
R1BSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCB2YWx1ZVRvSW50MzIoSlNWYWx1ZU9wZXJhbmQmLCBH
UFJSZWcgcmVzdWx0KTsKICAgICB2b2lkIG51bWJlclRvSW50MzIoRlBSUmVnLCBHUFJSZWcgcmVz
dWx0KTsKIApAQCAtOTgsNyArOTgsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIG1fZW50
cnlMb2NhdGlvbnMuYXBwZW5kKEVudHJ5TG9jYXRpb24oZW50cnksIHRoaXMpKTsKICAgICB9Ci0K
KyAgICAKKyAgICAvLyBpbnRlcm5hbCBoZWxwZXJzIGZvciBhZGQvc3ViL211bCBvcGVyYXRpb25z
CisgICAgdm9pZCBrbm93bkNvbnN0YW50QXJpdGhPcChOb2RlVHlwZSBvcCwgTm9kZUluZGV4IHJl
Z0NoaWxkLCBOb2RlSW5kZXggaW1tQ2hpbGQsIGJvb2wgY29tbXV0ZSk7CisgICAgdm9pZCBiYXNp
Y0FyaXRoT3AoTm9kZVR5cGUgb3AsIE5vZGUmKTsKKyAgICB2b2lkIGNvbXBhcmUoTm9kZSYsIE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uLCBjb25zdCBaX0RGR09wZXJhdGlvbl9F
SkomKTsKKyAgICAKICAgICBFbnRyeUxvY2F0aW9uVmVjdG9yIG1fZW50cnlMb2NhdGlvbnM7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDg5Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDYgKzEzOCw0MSBAQCBFbmNvZGVkSlNWYWx1
ZSBvcGVyYXRpb25WYWx1ZUFkZChFeGVjU3RhCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c0FkZFNsb3dDYXNlKGV4ZWMsIG9wMSwgb3AyKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIG9wZXJh
dGlvbkFyaXRoQWRkKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9w
MSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihudW0xICsgbnVtMikpOworfQorCitFbmNvZGVkSlNWYWx1ZSBvcGVy
YXRpb25Bcml0aFN1YihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRP
cDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVj
b2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdW1iZXIobnVtMSAtIG51bTIpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3Bl
cmF0aW9uQXJpdGhNdWwoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVk
T3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgKiBudW0yKSk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIG9w
ZXJhdGlvbkFyaXRoRGl2KEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShqc051bWJlcihudW0xIC8gbnVtMikpOworfQorCitFbmNvZGVkSlNWYWx1ZSBv
cGVyYXRpb25Bcml0aE1vZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6
ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoanNOdW1iZXIoZm1vZChudW0xLCBudW0yKSkpOworfQorCiBzdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIGdldEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBiYXNl
LCB1aW50MzJfdCBpbmRleCkKIHsKICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEgPSAmZXhl
Yy0+Z2xvYmFsRGF0YSgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHJldmlzaW9uIDg5Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDExIEBAIHR5cGVkZWYg
ZG91YmxlICgqRF9ERkdPcGVyYXRpb25fREQpKGRvdWIKIC8vIFRoZXNlIHJvdXRpbmVzIGFyZSBw
cm92aWRlIGNhbGxiYWNrcyBvdXQgdG8gQysrIGltcGxlbWVudGF0aW9ucyBvZiBvcGVyYXRpb25z
IHRvbyBjb21wbGV4IHRvIEpJVC4KIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkNvbnZlcnRUaGlz
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEpOwogRW5jb2RlZEpTVmFsdWUg
b3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0
aEFkZChFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoU3ViKEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uQXJpdGhNdWwoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKK0VuY29kZWRKU1ZhbHVl
IG9wZXJhdGlvbkFyaXRoTW9kKEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRPcDIpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlWYWwoRXhlY1N0
YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQ
cm9wZXJ0eSk7CiBFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25HZXRCeUlkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7CiBFbmNvZGVkSlNWYWx1ZSBv
cGVyYXRpb25HZXRCeUlkT3B0aW1pemUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZEJhc2UsIElkZW50aWZpZXIqKTsK
</data>
<flag name="review"
          id="92835"
          type_id="1"
          status="-"
          setter="barraclough"
    />
    <flag name="commit-queue"
          id="92836"
          type_id="3"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>98630</attachid>
            <date>2011-06-26 10:38:28 -0700</date>
            <delta_ts>2011-06-26 12:31:08 -0700</delta_ts>
            <desc>the patch (fixed review, style)</desc>
            <filename>nonspecarith_patch_5.diff</filename>
            <type>text/plain</type>
            <size>26323</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gODk2OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAK
KzIwMTEtMDYtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBERkcgbm9uLXNwZWN1bGF0aXZl
IEpJVCBoYXMgcG90ZW50aWFsbHkgaGFybWZ1bCBzcGVjdWxhdGlvbnMgd2l0aCByZXNwZWN0IHRv
IGFyaXRobWV0aWMgb3BlcmF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTYzMzQ3CisKKyAgICAgICAgKiBkZmcvREZHTm9uU3BlY3VsYXRpdmVK
SVQuY3BwOgorICAgICAgICAgICAgLSBDaGFuZ2VkIGFyaXRobWV0aWMgb3BlcmF0aW9ucyB0byBz
cGVjdWxhdGUgaW4gZmF2b3Igb2YgaW50ZWdlcnMuCisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OnZhbHVlVG9OdW1iZXIpOgorICAgICAgICAoSlNDOjpERkc6Ok5vblNwZWN1
bGF0aXZlSklUOjprbm93bkNvbnN0YW50QXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9u
U3BlY3VsYXRpdmVKSVQ6OmJhc2ljQXJpdGhPcCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgICAgIC0gQWRk
ZWQgc2xvdy1wYXRoIHJvdXRpbmVzIGZvciBhcml0aG1ldGljIHRoYXQgcGVyZm9ybSBubyBzcGVj
dWxhdGlvbjsgdGhlCisgICAgICAgICAgICAgIG5vbi1zcGVjdWxhdGl2ZSBKSVQgd2lsbCBnZW5l
cmF0ZSBjYWxscyB0byB0aGVzZSBpbiBjYXNlcyB3aGVyZSBpdHMKKyAgICAgICAgICAgICAgc3Bl
Y3VsYXRpb24gZmFpbHMuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKwogMjAxMS0w
Ni0yNCAgU2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAg
ICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjg5NTk0LgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDg5
Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJVC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDM3ICs1NiwzMiBAQCBFbnRyeUxvY2F0aW9uOjpFbnRy
eUxvY2F0aW9uKE1hY3JvQXNzZW1iCiAgICAgfQogfQogCi12b2lkIE5vblNwZWN1bGF0aXZlSklU
Ojp2YWx1ZVRvTnVtYmVyKEpTVmFsdWVPcGVyYW5kJiBvcGVyYW5kLCBGUFJSZWcgZnByKQordm9p
ZCBOb25TcGVjdWxhdGl2ZUpJVDo6dmFsdWVUb051bWJlcihKU1ZhbHVlT3BlcmFuZCYgb3BlcmFu
ZCwgR1BSUmVnIGdwcikKIHsKICAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wZXJhbmQuZ3ByKCk7
Ci0gICAgR1BSUmVnIHRlbXBHcHIgPSBhbGxvY2F0ZSgpOyAvLyBGSVhNRTogY2FuIHdlIHNraXAg
dGhpcyBhbGxvY2F0aW9uIG9uIHRoZSBsYXN0IHVzZSBvZiB0aGUgdmlydHVhbCByZWdpc3Rlcj8K
IAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwogICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vbk51bWVyaWMgPSBtX2ppdC5i
cmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBqc1ZhbHVlR3ByLCBHUFJJbmZvOjp0
YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOwogCiAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdl
IGhhdmUgYSBkb3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKLSAgICBtX2ppdC5tb3ZlKGpzVmFs
dWVHcHIsIHRlbXBHcHIpOwotICAgIG1faml0LmFkZFB0cihHUFJJbmZvOjp0YWdUeXBlTnVtYmVy
UmVnaXN0ZXIsIHRlbXBHcHIpOwotICAgIG1faml0Lm1vdmVQdHJUb0RvdWJsZSh0ZW1wR3ByLCBm
cHIpOworICAgIG1faml0Lm1vdmUoanNWYWx1ZUdwciwgZ3ByKTsKICAgICBKSVRDb21waWxlcjo6
SnVtcCBoYXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwogCiAgICAgLy8gTmV4dCBoYW5k
bGUgY2VsbHMgKCYgb3RoZXIgSlMgaW1tZWRpYXRlcykKICAgICBub25OdW1lcmljLmxpbmsoJm1f
aml0KTsKLSAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhmcHIsIGpzVmFsdWVHcHIpOworICAg
IHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKGdwciwganNWYWx1ZUdwcik7CiAgICAgbV9qaXQubW92
ZShqc1ZhbHVlR3ByLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOwogICAgIG1faml0Lm1vdmUoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CiAgICAgYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvTnVtYmVyKTsKLSAg
ICBtX2ppdC5tb3ZlRG91YmxlKEZQUkluZm86OnJldHVyblZhbHVlRlBSLCBmcHIpOwotICAgIHNp
bGVudEZpbGxBbGxSZWdpc3RlcnMoZnByKTsKKyAgICBib3hEb3VibGUoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIsIGdwcik7CisgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhncHIpOwogICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGhhc0NhbGxlZFRvTnVtYmVyID0gbV9qaXQuanVtcCgpOwogICAgIAog
ICAgIC8vIEZpbmFsbHksIGhhbmRsZSBpbnRlZ2Vycy4KICAgICBpc0ludGVnZXIubGluaygmbV9q
aXQpOwotICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKGpzVmFsdWVHcHIsIGZwcik7Cisg
ICAgbV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCBqc1ZhbHVlR3By
LCBncHIpOwogICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwogICAgIGhhc0NhbGxl
ZFRvTnVtYmVyLmxpbmsoJm1faml0KTsKLQotICAgIG1fZ3Bycy51bmxvY2sodGVtcEdwcik7CiB9
CiAKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OnZhbHVlVG9JbnQzMihKU1ZhbHVlT3BlcmFuZCYg
b3BlcmFuZCwgR1BSUmVnIHJlc3VsdCkKQEAgLTE2NSw2ICsxNjAsMjQ2IEBAIGJvb2wgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmlzS25vd25OdW1lcmljKE4KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKK3Zv
aWQgTm9uU3BlY3VsYXRpdmVKSVQ6Omtub3duQ29uc3RhbnRBcml0aE9wKE5vZGVUeXBlIG9wLCBO
b2RlSW5kZXggcmVnQ2hpbGQsIE5vZGVJbmRleCBpbW1DaGlsZCwgYm9vbCBjb21tdXRlKQorewor
ICAgIEpTVmFsdWVPcGVyYW5kIHJlZ0FyZyh0aGlzLCByZWdDaGlsZCk7CisgICAgR1BSUmVnIHJl
Z0FyZ0dQUiA9IHJlZ0FyZy5ncHIoKTsKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIHJl
Z0FyZyk7CisgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdEludDsKKyAgICAKKyAgICBpbnQzMl90IGltbSA9IHZhbHVlT2ZJbnQz
MkNvbnN0YW50KGltbUNoaWxkKTsKKyAgICAgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihy
ZWdDaGlsZCkpCisgICAgICAgIG5vdEludCA9IG1faml0LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxl
cjo6QmVsb3csIHJlZ0FyZ0dQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKyAg
ICAgICAgCisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIocmVnQXJnR1BSLCByZXN1bHRHUFIp
OyAKKyAgICAgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgb3ZlcmZsb3c7CisgICAgCisgICAg
c3dpdGNoIChvcCkgeworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAgY2FzZSBBcml0aEFkZDogewor
ICAgICAgICBvdmVyZmxvdyA9IG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVy
ZmxvdywgSW1tMzIoaW1tKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
ICAgICAKKyAgICBjYXNlIEFyaXRoU3ViOiB7CisgICAgICAgIG92ZXJmbG93ID0gbV9qaXQuYnJh
bmNoU3ViMzIoTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCBJbW0zMihpbW0pLCByZXN1bHRHUFIp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICAKKyAgICBtX2ppdC5vclB0cihHUFJJ
bmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIHJlc3VsdEdQUik7CisgICAgICAgIAorICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgCisgICAgb3ZlcmZsb3cu
bGluaygmbV9qaXQpOworICAgIAorICAgIGlmIChyZWdBcmdHUFIgPT0gcmVzdWx0R1BSKSB7Cisg
ICAgICAgIHN3aXRjaCAob3ApIHsKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgY2Fz
ZSBBcml0aEFkZDogeworICAgICAgICAgICAgbV9qaXQuc3ViMzIoSW1tMzIoaW1tKSwgcmVnQXJn
R1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICAgICAgbV9qaXQuYWRkMzIoSW1tMzIoaW1tKSwg
cmVnQXJnR1BSKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
ciwgcmVnQXJnR1BSKTsKKyAgICB9CisgICAgCisgICAgaWYgKCFpc0tub3duSW50ZWdlcihyZWdD
aGlsZCkpCisgICAgICAgIG5vdEludC5saW5rKCZtX2ppdCk7CisgICAgCisgICAgc2lsZW50U3Bp
bGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSLCByZWdBcmdHUFIpOworICAgIHN3aXRjaCAob3ApIHsK
KyAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICBpZiAoY29tbXV0ZSkgeworICAgICAgICAgICAg
bV9qaXQubW92ZShyZWdBcmdHUFIsIEdQUkluZm86OmFyZ3VtZW50R1BSMik7CisgICAgICAgICAg
ICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9p
ZCo+KEpTVmFsdWU6OmVuY29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQubW92ZShyZWdBcmdHUFIs
IEdQUkluZm86OmFyZ3VtZW50R1BSMSk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNz
ZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjIpOworICAgICAgICB9CisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCk7CisgICAgICAgIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
VmFsdWVBZGQpOworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBBcml0aEFkZDoK
KyAgICAgICAgaWYgKGNvbW11dGUpIHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BS
LCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fz
c2VtYmxlcjo6SW1tUHRyKHN0YXRpY19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoaW1tKSkpKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIG1faml0Lm1vdmUocmVnQXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQ
UjApOworICAgICAgICAgICAgbV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6SW1tUHRyKHN0YXRp
Y19jYXN0PGNvbnN0IHZvaWQqPihKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW1tKSkpKSwgR1BS
SW5mbzo6YXJndW1lbnRHUFIxKTsKKyAgICAgICAgfQorICAgICAgICBtX2ppdC5hcHBlbmRDYWxs
KG9wZXJhdGlvbkFyaXRoQWRkKTsKKyAgICAgICAgYnJlYWs7CisgICAgICAgIAorICAgIGNhc2Ug
QXJpdGhTdWI6CisgICAgICAgIEFTU0VSVCghY29tbXV0ZSk7CisgICAgICAgIG1faml0Lm1vdmUo
cmVnQXJnR1BSLCBHUFJJbmZvOjphcmd1bWVudEdQUjApOworICAgICAgICBtX2ppdC5tb3ZlKE1h
Y3JvQXNzZW1ibGVyOjpJbW1QdHIoc3RhdGljX2Nhc3Q8Y29uc3Qgdm9pZCo+KEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbW0pKSkpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpOworICAgICAgICBt
X2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoU3ViKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ICAgIAorICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KyAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOworICAg
IHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAKKyAgICBkb25lLmxpbmso
Jm1faml0KTsKKyAgICAgICAgCisgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGls
ZUluZGV4KTsKK30KKwordm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6YmFzaWNBcml0aE9wKE5vZGVU
eXBlIG9wLCBOb2RlICZub2RlKQoreworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzEodGhpcywgbm9k
ZS5jaGlsZDEpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwor
ICAgIAorICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQ
UiA9IGFyZzIuZ3ByKCk7CisgICAgCisgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcywgYXJnMik7
CisgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKworICAgIEdQUlJlZyB0ZW1wR1BSID0g
dGVtcC5ncHIoKTsKKyAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICBKSVRDb21waWxlcjo6SnVt
cExpc3Qgb3ZlcmZsb3dTbG93UGF0aDsKKyAgICAKKyAgICBpZiAoIWlzS25vd25JbnRlZ2VyKG5v
ZGUuY2hpbGQxKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cihNYWNy
b0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIpKQorICAgICAgICBzbG93
UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgYXJnMkdQ
UiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAgCisgICAgbV9qaXQuemVy
b0V4dGVuZDMyVG9QdHIoYXJnMUdQUiwgcmVzdWx0R1BSKTsKKyAgICBtX2ppdC56ZXJvRXh0ZW5k
MzJUb1B0cihhcmcyR1BSLCB0ZW1wR1BSKTsKKyAgICAKKyAgICBzd2l0Y2ggKG9wKSB7CisgICAg
Y2FzZSBWYWx1ZUFkZDoKKyAgICBjYXNlIEFyaXRoQWRkOiB7CisgICAgICAgIG92ZXJmbG93U2xv
d1BhdGguYXBwZW5kKG1faml0LmJyYW5jaEFkZDMyKE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdywg
dGVtcEdQUiwgcmVzdWx0R1BSKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICAgICAgCisg
ICAgY2FzZSBBcml0aFN1YjogeworICAgICAgICBvdmVyZmxvd1Nsb3dQYXRoLmFwcGVuZChtX2pp
dC5icmFuY2hTdWIzMihNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3csIHRlbXBHUFIsIHJlc3VsdEdQ
UikpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgICAgIAorICAgIGNhc2UgQXJpdGhNdWw6
IHsKKyAgICAgICAgb3ZlcmZsb3dTbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoTXVsMzIoTWFj
cm9Bc3NlbWJsZXI6Ok92ZXJmbG93LCB0ZW1wR1BSLCByZXN1bHRHUFIpKTsKKyAgICAgICAgb3Zl
cmZsb3dTbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpa
ZXJvLCByZXN1bHRHUFIpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAgICAKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgCisgICAg
bV9qaXQub3JQdHIoR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyLCByZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAg
IAorICAgIG92ZXJmbG93U2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIGlmIChhcmcy
R1BSID09IHRlbXBHUFIpCisgICAgICAgIG1faml0Lm9yUHRyKEdQUkluZm86OnRhZ1R5cGVOdW1i
ZXJSZWdpc3RlciwgYXJnMkdQUik7CisgICAgCisgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwor
ICAgIAorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJn
MkdQUik7CisgICAgaWYgKG9wID09IFZhbHVlQWRkKSB7CisgICAgICAgIHNldHVwU3R1YkFyZ3Vt
ZW50cyhhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2Fs
bFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb25WYWx1ZUFkZCk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgc2V0dXBUd29TdHViQXJnczxHUFJJbmZvOjphcmd1bWVudEdQUjAsIEdQUkluZm86OmFy
Z3VtZW50R1BSMT4oYXJnMUdQUiwgYXJnMkdQUik7CisgICAgICAgIHN3aXRjaCAob3ApIHsKKyAg
ICAgICAgY2FzZSBBcml0aEFkZDoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0
aW9uQXJpdGhBZGQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAg
Y2FzZSBBcml0aFN1YjoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJp
dGhTdWIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBB
cml0aE11bDoKKyAgICAgICAgICAgIG1faml0LmFwcGVuZENhbGwob3BlcmF0aW9uQXJpdGhNdWwp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgc2lsZW50
RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgIAorICAgIGRvbmUubGluaygmbV9qaXQp
OworICAgICAgICAKKyAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgp
OworfQorCit2b2lkIE5vblNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5vZGUmIG5vZGUsIE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIGNvbnN0IFpfREZHT3BlcmF0aW9u
X0VKSiYgaGVscGVyRnVuY3Rpb24pCit7CisgICAgLy8gRklYTUU6IHNob3VsZCBkbyBzb21lIHBl
ZXBob2xlIHRvIGZ1c2UgY29tcGFyZS9icmFuY2gKKyAgICAgICAgCisgICAgSlNWYWx1ZU9wZXJh
bmQgYXJnMSh0aGlzLCBub2RlLmNoaWxkMSk7CisgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlz
LCBub2RlLmNoaWxkMik7CisgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgIEdQ
UlJlZyBhcmcyR1BSID0gYXJnMi5ncHIoKTsKKyAgICAKKyAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOworICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOworICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOworICAg
IAorICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAKKyAgICBpZiAoIWlz
S25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkKKyAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0
LmJyYW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6QmVsb3csIGFyZzFHUFIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlcikpOworICAgIGlmICghaXNLbm93bkludGVnZXIobm9kZS5jaGlsZDIp
KQorICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVy
OjpCZWxvdywgYXJnMkdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKSk7CisgICAg
CisgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoYXJnMUdQUiwgdGVtcEdQUik7CisgICAgbV9q
aXQuemVyb0V4dGVuZDMyVG9QdHIoYXJnMkdQUiwgcmVzdWx0R1BSKTsKKyAgICAKKyAgICBtX2pp
dC5jb21wYXJlMzIoY29uZCwgdGVtcEdQUiwgcmVzdWx0R1BSLCByZXN1bHRHUFIpOworICAgIAor
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhdmVSZXN1bHQgPSBtX2ppdC5qdW1wKCk7CisgICAgCisg
ICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAgIAorICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0
ZXJzKHJlc3VsdEdQUiwgYXJnMUdQUiwgYXJnMkdQUik7CisgICAgc2V0dXBTdHViQXJndW1lbnRz
KGFyZzFHUFIsIGFyZzJHUFIpOworICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhoZWxwZXJGdW5jdGlvbik7CisgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUiwgcmVzdWx0R1BSKTsKKyAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQ
Uik7CisgICAgICAgIAorICAgIG1faml0LmFuZFB0cihUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8
aW50MzJfdD4oMSkpLCByZXN1bHRHUFIpOworICAgIAorICAgIGhhdmVSZXN1bHQubGluaygmbV9q
aXQpOworICAgIAorICAgIG1faml0Lm9yMzIoVHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1
bHRHUFIpOworICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7Cit9
CisKIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXRpb25DaGVja0luZGV4
SXRlcmF0b3ImIGNoZWNrSXRlcmF0b3IsIE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQ2hlY2sgZm9y
IHNwZWN1bGF0aW9uIGNoZWNrcyBmcm9tIHRoZSBjb3JyZXNwb25kaW5nIGluc3RydWN0aW9uIGlu
IHRoZQpAQCAtMjcyLDE0ICs1MDcsMjYgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShTcGVjdWxhdAogCiAgICAgY2FzZSBVSW50MzJUb051bWJlcjogewogICAgICAgICBJbnRlZ2Vy
T3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBGUFJUZW1wb3JhcnkgcmVz
dWx0KHRoaXMpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCks
IHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgcG9zaXRpdmUg
PSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsLCBvcDEu
Z3ByKCksIFRydXN0ZWRJbW0zMigwKSk7Ci0gICAgICAgIG1faml0LmFkZERvdWJsZShKSVRDb21w
aWxlcjo6QWJzb2x1dGVBZGRyZXNzKCZ0d29Ub1RoZTMyKSwgcmVzdWx0LmZwcigpKTsKKyAgICAg
ICAgRlBSVGVtcG9yYXJ5IGJveGVyKHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMsIG9wMSk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBwb3NpdGl2
ZSA9IG1faml0LmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWwsIG9w
MS5ncHIoKSwgVHJ1c3RlZEltbTMyKDApKTsKKyAgICAgICAgCisgICAgICAgIG1faml0LmNvbnZl
cnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgYm94ZXIuZnByKCkpOworICAgICAgICBtX2ppdC5h
ZGREb3VibGUoSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcygmdHdvVG9UaGUzMiksIGJveGVy
LmZwcigpKTsKKyAgICAgICAgCisgICAgICAgIG1faml0Lm1vdmVEb3VibGVUb1B0cihib3hlci5m
cHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgbV9qaXQuc3ViUHRyKEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3RlciwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgCisgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIAogICAgICAgICBwb3Np
dGl2ZS5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAgICBtX2ppdC5vclB0cihHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIsIG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAg
ICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgICAgIGRvdWJsZVJlc3VsdChy
ZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1
bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0y
OTUsNyArNTQyLDcgQEAgdm9pZCBOb25TcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShTcGVjdWxhdAog
ICAgICAgICB9CiAKICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGNoaWxkSW5mbyA9IG1fZ2VuZXJh
dGlvbkluZm9bbV9qaXQuZ3JhcGgoKVtub2RlLmNoaWxkMV0udmlydHVhbFJlZ2lzdGVyKCldOwot
ICAgICAgICBpZiAoKGNoaWxkSW5mby5yZWdpc3RlckZvcm1hdCgpIHx8IERhdGFGb3JtYXRKUykg
PT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7CisgICAgICAgIGlmICgoY2hpbGRJbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgfCBEYXRhRm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZSkgewogICAgICAg
ICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwogICAgICAgICAgICAg
R1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIG51bWJlclRvSW50MzIob3Ax
LmZwcigpLCByZXN1bHQuZ3ByKCkpOwpAQCAtMzE0LDE0MCArNTYxLDcyIEBAIHZvaWQgTm9uU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoU3BlY3VsYXQKICAgICAgICAgQVNTRVJUKCFpc0ludDMyQ29u
c3RhbnQobm9kZS5jaGlsZDEpKTsKICAgICAgICAgQVNTRVJUKCFpc0RvdWJsZUNvbnN0YW50KG5v
ZGUuY2hpbGQxKSk7CiAKLSAgICAgICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUuY2hpbGQxKSkg
ewotICAgICAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAg
ICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBtX2ppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIEdlbmVyYXRpb25JbmZvJiBjaGlsZEluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW21faml0LmdyYXBoKClbbm9kZS5jaGlsZDFdLnZpcnR1YWxSZWdp
c3RlcigpXTsKLSAgICAgICAgaWYgKChjaGlsZEluZm8ucmVnaXN0ZXJGb3JtYXQoKSB8fCBEYXRh
Rm9ybWF0SlMpID09IERhdGFGb3JtYXRKU0RvdWJsZSkgewotICAgICAgICAgICAgRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgbV9qaXQubW92ZURvdWJsZShvcDEuZnByKCks
IHJlc3VsdC5mcHIoKSk7Ci0gICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBt
X2NvbXBpbGVJbmRleCk7CisgICAgICAgIGlmIChpc0tub3duTnVtZXJpYyhub2RlLmNoaWxkMSkp
IHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxkMSk7Cisg
ICAgICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7CisgICAgICAgICAgICBt
X2ppdC5tb3ZlKG9wMS5ncHIoKSwgcmVzdWx0LmdwcigpKTsKKyAgICAgICAgICAgIGpzVmFsdWVS
ZXN1bHQocmVzdWx0LmdwcigpLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogCiAgICAgICAgIEpTVmFsdWVPcGVyYW5kIG9wMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgIHZhbHVlVG9O
dW1iZXIob3AxLCByZXN1bHQuZnByKCkpOwotICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZw
cigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNhc2Ug
VmFsdWVBZGQ6IHsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMSh0aGlzLCBub2RlLmNoaWxk
MSk7Ci0gICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZzIodGhpcywgbm9kZS5jaGlsZDIpOwotICAg
ICAgICBHUFJSZWcgYXJnMUdQUiA9IGFyZzEuZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyBhcmcyR1BS
ID0gYXJnMi5ncHIoKTsKLSAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLQotICAgICAgICBHUFJS
ZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblZhbHVl
QWRkLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJHUFIpOwotCisgICAgICAgIEdQUlRlbXBv
cmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIHZhbHVlVG9OdW1iZXIob3AxLCByZXN1bHQuZ3By
KCkpOwogICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgp
OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgICAgIAotICAgIGNhc2UgQXJpdGhBZGQ6IHsK
LSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBE
b3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEZQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwotCi0gICAgICAgIEZQUlJlZyByZWcxID0gb3AxLmZw
cigpOwotICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAgICAgICAgbV9qaXQuYWRk
RG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7CiAKLSAgICAgICAgZG91YmxlUmVzdWx0
KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgIGNhc2UgVmFsdWVBZGQ6CisgICAg
Y2FzZSBBcml0aEFkZDogeworICAgICAgICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQx
KSkgeworICAgICAgICAgICAga25vd25Db25zdGFudEFyaXRoT3Aob3AsIG5vZGUuY2hpbGQyLCBu
b2RlLmNoaWxkMSwgdHJ1ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlLmNoaWxkMikpIHsKKyAgICAgICAg
ICAgIGtub3duQ29uc3RhbnRBcml0aE9wKG9wLCBub2RlLmNoaWxkMSwgbm9kZS5jaGlsZDIsIGZh
bHNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBi
YXNpY0FyaXRoT3Aob3AsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9Ci0KKyAgICAgICAg
CiAgICAgY2FzZSBBcml0aFN1YjogewotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlzLCBu
b2RlLmNoaWxkMSk7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AyKHRoaXMsIG5vZGUuY2hpbGQy
KTsKLSAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotCi0gICAgICAgIEZQ
UlJlZyByZWcxID0gb3AxLmZwcigpOwotICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsK
LSAgICAgICAgbV9qaXQuc3ViRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAg
ICAgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAg
ICBpZiAoaXNJbnQzMkNvbnN0YW50KG5vZGUuY2hpbGQyKSkgeworICAgICAgICAgICAga25vd25D
b25zdGFudEFyaXRoT3AoQXJpdGhTdWIsIG5vZGUuY2hpbGQxLCBub2RlLmNoaWxkMiwgZmFsc2Up
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJhc2lj
QXJpdGhPcChBcml0aFN1Yiwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIGNh
c2UgQXJpdGhNdWw6IHsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS5jaGls
ZDEpOwotICAgICAgICBEb3VibGVPcGVyYW5kIG9wMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAg
ICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxLCBvcDIpOwotCi0gICAgICAgIEZQUlJl
ZyByZWcxID0gb3AxLmZwcigpOwotICAgICAgICBGUFJSZWcgcmVnMiA9IG9wMi5mcHIoKTsKLSAg
ICAgICAgbV9qaXQubXVsRG91YmxlKHJlZzEsIHJlZzIsIHJlc3VsdC5mcHIoKSk7Ci0KLSAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbV9jb21waWxlSW5kZXgpOworICAgICAgICBi
YXNpY0FyaXRoT3AoQXJpdGhNdWwsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKICAg
ICBjYXNlIEFyaXRoRGl2OiB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUu
Y2hpbGQxKTsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBvcDIodGhpcywgbm9kZS5jaGlsZDIpOwot
ICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7Ci0KLSAgICAgICAgRlBSUmVn
IHJlZzEgPSBvcDEuZnByKCk7Ci0gICAgICAgIEZQUlJlZyByZWcyID0gb3AyLmZwcigpOwotICAg
ICAgICBtX2ppdC5kaXZEb3VibGUocmVnMSwgcmVnMiwgcmVzdWx0LmZwcigpKTsKLQotICAgICAg
ICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBtX2NvbXBpbGVJbmRleCk7Ci0gICAgICAgIGJy
ZWFrOwotICAgIH0KLQotICAgIGNhc2UgQXJpdGhNb2Q6IHsKLSAgICAgICAgRG91YmxlT3BlcmFu
ZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAgRG91YmxlT3BlcmFuZCBhcmcyKHRo
aXMsIG5vZGUuY2hpbGQyKTsKLSAgICAgICAgRlBSUmVnIGFyZzFGUFIgPSBhcmcxLmZwcigpOwot
ICAgICAgICBGUFJSZWcgYXJnMkZQUiA9IGFyZzIuZnByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7Ci0KLSAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9w
ZXJhdGlvbihmbW9kLCByZXN1bHQuZnByKCksIGFyZzFGUFIsIGFyZzJGUFIpOwotCi0gICAgICAg
IGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgfQotCi0gICAgY2FzZSBMb2dpY2FsTm90OiB7Ci0gICAgICAgIEpTVmFsdWVPcGVy
YW5kIGFyZzEodGhpcywgbm9kZS5jaGlsZDEpOwotICAgICAgICBHUFJSZWcgYXJnMUdQUiA9IGFy
ZzEuZ3ByKCk7Ci0gICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0KLSAgICAgICAgR1BSUmVzdWx0
IHJlc3VsdCh0aGlzKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbihkZmdDb252ZXJ0SlNWYWx1ZVRv
Qm9vbGVhbiwgcmVzdWx0LmdwcigpLCBhcmcxR1BSKTsKLQotICAgICAgICAvLyBJZiB3ZSBhZGQg
YSBEYXRhRm9ybWF0Qm9vbCwgd2Ugc2hvdWxkIHVzZSBpdCBoZXJlLgotICAgICAgICBtX2ppdC54
b3IzMihUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0LmdwcigpKTsKLSAgICAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY29tcGlsZUluZGV4KTsKLSAgICAgICAgYnJlYWs7
Ci0gICAgfQotCi0gICAgY2FzZSBDb21wYXJlTGVzczogewogICAgICAgICBKU1ZhbHVlT3BlcmFu
ZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0
aGlzLCBub2RlLmNoaWxkMik7CiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsK
ICAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOworICAgICAgICAKICAgICAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBHUFJSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVMZXNzLCByZXN1bHQuZ3ByKCksIGFy
ZzFHUFIsIGFyZzJHUFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZh
bHNlKSwgcmVzdWx0LmdwcigpKTsKKworICAgICAgICBBU1NFUlQoaXNGbHVzaGVkKCkpOworICAg
ICAgICBzZXR1cFR3b1N0dWJBcmdzPEdQUkluZm86OmFyZ3VtZW50R1BSMCwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxPihhcmcxR1BSLCBhcmcyR1BSKTsKKyAgICAgICAgbV9qaXQuYXBwZW5kQ2FsbChv
cGVyYXRpb25Bcml0aERpdik7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIsIHJlc3VsdC5ncHIoKSk7CiAKICAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHQuZ3By
KCksIG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgY2FzZSBD
b21wYXJlTGVzc0VxOiB7CisgICAgY2FzZSBBcml0aE1vZDogewogICAgICAgICBKU1ZhbHVlT3Bl
cmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJn
Mih0aGlzLCBub2RlLmNoaWxkMik7CiAgICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIo
KTsKQEAgLTQ1NSw0MiArNjM0LDU2IEBAIHZvaWQgTm9uU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUo
U3BlY3VsYXQKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKIAogICAgICAgICBHUFJSZXN1bHQg
cmVzdWx0KHRoaXMpOwotICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVMZXNz
RXEsIHJlc3VsdC5ncHIoKSwgYXJnMUdQUiwgYXJnMkdQUik7Ci0gICAgICAgIG1faml0Lm9yMzIo
VHJ1c3RlZEltbTMyKFZhbHVlRmFsc2UpLCByZXN1bHQuZ3ByKCkpOworCisgICAgICAgIEFTU0VS
VChpc0ZsdXNoZWQoKSk7CisgICAgICAgIHNldHVwVHdvU3R1YkFyZ3M8R1BSSW5mbzo6YXJndW1l
bnRHUFIwLCBHUFJJbmZvOjphcmd1bWVudEdQUjE+KGFyZzFHUFIsIGFyZzJHUFIpOworICAgICAg
ICBtX2ppdC5hcHBlbmRDYWxsKG9wZXJhdGlvbkFyaXRoTW9kKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0LmdwcigpKTsKIAogICAgICAgICBqc1Zh
bHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKLSAgICBjYXNlIENvbXBhcmVFcTogeworICAgIGNhc2UgTG9naWNhbE5vdDogewog
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMsIG5vZGUuY2hpbGQxKTsKLSAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNoaWxkMik7Ci0gICAgICAgIEdQUlJlZyBh
cmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BSUmVnIGFyZzJHUFIgPSBhcmcyLmdwcigp
OwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0
KHRoaXMpOwogCi0gICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZUVxLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJH
UFIpOwotICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0
LmdwcigpKTsKKyAgICAgICAgR1BSUmVnIGFyZzFHUFIgPSBhcmcxLmdwcigpOworICAgICAgICBH
UFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICAKKyAgICAgICAgbV9qaXQu
bW92ZShhcmcxR1BSLCByZXN1bHRHUFIpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KFZhbHVlRmFsc2UpKSwgcmVzdWx0R1BSKTsKKyAgICAg
ICAgSklUQ29tcGlsZXI6Okp1bXAgZmFzdENhc2UgPSBtX2ppdC5icmFuY2hUZXN0UHRyKEpJVENv
bXBpbGVyOjpaZXJvLCByZXN1bHRHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
Pih+MSkpKTsKKyAgICAgICAgCisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUiwgYXJnMUdQUik7CisgICAgICAgIG1faml0Lm1vdmUoYXJnMUdQUiwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIxKTsKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
ciwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICAgICAgYXBwZW5kQ2FsbFdpdGhFeGNlcHRp
b25DaGVjayhkZmdDb252ZXJ0SlNWYWx1ZVRvQm9vbGVhbik7CisgICAgICAgIG1faml0Lm1vdmUo
R1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGZhc3RDYXNlLmxpbmso
Jm1faml0KTsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBtX2ppdC54b3JQdHIoVHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFZhbHVlVHJ1ZSkpLCByZXN1bHRHUFIpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJl
c3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBj
YXNlIENvbXBhcmVTdHJpY3RFcTogewotICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcxKHRoaXMs
IG5vZGUuY2hpbGQxKTsKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnMih0aGlzLCBub2RlLmNo
aWxkMik7Ci0gICAgICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKLSAgICAgICAgR1BS
UmVnIGFyZzJHUFIgPSBhcmcyLmdwcigpOwotICAgICAgICBmbHVzaFJlZ2lzdGVycygpOwotCi0g
ICAgICAgIEdQUlJlc3VsdCByZXN1bHQodGhpcyk7Ci0gICAgICAgIGNhbGxPcGVyYXRpb24ob3Bl
cmF0aW9uQ29tcGFyZVN0cmljdEVxLCByZXN1bHQuZ3ByKCksIGFyZzFHUFIsIGFyZzJHUFIpOwot
ICAgICAgICBtX2ppdC5vcjMyKFRydXN0ZWRJbW0zMihWYWx1ZUZhbHNlKSwgcmVzdWx0Lmdwcigp
KTsKKyAgICBjYXNlIENvbXBhcmVMZXNzOgorICAgICAgICBjb21wYXJlKG5vZGUsIE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbiwgb3BlcmF0aW9uQ29tcGFyZUxlc3MpOworICAgICAgICBicmVhazsK
KyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlTGVzc0VxOgorICAgICAgICBjb21wYXJlKG5vZGUs
IE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWwsIG9wZXJhdGlvbkNvbXBhcmVMZXNzRXEp
OworICAgICAgICBicmVhazsKKyAgICAgICAgCisgICAgY2FzZSBDb21wYXJlRXE6CisgICAgICAg
IGNvbXBhcmUobm9kZSwgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcGVyYXRpb25Db21wYXJlRXEp
OworICAgICAgICBicmVhazsKIAotICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdC5ncHIoKSwg
bV9jb21waWxlSW5kZXgpOworICAgIGNhc2UgQ29tcGFyZVN0cmljdEVxOgorICAgICAgICBjb21w
YXJlKG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3BlcmF0aW9uQ29tcGFyZVN0cmljdEVx
KTsKICAgICAgICAgYnJlYWs7Ci0gICAgfQogCiAgICAgY2FzZSBHZXRCeVZhbDogewogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9uU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vblNwZWN1bGF0aXZlSklULmgJKHJldmlzaW9u
IDg5Njk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb25TcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHByaXZhdGU6CiAKICAgICAvLyBU
aGVzZSBtZXRob2RzIGFyZSB1c2VkIHRvIHBsYW50IGNhbGxzIG91dCB0byBDKysKICAgICAvLyBo
ZWxwZXIgcm91dGluZXMgdG8gY29udmVydCBiZXR3ZWVuIHR5cGVzLgotICAgIHZvaWQgdmFsdWVU
b051bWJlcihKU1ZhbHVlT3BlcmFuZCYsIEZQUlJlZyByZXN1bHQpOworICAgIHZvaWQgdmFsdWVU
b051bWJlcihKU1ZhbHVlT3BlcmFuZCYsIEdQUlJlZyByZXN1bHQpOwogICAgIHZvaWQgdmFsdWVU
b0ludDMyKEpTVmFsdWVPcGVyYW5kJiwgR1BSUmVnIHJlc3VsdCk7CiAgICAgdm9pZCBudW1iZXJU
b0ludDMyKEZQUlJlZywgR1BSUmVnIHJlc3VsdCk7CiAKQEAgLTk4LDcgKzk4LDEyIEBAIHByaXZh
dGU6CiAgICAgewogICAgICAgICBtX2VudHJ5TG9jYXRpb25zLmFwcGVuZChFbnRyeUxvY2F0aW9u
KGVudHJ5LCB0aGlzKSk7CiAgICAgfQotCisgICAgCisgICAgLy8gaW50ZXJuYWwgaGVscGVycyBm
b3IgYWRkL3N1Yi9tdWwgb3BlcmF0aW9ucworICAgIHZvaWQga25vd25Db25zdGFudEFyaXRoT3Ao
Tm9kZVR5cGUgb3AsIE5vZGVJbmRleCByZWdDaGlsZCwgTm9kZUluZGV4IGltbUNoaWxkLCBib29s
IGNvbW11dGUpOworICAgIHZvaWQgYmFzaWNBcml0aE9wKE5vZGVUeXBlIG9wLCBOb2RlJik7Cisg
ICAgdm9pZCBjb21wYXJlKE5vZGUmLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlv
biwgY29uc3QgWl9ERkdPcGVyYXRpb25fRUpKJik7CisgICAgCiAgICAgRW50cnlMb2NhdGlvblZl
Y3RvciBtX2VudHJ5TG9jYXRpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiA4OTY5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzOCw2
ICsxMzgsNDEgQEAgRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YQogICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNBZGRTbG93Q2FzZShleGVjLCBvcDEsIG9wMikpOwog
fQogCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aEFkZChFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0xID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAgIGRv
dWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51bWJl
cigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSArIG51bTIpKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhTdWIoRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVtMSA9
IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAgICBk
b3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXROdW1i
ZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKG51bTEgLSBudW0yKSk7
Cit9CisKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpCit7CisgICAgZG91YmxlIG51bTEg
PSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMSkudW5jaGVja2VkR2V0TnVtYmVyKCk7CisgICAg
ZG91YmxlIG51bTIgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZE9wMikudW5jaGVja2VkR2V0TnVt
YmVyKCk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihudW0xICogbnVtMikp
OworfQorCitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aERpdihFbmNvZGVkSlNWYWx1ZSBl
bmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKQoreworICAgIGRvdWJsZSBudW0x
ID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDEpLnVuY2hlY2tlZEdldE51bWJlcigpOworICAg
IGRvdWJsZSBudW0yID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRPcDIpLnVuY2hlY2tlZEdldE51
bWJlcigpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIobnVtMSAvIG51bTIp
KTsKK30KKworRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhNb2QoRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMikKK3sKKyAgICBkb3VibGUgbnVt
MSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AxKS51bmNoZWNrZWRHZXROdW1iZXIoKTsKKyAg
ICBkb3VibGUgbnVtMiA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3AyKS51bmNoZWNrZWRHZXRO
dW1iZXIoKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGZtb2QobnVtMSwg
bnVtMikpKTsKK30KKwogc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBnZXRCeVZhbChFeGVj
U3RhdGUqIGV4ZWMsIEpTQ2VsbCogYmFzZSwgdWludDMyX3QgaW5kZXgpCiB7CiAgICAgSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiA4OTY5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00OSw2ICs0OSwxMSBAQCB0eXBlZGVmIGRvdWJsZSAoKkRfREZHT3BlcmF0aW9uX0REKShkb3Vi
CiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxsYmFja3Mgb3V0IHRvIEMrKyBpbXBs
ZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxleCB0byBKSVQuCiBFbmNvZGVkSlNW
YWx1ZSBvcGVyYXRpb25Db252ZXJ0VGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkT3AxKTsKIEVuY29kZWRKU1ZhbHVlIG9wZXJhdGlvblZhbHVlQWRkKEV4ZWNTdGF0ZSosIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5j
b2RlZEpTVmFsdWUgb3BlcmF0aW9uQXJpdGhBZGQoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0
aFN1YihFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3Ay
KTsKK0VuY29kZWRKU1ZhbHVlIG9wZXJhdGlvbkFyaXRoTXVsKEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOworRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uQXJpdGhEaXYoRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5j
b2RlZE9wMik7CitFbmNvZGVkSlNWYWx1ZSBvcGVyYXRpb25Bcml0aE1vZChFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkT3AxLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AyKTsKIEVuY29kZWRKU1ZhbHVl
IG9wZXJhdGlvbkdldEJ5VmFsKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHkpOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0
aW9uR2V0QnlJZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgSWRlbnRp
ZmllciopOwogRW5jb2RlZEpTVmFsdWUgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplKEV4ZWNTdGF0
ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBJZGVudGlmaWVyKik7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>