<?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>113635</bug_id>
          
          <creation_ts>2013-03-29 21:45:54 -0700</creation_ts>
          <short_desc>fourthTier: FTL JIT should be able to compile the Marsaglia random number generator</short_desc>
          <delta_ts>2013-04-01 10:54:57 -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>
          
          <blocked>112840</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>866547</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 21:45:54 -0700</bug_when>
    <thetext>This is a very simple PRNG that we ought to be able to compile:

function marsaglia(m_z, m_w, n) {
    var result;
    for (var i = 0; i &lt; n; ++i) {
        m_z = (36969 * (m_z &amp; 65535) + (m_z &gt;&gt; 16)) | 0;
        m_w = (18000 * (m_w &amp; 65535) + (m_w &gt;&gt; 16)) | 0;
        result = ((m_z &lt;&lt; 16) + m_w) | 0;
    }
    return result;
}

var result = 0;
for (var i = 0; i &lt; 100; ++i)
    result += marsaglia(i, i + 1, 1000000);

print(result);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866558</commentid>
    <comment_count>1</comment_count>
      <attachid>195843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 23:06:35 -0700</bug_when>
    <thetext>Created attachment 195843
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866561</commentid>
    <comment_count>2</comment_count>
      <attachid>195844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-29 23:52:26 -0700</bug_when>
    <thetext>Created attachment 195844
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866703</commentid>
    <comment_count>3</comment_count>
      <attachid>195844</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-30 16:53:04 -0700</bug_when>
    <thetext>Comment on attachment 195844
the patch

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

&gt; Source/JavaScriptCore/ChangeLog:14
&gt; +        The Marsaglia function runs ~60% faster with FTL, than DFG. Not a terrible start.

Does the code look sane?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866704</commentid>
    <comment_count>4</comment_count>
      <attachid>195844</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2013-03-30 16:54:15 -0700</bug_when>
    <thetext>Comment on attachment 195844
the patch

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

&gt; LayoutTests/fast/js/regress/script-tests/marsaglia.js:15
&gt; +print(result);

Oh, this should be debug(result) I think, as it occurs to me that in-browser print() brings up the print dialog (obviously :D )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866705</commentid>
    <comment_count>5</comment_count>
      <attachid>195844</attachid>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-30 16:57:32 -0700</bug_when>
    <thetext>Comment on attachment 195844
the patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt;&gt; +        The Marsaglia function runs ~60% faster with FTL, than DFG. Not a terrible start.
&gt; 
&gt; Does the code look sane?

And when you say 60% faster, is that for the full 100 iterations in your original benchmark code or comparing the two once both of them fully tier up?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866706</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 16:57:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 195844 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195844&amp;action=review
&gt; 
&gt; &gt; LayoutTests/fast/js/regress/script-tests/marsaglia.js:15
&gt; &gt; +print(result);
&gt; 
&gt; Oh, this should be debug(result) I think, as it occurs to me that in-browser print() brings up the print dialog (obviously :D )

Ooooops!!  Haha, thanks for the catch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866707</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 16:58:29 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 195844 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195844&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:14
&gt; &gt; +        The Marsaglia function runs ~60% faster with FTL, than DFG. Not a terrible start.
&gt; 
&gt; Does the code look sane?

The LLVM IR looks sane.

I&apos;m still doing the wiring to allow us to actually disassemble the things that LLVM generates.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866708</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 16:58:53 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 195844 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=195844&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/ChangeLog:14
&gt; &gt;&gt; +        The Marsaglia function runs ~60% faster with FTL, than DFG. Not a terrible start.
&gt; &gt; 
&gt; &gt; Does the code look sane?
&gt; 
&gt; And when you say 60% faster, is that for the full 100 iterations in your original benchmark code or comparing the two once both of them fully tier up?

Yup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866709</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-30 17:00:31 -0700</bug_when>
    <thetext>&gt; &gt; And when you say 60% faster, is that for the full 100 iterations in your original benchmark code or comparing the two once both of them fully tier up?
&gt; 
&gt; Yup.

I&apos;ll assume you meant &quot;yup&quot; to the first option :-P</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866712</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:02:21 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; &gt; &gt; And when you say 60% faster, is that for the full 100 iterations in your original benchmark code or comparing the two once both of them fully tier up?
&gt; &gt; 
&gt; &gt; Yup.
&gt; 
&gt; I&apos;ll assume you meant &quot;yup&quot; to the first option :-P

Actually, I don&apos;t understand the question.  What is the difference between &quot;the full 100 iterations in your original benchmark&quot; and &quot;comparing the two once both of them fully tier up&quot;?

I&apos;m just running the program, as it exists in the benchmark I&apos;m landing in JSRegress, either with FTL turned on, or with FTL turned off.  Both runs involve tier-ups.  Both runs include compile time.  Both runs include 100 iterations, by virtue of the fact that the program has a loop that calls marsaglia() 100 times.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866714</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:03:36 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/147283</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866717</commentid>
    <comment_count>12</comment_count>
    <who name="Mark Hahnenberg">mhahnenberg</who>
    <bug_when>2013-03-30 17:08:56 -0700</bug_when>
    <thetext>&gt; Actually, I don&apos;t understand the question.  What is the difference between &quot;the full 100 iterations in your original benchmark&quot; and &quot;comparing the two once both of them fully tier up&quot;?

Sorry, it was kind of a vague question. You could imagine comparing the two with &quot;tier up time&quot; not included in their times. So you&apos;d wait some amount of time until both tiered all the way up, then test how long it takes each to run n iterations. I would imagine this would make the FTL look even better :-) I know our harness isn&apos;t really setup for that, but I didn&apos;t know if you had cooked up something custom.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>866719</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-03-30 17:15:22 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; &gt; Actually, I don&apos;t understand the question.  What is the difference between &quot;the full 100 iterations in your original benchmark&quot; and &quot;comparing the two once both of them fully tier up&quot;?
&gt; 
&gt; Sorry, it was kind of a vague question. You could imagine comparing the two with &quot;tier up time&quot; not included in their times. So you&apos;d wait some amount of time until both tiered all the way up, then test how long it takes each to run n iterations. I would imagine this would make the FTL look even better :-) I know our harness isn&apos;t really setup for that, but I didn&apos;t know if you had cooked up something custom.

Nope, I included the tier-up times.

I actually didn&apos;t even run in the harness - since the harness still makes it super awkward to pass environment variables to one configuration (you did some things to fix that, I think, but I don&apos;t remember and anyways I didn&apos;t feel like using my brain to think or eyes to read).  I just used &apos;time&apos; on the command-line.

So these measurements include:

- The time it takes for the &apos;jsc&apos; tool to start.
- The time it takes to run in the interpreter and baseline JIT prior to tier-up.
- The time it takes to compile the benchmark and tier up all the way to either DFG or FTL.
- The time it takes to actually run once tiered up.

One way to measure what the tier-up times look like is to increase, or decrease, the running time of the benchmark and see how it affects the speed-up.  I just tried increasing it to 10x longer and the speed-up went to 68% instead of 60%.  This implies that only a very small fraction of the 0.22 sec FTL total run-time includes compilation.

Basically what I&apos;m seeing consistently when I mess around with the Battlestar is that it actually takes significantly less time to launch than the nay-sayers claimed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>867223</commentid>
    <comment_count>14</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-04-01 10:54:57 -0700</bug_when>
    <thetext>&gt; Basically what I&apos;m seeing consistently when I mess around with the Battlestar is that it actually takes significantly less time to launch than the nay-sayers claimed.

Launch times are much shorter when you start from low Earth orbit!</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195843</attachid>
            <date>2013-03-29 23:06:35 -0700</date>
            <delta_ts>2013-03-29 23:52:26 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>21993</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU1IEBA
CisyMDEzLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBNYXJzYWds
aWEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgSnVzdCBhZGRpbmcgbWlzc2luZyBmdW5jdGlvbmFs
aXR5LgorCisgICAgICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEZUTCk6
CisgICAgICAgIChKU0M6OkZUTDo6c3RydWN0VHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6ZnVu
Y3Rpb25UeXBlKToKKyAgICAgICAgKEpTQzo6RlRMOjphZGRGdW5jdGlvbik6CisgICAgICAgIChK
U0M6OkZUTDo6c2V0TGlua2FnZSk6CisgICAgICAgIChKU0M6OkZUTDo6c2V0RnVuY3Rpb25DYWxs
aW5nQ29udik6CisgICAgICAgIChKU0M6OkZUTDo6YWRkRXh0ZXJuRnVuY3Rpb24pOgorICAgICAg
ICAoSlNDOjpGVEw6OmJ1aWxkTXVsKToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZE9yKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpidWlsZFNobCk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRBU2hy
KToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1
aWxkRXh0cmFjdFZhbHVlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdU
b0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6Cisg
ICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFkZCk6CisgICAgICAgIChMb3dlckRGR1RvTExW
TSk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11bCk6
CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRBbmQpOgorICAg
ICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0T3IpOgorICAgICAgICAo
SlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0UlNoaWZ0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdExTaGlmdCk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6
OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6CisgICAgICAgICogZnRsL0ZUTE91
dHB1dC5oOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6T3V0cHV0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpPdXRwdXQ6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
YXBwZW5kVG8pOgorICAgICAgICAoT3V0cHV0KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
Om11bCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpiaXRPcik6CisgICAgICAgIChKU0M6
OkZUTDo6T3V0cHV0OjpzaGwpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6YVNocik6Cisg
ICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjphZGRXaXRoT3ZlcmZsb3czMik6CisgICAgICAgIChK
U0M6OkZUTDo6T3V0cHV0OjptdWxXaXRoT3ZlcmZsb3czMik6CisgICAgICAgIChKU0M6OkZUTDo6
T3V0cHV0OjpleHRyYWN0VmFsdWUpOgorCiAyMDEzLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcmVsZWFzZSBtb2RlIGJ1aWxkIGZp
eC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2aWF0aW9ucy5o
CShyZXZpc2lvbiAxNDcyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEFiYnJl
dmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsNyArNDUsOSBAQCBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKIHR5cGVkZWYgTExWTUJhc2ljQmxvY2tSZWYgTEJhc2ljQmxv
Y2s7CiB0eXBlZGVmIExMVk1CdWlsZGVyUmVmIExCdWlsZGVyOwordHlwZWRlZiBMTFZNQ2FsbENv
bnYgTENhbGxDb252OwogdHlwZWRlZiBMTFZNSW50UHJlZGljYXRlIExJbnRQcmVkaWNhdGU7Cit0
eXBlZGVmIExMVk1MaW5rYWdlIExMaW5rYWdlOwogdHlwZWRlZiBMTFZNTW9kdWxlUmVmIExNb2R1
bGU7CiB0eXBlZGVmIExMVk1UeXBlUmVmIExUeXBlOwogdHlwZWRlZiBMTFZNVmFsdWVSZWYgTFZh
bHVlOwpAQCAtNTcsNiArNTksNTUgQEAgc3RhdGljIGlubGluZSBMVHlwZSBpbnRQdHJUeXBlKCkg
eyByZXR1cgogCiBzdGF0aWMgaW5saW5lIExUeXBlIHBvaW50ZXJUeXBlKExUeXBlIHR5cGUpIHsg
cmV0dXJuIExMVk1Qb2ludGVyVHlwZSh0eXBlLCAwKTsgfQogCitlbnVtIFBhY2tpbmdNb2RlIHsg
Tm90UGFja2VkLCBQYWNrZWQgfTsKK3N0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMVHlw
ZSogZWxlbWVudFR5cGVzLCB1bnNpZ25lZCBlbGVtZW50Q291bnQsIFBhY2tpbmdNb2RlIHBhY2tp
bmcgPSBOb3RQYWNrZWQpCit7CisgICAgcmV0dXJuIExMVk1TdHJ1Y3RUeXBlKGVsZW1lbnRUeXBl
cywgZWxlbWVudENvdW50LCBwYWNraW5nID09IFBhY2tlZCk7Cit9CitzdGF0aWMgaW5saW5lIExU
eXBlIHN0cnVjdFR5cGUoU3RydWN0UGFja2luZyBwYWNraW5nID0gTm90UGFja2VkKQoreworICAg
IHJldHVybiBzdHJ1Y3RUeXBlKDAsIDAsIHBhY2tpbmcpOworfQorc3RhdGljIGlubGluZSBMVHlw
ZSBzdHJ1Y3RUeXBlKExUeXBlIGVsZW1lbnQxLCBTdHJ1Y3RQYWNraW5nIHBhY2tpbmcgPSBOb3RQ
YWNrZWQpCit7CisgICAgcmV0dXJuIHN0cnVjdFR5cGUoJmVsZW1lbnQxLCAxLCBwYWNraW5nKTsK
K30KK3N0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShMVHlwZSBlbGVtZW50MSwgTFR5cGUg
ZWxlbWVudDIsIFN0cnVjdFBhY2tpbmcgcGFja2luZyA9IE5vdFBhY2tlZCkKK3sKKyAgICBMVHlw
ZSBlbGVtZW50c1tdID0geyBlbGVtZW50MSwgZWxlbWVudDIgfTsKKyAgICByZXR1cm4gc3RydWN0
VHlwZShlbGVtZW50cywgMiwgcGFja2luZyk7Cit9CisKK2VudW0gVmFyaWFkaWNpdHkgeyBOb3RW
YXJpYWRpYywgVmFyaWFkaWMgfTsKK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rpb25UeXBlKExU
eXBlIHJldHVyblR5cGUsIExUeXBlKiBwYXJhbVR5cGVzLCB1bnNpZ25lZCBwYXJhbUNvdW50LCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSkKK3sKKyAgICByZXR1cm4gTExWTUZ1bmN0aW9uVHlwZShy
ZXR1cm5UeXBlLCBwYXJhbVR5cGVzLCBwYXJhbUNvdW50LCB2YXJpYWRpY2l0eSA9PSBWYXJpYWRp
Yyk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1cm5UeXBl
LCBWYXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIHJldHVybiBm
dW5jdGlvblR5cGUocmV0dXJuVHlwZSwgMCwgMCwgdmFyaWFkaWNpdHkpOworfQorc3RhdGljIGlu
bGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0xLCBW
YXJpYWRpY2l0eSB2YXJpYWRpY2l0eSA9IE5vdFZhcmlhZGljKQoreworICAgIHJldHVybiBmdW5j
dGlvblR5cGUocmV0dXJuVHlwZSwgJnBhcmFtMSwgMSwgdmFyaWFkaWNpdHkpOworfQorc3RhdGlj
IGlubGluZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUgcGFyYW0x
LCBMVHlwZSBwYXJhbTIsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFkaWMpCit7
CisgICAgTFR5cGUgcGFyYW1UeXBlc1tdID0geyBwYXJhbTEsIHBhcmFtMiB9OworICAgIHJldHVy
biBmdW5jdGlvblR5cGUocmV0dXJuVHlwZSwgJnBhcmFtVHlwZXMsIDIsIHZhcmlhZGljaXR5KTsK
K30KKworc3RhdGljIGlubGluZSBMVmFsdWUgYWRkRnVuY3Rpb24oTE1vZHVsZSBtb2R1bGUsIGNv
bnN0IGNoYXIqIG5hbWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1BZGRGdW5jdGlvbihtb2R1
bGUsIG5hbWUsIHR5cGUpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0TGlua2FnZShMVmFsdWUg
Z2xvYmFsLCBMTGlua2FnZSBsaW5rYWdlKSB7IExMVk1TZXRMaW5rYWdlKGdsb2JhbCwgbGlua2Fn
ZSk7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBzZXRGdW5jdGlvbkNhbGxpbmdDb252KExWYWx1ZSBm
dW5jdGlvbiwgTENhbGxDb252IGNvbnZlbnRpb24pIHsgTExWTVNldEZ1bmN0aW9uQ2FsbENvbnYo
ZnVuY3Rpb24sIGNvbnZlbnRpb24pOyB9CisKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGFkZEV4dGVy
bkZ1bmN0aW9uKExNb2R1bGUgbW9kdWxlLCBjb25zdCBjaGFyKiBuYW1lLCBMVHlwZSB0eXBlKQor
eworICAgIExWYWx1ZSByZXN1bHQgPSBhZGRGdW5jdGlvbihtb2R1bGUsIG5hbWUsIHR5cGUpOwor
ICAgIHNldExpbmthZ2UocmVzdWx0LCBMTFZNRXh0ZXJuYWxMaW5rYWdlKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCiBzdGF0aWMgaW5saW5lIExWYWx1ZSBnZXRQYXJhbShMVmFsdWUgZnVuY3Rp
b24sIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBMTFZNR2V0UGFyYW0oZnVuY3Rpb24sIGluZGV4
KTsgfQogCiBlbnVtIEJpdEV4dGVuc2lvbiB7IFplcm9FeHRlbmQsIFNpZ25FeHRlbmQgfTsKQEAg
LTY3LDggKzExOCwxMiBAQCBzdGF0aWMgaW5saW5lIExCYXNpY0Jsb2NrIGluc2VydEJhc2ljQmxv
CiAKIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWxsb2NhKExCdWlsZGVyIGJ1aWxkZXIsIExU
eXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZEFsbG9jYShidWlsZGVyLCB0eXBlLCAiIik7IH0K
IHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWRkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZEFkZChidWlsZGVyLCBsZWZ0LCBy
aWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE11bChMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBMTFZNQnVpbGRNdWwoYnVp
bGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbmQo
TEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExW
TUJ1aWxkQW5kKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZh
bHVlIGJ1aWxkT3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkg
eyByZXR1cm4gTExWTUJ1aWxkT3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQogc3RhdGlj
IGlubGluZSBMVmFsdWUgYnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExW
YWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkWG9yKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAi
Iik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2hsKExCdWlsZGVyIGJ1aWxkZXIsIExW
YWx1ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZFNobChidWlsZGVyLCBs
ZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFTaHIoTEJ1aWxk
ZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxk
QVNocihidWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZExvYWQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHBvaW50ZXIpIHsgcmV0dXJuIExMVk1C
dWlsZExvYWQoYnVpbGRlciwgcG9pbnRlciwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBi
dWlsZFN0b3JlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIp
IHsgcmV0dXJuIExMVk1CdWlsZFN0b3JlKGJ1aWxkZXIsIHZhbHVlLCBwb2ludGVyKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRaRXh0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1
ZSwgTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkWkV4dChidWlsZGVyLCB2YWx1ZSwgdHlw
ZSwgIiIpOyB9CkBAIC03Niw2ICsxMzEsMjQgQEAgc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJ
bnRDYXN0KExCdWlsZAogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRJbnRUb1B0cihMQnVpbGRl
ciBidWlsZGVyLCBMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIExMVk1CdWlsZElu
dFRvUHRyKGJ1aWxkZXIsIHZhbHVlLCB0eXBlLCAiIik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkUHRyVG9JbnQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBl
KSB7IHJldHVybiBMTFZNQnVpbGRQdHJUb0ludChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9
CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZElDbXAoTEJ1aWxkZXIgYnVpbGRlciwgTEludFBy
ZWRpY2F0ZSBjb25kLCBMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBMTFZNQnVp
bGRJQ21wKGJ1aWxkZXIsIGNvbmQsIGxlZnQsIHJpZ2h0LCAiIik7IH0KK3N0YXRpYyBpbmxpbmUg
TFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1
ZSogYXJncywgdW5zaWduZWQgbnVtQXJncykKK3sKKyAgICByZXR1cm4gTExWTUJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgbnVtQXJncywgIiIpOworfQorc3RhdGljIGlubGluZSBM
VmFsdWUgYnVpbGRDYWxsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBmdW5jdGlvbikKK3sKKyAg
ICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAwLCAwKTsKK30KK3N0YXRpYyBp
bmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24s
IExWYWx1ZSBhcmcxKQoreworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRlciwgZnVuY3Rpb24s
ICZhcmcxLCAxKTsKK30KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ2FsbChMQnVpbGRlciBi
dWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikKK3sKKyAg
ICBMVmFsdWUgYXJnc1tdID0geyBhcmcxLCBhcmcyIH07CisgICAgcmV0dXJuIGJ1aWxkQ2FsbChi
dWlsZGVyLCBmdW5jdGlvbiwgYXJncywgMik7Cit9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZEV4dHJhY3RWYWx1ZShMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgYWdnVmFsLCB1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gTExWTUJ1aWxkRXh0cmFjdFZhbHVlKGJ1aWxkZXIsIGFnZ1ZhbCwgaW5k
ZXgsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRTZWxlY3QoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGNvbmRpdGlvbiwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsg
cmV0dXJuIExMVk1CdWlsZFNlbGVjdChidWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtl
biwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEJyKExCdWlsZGVyIGJ1aWxkZXIs
IExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IHJldHVybiBMTFZNQnVpbGRCcihidWlsZGVyLCBk
ZXN0aW5hdGlvbik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQ29uZEJyKExCdWlsZGVy
IGJ1aWxkZXIsIExWYWx1ZSBjb25kaXRpb24sIExCYXNpY0Jsb2NrIHRha2VuLCBMQmFzaWNCbG9j
ayBub3RUYWtlbikgeyByZXR1cm4gTExWTUJ1aWxkQ29uZEJyKGJ1aWxkZXIsIGNvbmRpdGlvbiwg
dGFrZW4sIG5vdFRha2VuKTsgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
YXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTQ3MjY0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1
MCw3IEBAIGJvb2wgY2FuQ29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICAgICAgY2Fz
ZSBVbnR5cGVkVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgSW50MzJVc2U6CiAgICAgICAgICAg
ICAgICAgY2FzZSBLbm93bkludDMyVXNlOgorICAgICAgICAgICAgICAgIGNhc2UgQm9vbGVhblVz
ZToKICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtNzAsOCArNzEsMjYgQEAg
Ym9vbCBjYW5Db21waWxlKEdyYXBoJiBncmFwaCkKICAgICAgICAgICAgIGNhc2UgUGhhbnRvbUxv
Y2FsOgogICAgICAgICAgICAgY2FzZSBTZXRBcmd1bWVudDoKICAgICAgICAgICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICAgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgICAgICBjYXNlIEJpdE9yOgor
ICAgICAgICAgICAgY2FzZSBCaXRSU2hpZnQ6CisgICAgICAgICAgICBjYXNlIEJpdExTaGlmdDoK
ICAgICAgICAgICAgICAgICAvLyBUaGVzZSBhcmUgT0suCiAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFZhbHVlQWRkOgorICAgICAgICAgICAgY2FzZSBBcml0aEFkZDoK
KyAgICAgICAgICAgIGNhc2UgQXJpdGhNdWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmJp
bmFyeVVzZUtpbmQoKSA9PSBJbnQzMlVzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBDb21wYXJlTGVz
czoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNCaW5hcnlVc2VLaW5kKEludDMyVXNlKSkK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMSgpLnVzZUtpbmQoKSA9PSBCb29sZWFuVXNlKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgICAgIC8vIERvbid0IGtub3cgaG93IHRvIGhhbmRsZSBhbnl0aGluZyBlbHNl
LgogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxNDcyNzEpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNjQsOSArNjQsOSBAQCBwdWJsaWM6CiAgICAgICAgIENTdHJpbmcgbmFtZSA9
IHRvQ1N0cmluZyhjb2RlQmxvY2soKS0+aGFzaCgpKTsKICAgICAgICAgbV9mdGxTdGF0ZS5tb2R1
bGUgPSBMTFZNTW9kdWxlQ3JlYXRlV2l0aE5hbWUobmFtZS5kYXRhKCkpOwogICAgICAgICAKLSAg
ICAgICAgTFR5cGUgYXJndW1lbnRUeXBlc1tdID0geyBtX291dC5pbnRQdHIgfTsKLSAgICAgICAg
bV9mdGxTdGF0ZS5mdW5jdGlvbiA9IExMVk1BZGRGdW5jdGlvbihtX2Z0bFN0YXRlLm1vZHVsZSwg
bmFtZS5kYXRhKCksIExMVk1GdW5jdGlvblR5cGUobV9vdXQuaW50NjQsIGFyZ3VtZW50VHlwZXMs
IDEsIGZhbHNlKSk7Ci0gICAgICAgIExMVk1TZXRGdW5jdGlvbkNhbGxDb252KG1fZnRsU3RhdGUu
ZnVuY3Rpb24sIExMVk1DQ2FsbENvbnYpOworICAgICAgICBtX2Z0bFN0YXRlLmZ1bmN0aW9uID0g
YWRkRnVuY3Rpb24oCisgICAgICAgICAgICBtX2Z0bFN0YXRlLm1vZHVsZSwgbmFtZS5kYXRhKCks
IGZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCwgbV9vdXQuaW50UHRyKSk7CisgICAgICAgIHNldEZ1
bmN0aW9uQ2FsbGluZ0NvbnYobV9mdGxTdGF0ZS5mdW5jdGlvbiwgTExWTUNDYWxsQ29udik7CiAg
ICAgICAgIAogICAgICAgICBtX291dC5pbml0aWFsaXplKG1fZnRsU3RhdGUuZnVuY3Rpb24pOwog
ICAgICAgICAKQEAgLTE4OCwxOSArMTg4LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAg
ICBMQmFzaWNCbG9jayBsb3dCbG9jayA9IG1fYmxvY2tzLmdldChtX2hpZ2hCbG9jayk7CiAgICAg
ICAgIAotICAgICAgICBCYXNpY0Jsb2NrKiBuZXh0SGlnaEJsb2NrID0gMDsKKyAgICAgICAgbV9u
ZXh0SGlnaEJsb2NrID0gMDsKICAgICAgICAgZm9yIChCbG9ja0luZGV4IG5leHRCbG9ja0luZGV4
ID0gYmxvY2tJbmRleCArIDE7IG5leHRCbG9ja0luZGV4IDwgbV9ncmFwaC5tX2Jsb2Nrcy5zaXpl
KCk7ICsrbmV4dEJsb2NrSW5kZXgpIHsKLSAgICAgICAgICAgIG5leHRIaWdoQmxvY2sgPSBtX2dy
YXBoLm1fYmxvY2tzW25leHRCbG9ja0luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIGlmIChuZXh0
SGlnaEJsb2NrKQorICAgICAgICAgICAgbV9uZXh0SGlnaEJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nr
c1tuZXh0QmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAobV9uZXh0SGlnaEJsb2Nr
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IG5leHRMb3dCbG9jayA9IG5leHRIaWdoQmxvY2sgPyBtX2Jsb2Nrcy5nZXQobmV4dEhpZ2hCbG9j
aykgOiAwOworICAgICAgICBtX25leHRMb3dCbG9jayA9IG1fbmV4dEhpZ2hCbG9jayA/IG1fYmxv
Y2tzLmdldChtX25leHRIaWdoQmxvY2spIDogMDsKICAgICAgICAgCiAgICAgICAgIC8vIEFsbCBv
ZiB0aGlzIGVmZm9ydCB0byBmaW5kIHRoZSBuZXh0IGJsb2NrIGdpdmVzIHVzIHRoZSBhYmlsaXR5
IHRvIGtlZXAgdGhlCiAgICAgICAgIC8vIGdlbmVyYXRlZCBJUiBpbiByb3VnaGx5IHByb2dyYW0g
b3JkZXIuIFRoaXMgb3VnaHQgbm90IGFmZmVjdCB0aGUgcGVyZm9ybWFuY2UKICAgICAgICAgLy8g
b2YgdGhlIGdlbmVyYXRlZCBjb2RlIChzaW5jZSB3ZSBleHBlY3QgTExWTSB0byByZW9yZGVyIHRo
aW5ncykgYnV0IGl0IHdpbGwKICAgICAgICAgLy8gbWFrZSBJUiBkdW1wcyBlYXNpZXIgdG8gcmVh
ZC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obG93QmxvY2ssIG5leHRMb3dCbG9jayk7CisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGxvd0Jsb2NrLCBtX25leHRMb3dCbG9jayk7CiAgICAgICAgIAog
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHRyYWNrIHRoZSBPU1Igc2l0dWF0aW9uIGhlcmUu
CiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTM2
MjMKQEAgLTI1MSw2ICsyNTEsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBSZXR1cm46CiAg
ICAgICAgICAgICBjb21waWxlUmV0dXJuKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBBcml0aEFkZDoKKyAgICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIGNvbXBp
bGVBZGQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoTXVsOgorICAg
ICAgICAgICAgY29tcGlsZUFyaXRoTXVsKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBCaXRBbmQ6CisgICAgICAgICAgICBjb21waWxlQml0QW5kKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgICAgIGNvbXBpbGVCaXRPcigpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICAgICAg
Y29tcGlsZUJpdFJTaGlmdCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQml0
TFNoaWZ0OgorICAgICAgICAgICAgY29tcGlsZUJpdExTaGlmdCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAgICAgICAgICBjb21waWxlQ29tcGFy
ZUxlc3MoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgICAgIGNvbXBpbGVCcmFuY2goKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZh
dWx0OgogICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
ICAgIGJyZWFrOwpAQCAtMzg2LDE3ICs0MTEsMTM3IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0
LnJldChsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpKTsKICAgICB9CiAgICAgCisgICAgdm9p
ZCBjb21waWxlQWRkKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VL
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxl
ZnQgPSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdo
dCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobm9kZUNhblRydW5jYXRlSW50ZW5nZXIobV9ub2RlLT5hcml0aE5vZGVGbGFncygpKSkg
eworICAgICAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgbV9vdXQuYWRkKGxl
ZnQsIHJpZ2h0KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5hZGRXaXRoT3ZlcmZs
b3czMihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAs
IG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQsIDEpKTsKKyAgICAgICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKG1fbm9kZSwgbV9vdXQuZXh0cmFjdFZhbHVlKHJlc3VsdCwgMCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5iaW5hcnlVc2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBJbnQzMlVzZTogeworICAgICAgICAgICAgTFZhbHVlIGxlZnQgPSBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgIExWYWx1ZSByaWdodCA9IGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0Owor
ICAgICAgICAgICAgaWYgKG5vZGVDYW5UcnVuY2F0ZUludGVnZXIobm9kZS0+YXJpdGhOb2RlRmxh
Z3MoKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQubXVsKGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExWYWx1ZSBvdmVyZmxvd1Jlc3Vs
dCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAg
ICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jl
c3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1fb3V0LmV4dHJhY3RWYWx1ZShv
dmVyZmxvd1Jlc3VsdCwgMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhub2RlLT5hcml0aE5vZGVGbGFncygp
KSkgeworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dDYXNlID0gbV9vdXQubmV3Qmxv
Y2soKTsKKyAgICAgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBtX291dC5u
ZXdCbG9jaygpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIExCYXNpY0Jsb2Nr
KiBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dDYXNlLCBjb250aW51YXRpb24pOworICAg
ICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdhdGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFu
KGxlZnQsIG1fb3V0LmludDMyWmVybykpOworICAgICAgICAgICAgICAgIHNwZWN1bGF0ZShOZWdh
dGl2ZVplcm8sIDAsIDAsIG1fb3V0Lmxlc3NUaGFuKHJpZ2h0LCBtX291dC5pbnQzMlplcm8pKTsK
KyAgICAgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAgICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKG1fbm9kZSwgcmVz
dWx0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVCaXRBbmQoKQorICAgIHsKKyAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCisgICAgICAgICAg
ICBtX25vZGUsIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93SW50
MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQml0
T3IoKQorICAgIHsKKyAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCisgICAgICAgICAgICBtX25v
ZGUsIG1fb3V0LmJpdE9yKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRSU2hpZnQo
KQorICAgIHsKKyAgICAgICAgbV9pbnQzMlZhbHVlcy5hZGQoCisgICAgICAgICAgICBtX25vZGUs
CisgICAgICAgICAgICBtX291dC5hU2hyKAorICAgICAgICAgICAgICAgIGxvd0ludDMyKG1fbm9k
ZS0+Y2hpbGQxKCkpLAorICAgICAgICAgICAgICAgIG1fb3V0LmJpdEFuZChsb3dJbnQzMihtX25v
ZGUtPmNoaWxkMigpKSwgbV9vdXQuY29uc3RJbnQzMigzMSkpKSk7CisgICAgfQorICAgIAorICAg
IHZvaWQgY29tcGlsZUJpdExTaGlmdCgpCisgICAgeworICAgICAgICBtX2ludDMyVmFsdWVzLmFk
ZCgKKyAgICAgICAgICAgIG1fbm9kZSwKKyAgICAgICAgICAgIG1fb3V0LnNobCgKKyAgICAgICAg
ICAgICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX291
dC5iaXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEp
KSkpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVDb21wYXJlTGVzcygpCisgICAgewor
ICAgICAgICBpZiAobV9ub2RlLT5pc0JpbmFyeVVzZUtpbmQoSW50MzJVc2UpKSB7CisgICAgICAg
ICAgICBtX2Jvb2xlYW5WYWx1ZXMuYWRkKAorICAgICAgICAgICAgICAgIG1fbm9kZSwKKyAgICAg
ICAgICAgICAgICBtX291dC5sZXNzVGhhbihsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwgbG93
SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBjb21waWxlQnJhbmNoKCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
bV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBCb29sZWFuVXNlOiB7
CisgICAgICAgICAgICBtX291dC5icmFuY2goCisgICAgICAgICAgICAgICAgbG93Qm9vbGVhbiht
X25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5t
X2Jsb2Nrc1ttX25vZGUtPnRha2VuQmxvY2tJbmRleCgpXS5nZXQoKSksCisgICAgICAgICAgICAg
ICAgbV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbbV9ub2RlLT5ub3RUYWtlbkJsb2NrSW5k
ZXgoKV0uZ2V0KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKICAgICB2
b2lkIHNwZWN1bGF0ZUJhY2t3YXJkKEV4aXRLaW5kLCBMVmFsdWUsIE5vZGUqLCBMVmFsdWUgZmFp
bENvbmRpdGlvbikKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGZhaWxDYXNlID0gbV9vdXQu
bmV3QmxvY2soKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gbV9vdXQubmV3
QmxvY2soKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaChmYWlsQ29uZGl0aW9uLCBm
YWlsQ2FzZSwgY29udGludWF0aW9uKTsKLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oZmFpbENhc2Up
OworICAgICAgICBMQmFzaWNCbG9jayogbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhmYWlsQ2Fz
ZSwgY29udGludWF0aW9uKTsKICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBPU1IgZXhpdC4K
ICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYy
MwogICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOwotICAgICAgICBtX291dC5hcHBlbmRUbyhj
b250aW51YXRpb24pOworICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVGb3J3YXJkKEV4aXRLaW5kIGtp
bmQsIExWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlv
bikKQEAgLTYyMCw2ICs3NjUsOCBAQCBwcml2YXRlOgogICAgIAogICAgIEFic3RyYWN0U3RhdGUg
bV9zdGF0ZTsKICAgICBCYXNpY0Jsb2NrKiBtX2hpZ2hCbG9jazsKKyAgICBCYXNpY0Jsb2NrKiBt
X25leHRIaWdoQmxvY2s7CisgICAgTEJhc2ljQmxvY2sgbV9uZXh0TG93QmxvY2s7CiAgICAgTm9k
ZSogbV9ub2RlOwogICAgIFNwZWN1bGF0aW9uRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkocmV2aXNpb24gMTQ3MjY0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzAsNiArNzAsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9idWlsZGVyKExMVk1DcmVhdGVC
dWlsZGVyKCkpCiAgICAgICAgICwgbV9ibG9jaygwKQogICAgICAgICAsIG1fbmV4dEJsb2NrKDAp
CisgICAgICAgICwgbV9hZGRXaXRoT3ZlcmZsb3czMigwKQogICAgIHsKICAgICB9CiAgICAgCkBA
IC03OCwyMiArNzksMjEgQEAgcHVibGljOgogICAgICAgICBMTFZNRGlzcG9zZUJ1aWxkZXIobV9i
dWlsZGVyKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBpbml0aWFsaXplKExWYWx1ZSBmdW5jdGlv
bikKKyAgICB2b2lkIGluaXRpYWxpemUoTE1vZHVsZSBtb2R1bGUsIExWYWx1ZSBmdW5jdGlvbikK
ICAgICB7CisgICAgICAgIG1fbW9kdWxlID0gbW9kdWxlOwogICAgICAgICBtX2Z1bmN0aW9uID0g
ZnVuY3Rpb247CiAgICAgfQogICAgIAotICAgIC8vIFVzZSB0aGlzIG1ldGhvZCB3aGVuIHlvdSdy
ZSBzdGFydGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIGEgaGlnaC1sZXZlbAotICAgIC8vIGJhc2lj
IGJsb2NrLgotICAgIHZvaWQgYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ssIExCYXNpY0Jsb2Nr
IG5leHRCbG9jaykKKyAgICBMQmFzaWNCbG9jayogYXBwZW5kVG8oTEJhc2ljQmxvY2sgYmxvY2ss
IExCYXNpY0Jsb2NrIG5leHRCbG9jaykKICAgICB7CisgICAgICAgIExCYXNpY0Jsb2NrKiBsYXN0
TmV4dEJsb2NrID0gbV9uZXh0QmxvY2s7CiAgICAgICAgIG1fbmV4dEJsb2NrID0gbmV4dEJsb2Nr
OwogICAgICAgICAKICAgICAgICAgYXBwZW5kVG8oYmxvY2spOworICAgICAgICByZXR1cm4gbGFz
dE5leHRCbG9jazsKICAgICB9CiAgICAgCi0gICAgLy8gVXNlIG5ld0Jsb2NrKCkgYW5kIGFwcGVu
ZFRvKCkgaWYgeW91J3JlIHNwbGl0dGluZyB0aGUgaGlnaC1sZXZlbCBiYXNpYwotICAgIC8vIGJs
b2NrIGludG8gbXVsdGlwbGUgbG93LWxldmVsIGJhc2ljIGJsb2Nrcy4KICAgICB2b2lkIGFwcGVu
ZFRvKExCYXNpY0Jsb2NrIGJsb2NrKQogICAgIHsKICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpA
QCAtMTE0LDggKzExNCwyMSBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNvbnN0SW50NjQoaW50NjRf
dCB2YWx1ZSkgeyByZXR1cm4gY29uc3RJbnQoaW50NjQsIHZhbHVlLCBTaWduRXh0ZW5kKTsgfQog
ICAgIAogICAgIExWYWx1ZSBhZGQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4g
YnVpbGRBZGQobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbXVsKExWYWx1
ZSBsZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIGJ1aWxkTXVsKG1fYnVpbGRlciwgbGVmdCwg
cmlnaHQpOyB9CiAgICAgTFZhbHVlIGJpdEFuZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBidWlsZEFuZChtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBi
aXRPcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZE9yKG1fYnVpbGRl
ciwgbGVmdCwgcmlnaHQpOyB9CiAgICAgTFZhbHVlIGJpdFhvcihMVmFsdWUgbGVmdCwgTFZhbHVl
IHJpZ2h0KSB7IHJldHVybiBidWlsZFhvcihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAg
IExWYWx1ZSBzaGwoTFZhbGV1IGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRTaGwo
bV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYVNocihMVmFsZXUgbGVmdCwg
TFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFTaHIobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7
IH0KKyAgICAKKyAgICBMVmFsdWUgYWRkV2l0aE92ZXJmbG93MzIoTFZhbHVlIGxlZnQsIExWYWx1
ZSByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBhZGRX
aXRoT3ZlcmZsb3czMigpLCBsZWZ0LCByaWdodCk7CisgICAgfQorICAgIExWYWx1ZSBtdWxXaXRo
T3ZlcmZsb3czMihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGJ1aWxkQ2FsbChtX2J1aWxkZXIsIG11bFdpdGhPdmVyZmxvdzMyKCksIGxlZnQsIHJpZ2h0
KTsKKyAgICB9CiAgICAgCiAgICAgTFZhbHVlIHplcm9FeHQoTFZhbHVlIHZhbHVlLCBMVHlwZSB0
eXBlKSB7IHJldHVybiBidWlsZFpFeHQobV9idWlsZGVyLCB2YWx1ZSwgdHlwZSk7IH0KICAgICBM
VmFsdWUgaW50Q2FzdChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkSW50
Q2FzdChtX2J1aWxkZXIsIHZhbHVlLCB0eXBlKTsgfQpAQCAtMTU2LDYgKzE2OSw3IEBAIHB1Ymxp
YzoKICAgICBMVmFsdWUgdGVzdE5vblplcm82NChMVmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7
IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVlLCBtYXNrKSk7IH0KICAgICAKICAgICBMVmFs
dWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsg
cmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwgdmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0K
KyAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CiAg
ICAgCiAgICAgdm9pZCBqdW1wKExCYXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9i
dWlsZGVyLCBkZXN0aW5hdGlvbik7IH0KICAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9u
LCBMQmFzaWNCbG9jayB0YWtlbiwgTEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgYnVpbGRDb25kQnIo
bV9idWlsZGVyLCBjb25kaXRpb24sIHRha2VuLCBub3RUYWtlbik7IH0KQEAgLTE2Myw2ICsxNzcs
MjggQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IGJ1aWxkVW5yZWFj
aGFibGUobV9idWlsZGVyKTsgfQogICAgIAorICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3czMigp
CisgICAgeworICAgICAgICBpZiAoIW1fYWRkV2l0aE92ZXJmbG93MzIpIHsKKyAgICAgICAgICAg
IG1fYWRkV2l0aE92ZXJmbG93MzIgPSBhZGRFeHRlcm5GdW5jdGlvbigKKyAgICAgICAgICAgICAg
ICBtX21vZHVsZSwgImxsdm0uc2FkZC53aXRoLm92ZXJmbG93LmkzMiIsCisgICAgICAgICAgICAg
ICAgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUoaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIp
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fYWRkV2l0aE92ZXJmbG93
MzI7CisgICAgfQorICAgIAorICAgIExWYWx1ZSBtdWxXaXRoT3ZlcmZsb3czMigpCisgICAgewor
ICAgICAgICBpZiAoIW1fbXVsV2l0aE92ZXJmbG93MzIpIHsKKyAgICAgICAgICAgIG1fbXVsV2l0
aE92ZXJmbG93MzIgPSBhZGRFeHRlcm5GdW5jdGlvbigKKyAgICAgICAgICAgICAgICBtX21vZHVs
ZSwgImxsdm0uc211bC53aXRoLm92ZXJmbG93LmkzMiIsCisgICAgICAgICAgICAgICAgZnVuY3Rp
b25UeXBlKHN0cnVjdFR5cGUoaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50MzIpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fYWRkV2l0aE92ZXJmbG93MzI7CisgICAg
fQorICAgIAogICAgIGNvbnN0IExUeXBlIGJvb2xlYW47CiAgICAgY29uc3QgTFR5cGUgaW50MzI7
CiAgICAgY29uc3QgTFR5cGUgaW50NjQ7CkBAIC0xNzUsMTEgKzIxMSwxNiBAQCBwdWJsaWM6CiAg
ICAgY29uc3QgTFZhbHVlIGludDMyWmVybzsKICAgICBjb25zdCBMVmFsdWUgaW50NjRaZXJvOwog
ICAgIGNvbnN0IExWYWx1ZSBpbnRQdHJaZXJvOwotCisgICAgCisgICAgTE1vZHVsZSBtX21vZHVs
ZTsKICAgICBMVmFsdWUgbV9mdW5jdGlvbjsKICAgICBMQnVpbGRlciBtX2J1aWxkZXI7CiAgICAg
TEJhc2ljQmxvY2sgbV9ibG9jazsKICAgICBMQmFzaWNCbG9jayBtX25leHRCbG9jazsKKworcHJp
dmF0ZToKKyAgICBMVmFsdWUgbV9hZGRXaXRoT3ZlcmZsb3czMjsKKyAgICBMVmFsdWUgbV9tdWxX
aXRoT3ZlcmZsb3czMjsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>195844</attachid>
            <date>2013-03-29 23:52:26 -0700</date>
            <delta_ts>2013-03-30 16:57:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36642</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQ3MjczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDEzLTAzLTI5ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
Zm91cnRoVGllcjogRlRMIEpJVCBzaG91bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBNYXJzYWds
aWEgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExMzYzNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorICAgICAgICAKKyAgICAgICAgSnVzdCBhZGRpbmcgbWlzc2luZyBmdW5jdGlvbmFs
aXR5LgorICAgICAgICAKKyAgICAgICAgQWxzbyAiZml4ZWQiIE9TUiBleGl0IHRvIHVzZSBhIGNh
bGwgdG8gYWJvcnQoKSBpbiBhZGRpdGlvbiB0byB1c2luZyBVbnJlYWNoYWJsZQorICAgICAgICBz
aW5jZSB0aGUgbGF0dGVyIGRvZXNuJ3QgYWN0dWFsbHkgbWVhbiB0cmFwIC0gcXVpdGUgdGhlIG9w
cG9zaXRlLCBpdCB0ZWxscyBMTFZNCisgICAgICAgIHRoYXQgdGhlIGNvZGUgY2FuIG5ldmVyIGJl
IHJlYWNoZWQuCisgICAgICAgIAorICAgICAgICBUaGUgTWFyc2FnbGlhIGZ1bmN0aW9uIHJ1bnMg
fjYwJSBmYXN0ZXIgd2l0aCBGVEwsIHRoYW4gREZHLiBOb3QgYSB0ZXJyaWJsZSBzdGFydC4KKwor
ICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogZnRsL0ZUTEFiYnJldmlhdGlvbnMuaDoKKyAgICAgICAgKEZUTCk6CisgICAgICAgIChK
U0M6OkZUTDo6dm9pZFR5cGUpOgorICAgICAgICAoSlNDOjpGVEw6OnN0cnVjdFR5cGUpOgorICAg
ICAgICAoSlNDOjpGVEw6OmZ1bmN0aW9uVHlwZSk6CisgICAgICAgIChKU0M6OkZUTDo6YWRkRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpGVEw6OnNldExpbmthZ2UpOgorICAgICAgICAoSlNDOjpG
VEw6OnNldEZ1bmN0aW9uQ2FsbGluZ0NvbnYpOgorICAgICAgICAoSlNDOjpGVEw6OmFkZEV4dGVy
bkZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6RlRMOjpjb25zdEludFRvUHRyKToKKyAgICAgICAg
KEpTQzo6RlRMOjpjb25zdEJpdENhc3QpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkTXVsKToK
KyAgICAgICAgKEpTQzo6RlRMOjpidWlsZE9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpidWlsZFNo
bCk6CisgICAgICAgIChKU0M6OkZUTDo6YnVpbGRBU2hyKToKKyAgICAgICAgKEpTQzo6RlRMOjpi
dWlsZENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OmJ1aWxkRXh0cmFjdFZhbHVlKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpkdW1wTW9kdWxlKToKKyAgICAgICAgKEpTQzo6RlRMOjp2ZXJpZnlNb2R1
bGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpG
VEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjb21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChK
U0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCbG9jayk6CisgICAgICAgIChKU0M6OkZU
TDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUFkZCk6CisgICAgICAgIChMb3dlckRGR1RvTExWTSk6CisgICAg
ICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVBcml0aE11bCk6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVCaXRBbmQpOgorICAgICAgICAoSlND
OjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6
Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQml0UlNoaWZ0KToKKyAgICAgICAgKEpTQzo6RlRMOjpM
b3dlckRGR1RvTExWTTo6Y29tcGlsZUJpdExTaGlmdCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVDb21wYXJlTGVzcyk6CisgICAgICAgIChKU0M6OkZUTDo6TG93
ZXJERkdUb0xMVk06OmNvbXBpbGVCcmFuY2gpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpzcGVjdWxhdGVCYWNrd2FyZCk6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdU
b0xMVk06Omxvd0Jvb2xlYW4pOgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAg
KEpTQzo6RlRMOjpPdXRwdXQ6Ok91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpp
bml0aWFsaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFwcGVuZFRvKToKKyAgICAg
ICAgKE91dHB1dCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjptdWwpOgorICAgICAgICAo
SlNDOjpGVEw6Ok91dHB1dDo6Yml0T3IpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6c2hs
KToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmFTaHIpOgorICAgICAgICAoSlNDOjpGVEw6
Ok91dHB1dDo6YWRkV2l0aE92ZXJmbG93MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6
bXVsV2l0aE92ZXJmbG93MzIpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZXh0cmFjdFZh
bHVlKToKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmNhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Ok91dHB1dDo6YWRkV2l0aE92ZXJmbG93MzJGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkZU
TDo6T3V0cHV0OjptdWxXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uKToKKyAgICAgICAgKiBmdGwvRlRM
U3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEZUTCk6CisgICAgICAgIChKU0M6OkZUTDo6U3Rh
dGU6OmR1bXBTdGF0ZSk6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgIChTdGF0
ZSk6CisKIDIwMTMtMDMtMjkgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkLCByZWxlYXNlIG1vZGUgYnVpbGQgZml4LgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE0NzI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0yOTIsNiArMjkyLDcgQEAKIAkJMEZFQTBBMTExNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TE91dHB1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRUEwQTEyMTcwNTEzREIwMEJCNzIy
QyAvKiBGVExTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTFN0YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZFQTBBMTQxNzA2MzYzNjAw
QkI3MjJDIC8qIEZUTExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEExMzE3MDYzNjM2MDBCQjcyMkMgLyogRlRMTExWTUhlYWRl
cnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RkVBMEExNjE3MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMTUxNzA2QkI5MDAwQkI3MjJDIC8q
IEZUTFN0YXRlLmNwcCAqLzsgfTsKIAkJMEZFQjNFQ0QxNjIzN0Y0RDAwQUI2N0FEIC8qIFR5cGVk
QXJyYXlEZXNjcmlwdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDQjE2MjM3RjQ3MDBBQjY3QUQgLyogVHlwZWRBcnJheURlc2NyaXB0b3Iu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkVC
M0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLzsgfTsKIAkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUz
IC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRkM5QTcxNjgxQTNCMDAwNTY3RjUzIC8qIERGR09T
UkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwICovOyB9OwpAQCAtMTIyMCw2ICsxMjIxLDcgQEAKIAkJ
MEZFQTBBMDYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTE91dHB1dC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBGVExPdXRwdXQuaDsgcGF0aCA9IGZ0bC9GVExPdXRwdXQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMDcxNzA1MTNEQjAwQkI3MjJDIC8qIEZU
TFN0YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFN0YXRlLmg7IHBh
dGggPSBmdGwvRlRMU3RhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBB
MTMxNzA2MzYzNjAwQkI3MjJDIC8qIEZUTExMVk1IZWFkZXJzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEZUTExMVk1IZWFkZXJzLmg7IHBhdGggPSBmdGwvRlRMTExWTUhlYWRl
cnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQTBBMTUxNzA2QkI5MDAwQkI3
MjJDIC8qIEZUTFN0YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEZUTFN0YXRlLmNwcDsgcGF0aCA9IGZ0bC9GVExTdGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUIzRUNCMTYyMzdGNDcwMEFCNjdBRCAvKiBUeXBlZEFycmF5RGVzY3Jp
cHRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUeXBlZEFycmF5RGVzY3Jp
cHRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkVGQzlBNzE2ODFBM0IwMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdPU1JFeGl0SnVtcFBs
YWNlaG9sZGVyLmNwcDsgcGF0aCA9IGRmZy9ERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTIwMDAsNiArMjAwMiw3IEBACiAJCQkJMEZF
QTBBMDQxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCAqLywKIAkJCQkw
RkVBMEEwNTE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCAqLywKIAkJCQkw
RkVBMEEwNjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMT3V0cHV0LmggKi8sCisJCQkJMEZFQTBBMTUx
NzA2QkI5MDAwQkI3MjJDIC8qIEZUTFN0YXRlLmNwcCAqLywKIAkJCQkwRkVBMEEwNzE3MDUxM0RC
MDBCQjcyMkMgLyogRlRMU3RhdGUuaCAqLywKIAkJCSk7CiAJCQluYW1lID0gZnRsOwpAQCAtMzk0
Miw2ICszOTQ1LDcgQEAKIAkJCQkwRjc2NkQyODE1QThDQzFFMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NjZEMkIxNUE4Q0MzODAwOEYzNjNFIC8q
IEpJVFN0dWJSb3V0aW5lU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QTIzRDc1MEY0RTFB
QkIwMDIzQ0RBRCAvKiBKSVRTdHVicy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVBMEExNjE3
MDZCQjkwMDBCQjcyMkMgLyogRlRMU3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1RUY5
MUUxNjg3OEY3QTAwM0U1QzI1IC8qIEpJVFRodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MDU2NkM0MTA3RUMyNTUwMDVEQkM4RCAvKiBKU0FQSVZhbHVlV3JhcHBlci5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJicmV2
aWF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQWJi
cmV2aWF0aW9ucy5oCShyZXZpc2lvbiAxNDcyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEFiYnJldmlhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNDUsMTEgKzQ1LDE0IEBA
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogdHlwZWRlZiBMTFZNQmFzaWNCbG9j
a1JlZiBMQmFzaWNCbG9jazsKIHR5cGVkZWYgTExWTUJ1aWxkZXJSZWYgTEJ1aWxkZXI7Cit0eXBl
ZGVmIExMVk1DYWxsQ29udiBMQ2FsbENvbnY7CiB0eXBlZGVmIExMVk1JbnRQcmVkaWNhdGUgTElu
dFByZWRpY2F0ZTsKK3R5cGVkZWYgTExWTUxpbmthZ2UgTExpbmthZ2U7CiB0eXBlZGVmIExMVk1N
b2R1bGVSZWYgTE1vZHVsZTsKIHR5cGVkZWYgTExWTVR5cGVSZWYgTFR5cGU7CiB0eXBlZGVmIExM
Vk1WYWx1ZVJlZiBMVmFsdWU7CiAKK3N0YXRpYyBpbmxpbmUgTFR5cGUgdm9pZFR5cGUoKSB7IHJl
dHVybiBMTFZNVm9pZFR5cGUoKTsgfQogc3RhdGljIGlubGluZSBMVHlwZSBpbnQxVHlwZSgpIHsg
cmV0dXJuIExMVk1JbnQxVHlwZSgpOyB9CiBzdGF0aWMgaW5saW5lIExUeXBlIGludDMyVHlwZSgp
IHsgcmV0dXJuIExMVk1JbnQzMlR5cGUoKTsgfQogc3RhdGljIGlubGluZSBMVHlwZSBpbnQ2NFR5
cGUoKSB7IHJldHVybiBMTFZNSW50NjRUeXBlKCk7IH0KQEAgLTU3LDE4ICs2MCw3MyBAQCBzdGF0
aWMgaW5saW5lIExUeXBlIGludFB0clR5cGUoKSB7IHJldHVyCiAKIHN0YXRpYyBpbmxpbmUgTFR5
cGUgcG9pbnRlclR5cGUoTFR5cGUgdHlwZSkgeyByZXR1cm4gTExWTVBvaW50ZXJUeXBlKHR5cGUs
IDApOyB9CiAKK2VudW0gUGFja2luZ01vZGUgeyBOb3RQYWNrZWQsIFBhY2tlZCB9Oworc3RhdGlj
IGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExUeXBlKiBlbGVtZW50VHlwZXMsIHVuc2lnbmVkIGVs
ZW1lbnRDb3VudCwgUGFja2luZ01vZGUgcGFja2luZyA9IE5vdFBhY2tlZCkKK3sKKyAgICByZXR1
cm4gTExWTVN0cnVjdFR5cGUoZWxlbWVudFR5cGVzLCBlbGVtZW50Q291bnQsIHBhY2tpbmcgPT0g
UGFja2VkKTsKK30KK3N0YXRpYyBpbmxpbmUgTFR5cGUgc3RydWN0VHlwZShQYWNraW5nTW9kZSBw
YWNraW5nID0gTm90UGFja2VkKQoreworICAgIHJldHVybiBzdHJ1Y3RUeXBlKDAsIDAsIHBhY2tp
bmcpOworfQorc3RhdGljIGlubGluZSBMVHlwZSBzdHJ1Y3RUeXBlKExUeXBlIGVsZW1lbnQxLCBQ
YWNraW5nTW9kZSBwYWNraW5nID0gTm90UGFja2VkKQoreworICAgIHJldHVybiBzdHJ1Y3RUeXBl
KCZlbGVtZW50MSwgMSwgcGFja2luZyk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIHN0cnVjdFR5
cGUoTFR5cGUgZWxlbWVudDEsIExUeXBlIGVsZW1lbnQyLCBQYWNraW5nTW9kZSBwYWNraW5nID0g
Tm90UGFja2VkKQoreworICAgIExUeXBlIGVsZW1lbnRzW10gPSB7IGVsZW1lbnQxLCBlbGVtZW50
MiB9OworICAgIHJldHVybiBzdHJ1Y3RUeXBlKGVsZW1lbnRzLCAyLCBwYWNraW5nKTsKK30KKwor
ZW51bSBWYXJpYWRpY2l0eSB7IE5vdFZhcmlhZGljLCBWYXJpYWRpYyB9Oworc3RhdGljIGlubGlu
ZSBMVHlwZSBmdW5jdGlvblR5cGUoTFR5cGUgcmV0dXJuVHlwZSwgTFR5cGUqIHBhcmFtVHlwZXMs
IHVuc2lnbmVkIHBhcmFtQ291bnQsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5KQoreworICAgIHJl
dHVybiBMTFZNRnVuY3Rpb25UeXBlKHJldHVyblR5cGUsIHBhcmFtVHlwZXMsIHBhcmFtQ291bnQs
IHZhcmlhZGljaXR5ID09IFZhcmlhZGljKTsKK30KK3N0YXRpYyBpbmxpbmUgTFR5cGUgZnVuY3Rp
b25UeXBlKExUeXBlIHJldHVyblR5cGUsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFy
aWFkaWMpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCAwLCAwLCB2YXJp
YWRpY2l0eSk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSByZXR1
cm5UeXBlLCBMVHlwZSBwYXJhbTEsIFZhcmlhZGljaXR5IHZhcmlhZGljaXR5ID0gTm90VmFyaWFk
aWMpCit7CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCAmcGFyYW0xLCAxLCB2
YXJpYWRpY2l0eSk7Cit9CitzdGF0aWMgaW5saW5lIExUeXBlIGZ1bmN0aW9uVHlwZShMVHlwZSBy
ZXR1cm5UeXBlLCBMVHlwZSBwYXJhbTEsIExUeXBlIHBhcmFtMiwgVmFyaWFkaWNpdHkgdmFyaWFk
aWNpdHkgPSBOb3RWYXJpYWRpYykKK3sKKyAgICBMVHlwZSBwYXJhbVR5cGVzW10gPSB7IHBhcmFt
MSwgcGFyYW0yIH07CisgICAgcmV0dXJuIGZ1bmN0aW9uVHlwZShyZXR1cm5UeXBlLCBwYXJhbVR5
cGVzLCAyLCB2YXJpYWRpY2l0eSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGFkZEZ1bmN0
aW9uKExNb2R1bGUgbW9kdWxlLCBjb25zdCBjaGFyKiBuYW1lLCBMVHlwZSB0eXBlKSB7IHJldHVy
biBMTFZNQWRkRnVuY3Rpb24obW9kdWxlLCBuYW1lLCB0eXBlKTsgfQorc3RhdGljIGlubGluZSB2
b2lkIHNldExpbmthZ2UoTFZhbHVlIGdsb2JhbCwgTExpbmthZ2UgbGlua2FnZSkgeyBMTFZNU2V0
TGlua2FnZShnbG9iYWwsIGxpbmthZ2UpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgc2V0RnVuY3Rp
b25DYWxsaW5nQ29udihMVmFsdWUgZnVuY3Rpb24sIExDYWxsQ29udiBjb252ZW50aW9uKSB7IExM
Vk1TZXRGdW5jdGlvbkNhbGxDb252KGZ1bmN0aW9uLCBjb252ZW50aW9uKTsgfQorCitzdGF0aWMg
aW5saW5lIExWYWx1ZSBhZGRFeHRlcm5GdW5jdGlvbihMTW9kdWxlIG1vZHVsZSwgY29uc3QgY2hh
ciogbmFtZSwgTFR5cGUgdHlwZSkKK3sKKyAgICBMVmFsdWUgcmVzdWx0ID0gYWRkRnVuY3Rpb24o
bW9kdWxlLCBuYW1lLCB0eXBlKTsKKyAgICBzZXRMaW5rYWdlKHJlc3VsdCwgTExWTUV4dGVybmFs
TGlua2FnZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogc3RhdGljIGlubGluZSBMVmFsdWUg
Z2V0UGFyYW0oTFZhbHVlIGZ1bmN0aW9uLCB1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gTExWTUdl
dFBhcmFtKGZ1bmN0aW9uLCBpbmRleCk7IH0KIAogZW51bSBCaXRFeHRlbnNpb24geyBaZXJvRXh0
ZW5kLCBTaWduRXh0ZW5kIH07CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludChMVHlwZSB0
eXBlLCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUsIEJpdEV4dGVuc2lvbiBleHRlbnNpb24pIHsg
cmV0dXJuIExMVk1Db25zdEludCh0eXBlLCB2YWx1ZSwgZXh0ZW5zaW9uID09IFNpZ25FeHRlbmQp
OyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBjb25zdEludFRvUHRyKExWYWx1ZSB2YWx1ZSwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gTExWTUNvbnN0SW50VG9QdHIodmFsdWUsIHR5cGUpOyB9CitzdGF0
aWMgaW5saW5lIExWYWx1ZSBjb25zdEJpdENhc3QoTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7
IHJldHVybiBMTFZNQ29uc3RCaXRDYXN0KHZhbHVlLCB0eXBlKTsgfQogCiBzdGF0aWMgaW5saW5l
IExCYXNpY0Jsb2NrIGFwcGVuZEJhc2ljQmxvY2soTFZhbHVlIGZ1bmN0aW9uKSB7IHJldHVybiBM
TFZNQXBwZW5kQmFzaWNCbG9jayhmdW5jdGlvbiwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExCYXNp
Y0Jsb2NrIGluc2VydEJhc2ljQmxvY2soTEJhc2ljQmxvY2sgYmVmb3JlQmFzaWNCbG9jaykgeyBy
ZXR1cm4gTExWTUluc2VydEJhc2ljQmxvY2soYmVmb3JlQmFzaWNCbG9jaywgIiIpOyB9CiAKIHN0
YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWxsb2NhKExCdWlsZGVyIGJ1aWxkZXIsIExUeXBlIHR5
cGUpIHsgcmV0dXJuIExMVk1CdWlsZEFsbG9jYShidWlsZGVyLCB0eXBlLCAiIik7IH0KIHN0YXRp
YyBpbmxpbmUgTFZhbHVlIGJ1aWxkQWRkKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBsZWZ0LCBM
VmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZEFkZChidWlsZGVyLCBsZWZ0LCByaWdodCwg
IiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZE11bChMQnVpbGRlciBidWlsZGVyLCBM
VmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBMTFZNQnVpbGRNdWwoYnVpbGRlciwg
bGVmdCwgcmlnaHQsICIiKTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRBbmQoTEJ1aWxk
ZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxk
QW5kKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0KK3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1
aWxkT3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1
cm4gTExWTUJ1aWxkT3IoYnVpbGRlciwgbGVmdCwgcmlnaHQsICIiKTsgfQogc3RhdGljIGlubGlu
ZSBMVmFsdWUgYnVpbGRYb3IoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSBy
aWdodCkgeyByZXR1cm4gTExWTUJ1aWxkWG9yKGJ1aWxkZXIsIGxlZnQsIHJpZ2h0LCAiIik7IH0K
K3N0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2hsKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSBs
ZWZ0LCBMVmFsdWUgcmlnaHQpIHsgcmV0dXJuIExMVk1CdWlsZFNobChidWlsZGVyLCBsZWZ0LCBy
aWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZEFTaHIoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkQVNocihi
dWlsZGVyLCBsZWZ0LCByaWdodCwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZExv
YWQoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIHBvaW50ZXIpIHsgcmV0dXJuIExMVk1CdWlsZExv
YWQoYnVpbGRlciwgcG9pbnRlciwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZFN0
b3JlKExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFZhbHVlIHBvaW50ZXIpIHsgcmV0
dXJuIExMVk1CdWlsZFN0b3JlKGJ1aWxkZXIsIHZhbHVlLCBwb2ludGVyKTsgfQogc3RhdGljIGlu
bGluZSBMVmFsdWUgYnVpbGRaRXh0KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gTExWTUJ1aWxkWkV4dChidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIp
OyB9CkBAIC03NiwxMiArMTM0LDM4IEBAIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSW50Q2Fz
dChMQnVpbGQKIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkSW50VG9QdHIoTEJ1aWxkZXIgYnVp
bGRlciwgTFZhbHVlIHZhbHVlLCBMVHlwZSB0eXBlKSB7IHJldHVybiBMTFZNQnVpbGRJbnRUb1B0
cihidWlsZGVyLCB2YWx1ZSwgdHlwZSwgIiIpOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWls
ZFB0clRvSW50KExCdWlsZGVyIGJ1aWxkZXIsIExWYWx1ZSB2YWx1ZSwgTFR5cGUgdHlwZSkgeyBy
ZXR1cm4gTExWTUJ1aWxkUHRyVG9JbnQoYnVpbGRlciwgdmFsdWUsIHR5cGUsICIiKTsgfQogc3Rh
dGljIGlubGluZSBMVmFsdWUgYnVpbGRJQ21wKExCdWlsZGVyIGJ1aWxkZXIsIExJbnRQcmVkaWNh
dGUgY29uZCwgTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gTExWTUJ1aWxkSUNt
cChidWlsZGVyLCBjb25kLCBsZWZ0LCByaWdodCwgIiIpOyB9CitzdGF0aWMgaW5saW5lIExWYWx1
ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUqIGFy
Z3MsIHVuc2lnbmVkIG51bUFyZ3MpCit7CisgICAgcmV0dXJuIExMVk1CdWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZ3MsIG51bUFyZ3MsICIiKTsKK30KK3N0YXRpYyBpbmxpbmUgTFZhbHVl
IGJ1aWxkQ2FsbChMQnVpbGRlciBidWlsZGVyLCBMVmFsdWUgZnVuY3Rpb24pCit7CisgICAgcmV0
dXJuIGJ1aWxkQ2FsbChidWlsZGVyLCBmdW5jdGlvbiwgMCwgMCk7Cit9CitzdGF0aWMgaW5saW5l
IExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFs
dWUgYXJnMSkKK3sKKyAgICByZXR1cm4gYnVpbGRDYWxsKGJ1aWxkZXIsIGZ1bmN0aW9uLCAmYXJn
MSwgMSk7Cit9CitzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENhbGwoTEJ1aWxkZXIgYnVpbGRl
ciwgTFZhbHVlIGZ1bmN0aW9uLCBMVmFsdWUgYXJnMSwgTFZhbHVlIGFyZzIpCit7CisgICAgTFZh
bHVlIGFyZ3NbXSA9IHsgYXJnMSwgYXJnMiB9OworICAgIHJldHVybiBidWlsZENhbGwoYnVpbGRl
ciwgZnVuY3Rpb24sIGFyZ3MsIDIpOworfQorc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRFeHRy
YWN0VmFsdWUoTEJ1aWxkZXIgYnVpbGRlciwgTFZhbHVlIGFnZ1ZhbCwgdW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIExMVk1CdWlsZEV4dHJhY3RWYWx1ZShidWlsZGVyLCBhZ2dWYWwsIGluZGV4LCAi
Iik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkU2VsZWN0KExCdWlsZGVyIGJ1aWxkZXIs
IExWYWx1ZSBjb25kaXRpb24sIExWYWx1ZSB0YWtlbiwgTFZhbHVlIG5vdFRha2VuKSB7IHJldHVy
biBMTFZNQnVpbGRTZWxlY3QoYnVpbGRlciwgY29uZGl0aW9uLCB0YWtlbiwgbm90VGFrZW4sICIi
KTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRCcihMQnVpbGRlciBidWlsZGVyLCBMQmFz
aWNCbG9jayBkZXN0aW5hdGlvbikgeyByZXR1cm4gTExWTUJ1aWxkQnIoYnVpbGRlciwgZGVzdGlu
YXRpb24pOyB9CiBzdGF0aWMgaW5saW5lIExWYWx1ZSBidWlsZENvbmRCcihMQnVpbGRlciBidWls
ZGVyLCBMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwgTEJhc2ljQmxvY2sgbm90
VGFrZW4pIHsgcmV0dXJuIExMVk1CdWlsZENvbmRCcihidWlsZGVyLCBjb25kaXRpb24sIHRha2Vu
LCBub3RUYWtlbik7IH0KIHN0YXRpYyBpbmxpbmUgTFZhbHVlIGJ1aWxkUmV0KExCdWlsZGVyIGJ1
aWxkZXIsIExWYWx1ZSB2YWx1ZSkgeyByZXR1cm4gTExWTUJ1aWxkUmV0KGJ1aWxkZXIsIHZhbHVl
KTsgfQogc3RhdGljIGlubGluZSBMVmFsdWUgYnVpbGRVbnJlYWNoYWJsZShMQnVpbGRlciBidWls
ZGVyKSB7IHJldHVybiBMTFZNQnVpbGRVbnJlYWNoYWJsZShidWlsZGVyKTsgfQogCitzdGF0aWMg
aW5saW5lIHZvaWQgZHVtcE1vZHVsZShMTW9kdWxlIG1vZHVsZSkgeyBMTFZNRHVtcE1vZHVsZSht
b2R1bGUpOyB9CitzdGF0aWMgaW5saW5lIHZvaWQgdmVyaWZ5TW9kdWxlKExNb2R1bGUgbW9kdWxl
KQoreworICAgIGNoYXIqIGVycm9yID0gMDsKKyAgICBMTFZNVmVyaWZ5TW9kdWxlKG1vZHVsZSwg
TExWTUFib3J0UHJvY2Vzc0FjdGlvbiwgJmVycm9yKTsKKyAgICBMTFZNRGlzcG9zZU1lc3NhZ2Uo
ZXJyb3IpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAJKHJldmlzaW9uIDE0NzI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQCBi
b29sIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAgICAgICAgICAgIGNhc2UgVW50eXBl
ZFVzZToKICAgICAgICAgICAgICAgICBjYXNlIEludDMyVXNlOgogICAgICAgICAgICAgICAgIGNh
c2UgS25vd25JbnQzMlVzZToKKyAgICAgICAgICAgICAgICBjYXNlIEJvb2xlYW5Vc2U6CiAgICAg
ICAgICAgICAgICAgICAgIC8vIFRoZXNlIGFyZSBPSy4KICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTcwLDggKzcxLDI2IEBAIGJvb2wgY2Fu
Q29tcGlsZShHcmFwaCYgZ3JhcGgpCiAgICAgICAgICAgICBjYXNlIFBoYW50b21Mb2NhbDoKICAg
ICAgICAgICAgIGNhc2UgU2V0QXJndW1lbnQ6CiAgICAgICAgICAgICBjYXNlIFJldHVybjoKKyAg
ICAgICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAg
ICAgIGNhc2UgQml0UlNoaWZ0OgorICAgICAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CiAgICAgICAg
ICAgICAgICAgLy8gVGhlc2UgYXJlIE9LLgogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWYWx1ZUFkZDoKKyAgICAgICAgICAgIGNhc2UgQXJpdGhBZGQ6CisgICAgICAg
ICAgICBjYXNlIEFyaXRoTXVsOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5iaW5hcnlVc2VL
aW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CisgICAg
ICAgICAgICAgICAgaWYgKG5vZGUtPmlzQmluYXJ5VXNlS2luZChJbnQzMlVzZSkpCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS51
c2VLaW5kKCkgPT0gQm9vbGVhblVzZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICAgICAvLyBEb24ndCBrbm93IGhvdyB0byBoYW5kbGUgYW55dGhpbmcgZWxzZS4KICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDE0NzI2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDcgKzY4LDcgQEAgdm9p
ZCBjb21waWxlKFN0YXRlJiBzdGF0ZSwgUmVmUHRyPEpTQzo6SgogICAgIExMVk1BZGRDRkdTaW1w
bGlmaWNhdGlvblBhc3MocGFzcyk7CiAgICAgTExWTVJ1blBhc3NNYW5hZ2VyKHBhc3MsIHN0YXRl
Lm1vZHVsZSk7CiAgICAgaWYgKERGRzo6c2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCkgfHwgREZHOjp2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkpCi0gICAgICAgIExMVk1EdW1wTW9kdWxlKHN0YXRl
Lm1vZHVsZSk7CisgICAgICAgIHN0YXRlLmR1bXBTdGF0ZSgiYWZ0ZXIgb3B0aW1pemF0aW9uIik7
CiAgICAgCiAgICAgLy8gRklYTUU6IExMVk0gc2hvdWxkIHVzZSBvdXIgb3duIEpJVCBtZW1vcnkg
YWxsb2NhdG9yLCBhbmQgd2Ugc2hvdWxkbid0IGhhdmUgdG8KICAgICAvLyBrZWVwIGFyb3VuZCBh
biBMTFZNRXhlY3V0aW9uRW5naW5lUmVmIHRvIGtlZXAgY29kZSBhbGl2ZS4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lv
biAxNDcyNzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZN
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjQsMTEgKzY0LDExIEBAIHB1YmxpYzoKICAgICAgICAg
Q1N0cmluZyBuYW1lID0gdG9DU3RyaW5nKGNvZGVCbG9jaygpLT5oYXNoKCkpOwogICAgICAgICBt
X2Z0bFN0YXRlLm1vZHVsZSA9IExMVk1Nb2R1bGVDcmVhdGVXaXRoTmFtZShuYW1lLmRhdGEoKSk7
CiAgICAgICAgIAotICAgICAgICBMVHlwZSBhcmd1bWVudFR5cGVzW10gPSB7IG1fb3V0LmludFB0
ciB9OwotICAgICAgICBtX2Z0bFN0YXRlLmZ1bmN0aW9uID0gTExWTUFkZEZ1bmN0aW9uKG1fZnRs
U3RhdGUubW9kdWxlLCBuYW1lLmRhdGEoKSwgTExWTUZ1bmN0aW9uVHlwZShtX291dC5pbnQ2NCwg
YXJndW1lbnRUeXBlcywgMSwgZmFsc2UpKTsKLSAgICAgICAgTExWTVNldEZ1bmN0aW9uQ2FsbENv
bnYobV9mdGxTdGF0ZS5mdW5jdGlvbiwgTExWTUNDYWxsQ29udik7CisgICAgICAgIG1fZnRsU3Rh
dGUuZnVuY3Rpb24gPSBhZGRGdW5jdGlvbigKKyAgICAgICAgICAgIG1fZnRsU3RhdGUubW9kdWxl
LCBuYW1lLmRhdGEoKSwgZnVuY3Rpb25UeXBlKG1fb3V0LmludDY0LCBtX291dC5pbnRQdHIpKTsK
KyAgICAgICAgc2V0RnVuY3Rpb25DYWxsaW5nQ29udihtX2Z0bFN0YXRlLmZ1bmN0aW9uLCBMTFZN
Q0NhbGxDb252KTsKICAgICAgICAgCi0gICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0
ZS5mdW5jdGlvbik7CisgICAgICAgIG1fb3V0LmluaXRpYWxpemUobV9mdGxTdGF0ZS5tb2R1bGUs
IG1fZnRsU3RhdGUuZnVuY3Rpb24pOwogICAgICAgICAKICAgICAgICAgbV9wcm9sb2d1ZSA9IGFw
cGVuZEJhc2ljQmxvY2sobV9mdGxTdGF0ZS5mdW5jdGlvbik7CiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKG1fcHJvbG9ndWUpOwpAQCAtODIsNiArODIsMTAgQEAgcHVibGljOgogICAgICAgICBtX3Rh
Z1R5cGVOdW1iZXIgPSBtX291dC5jb25zdEludDY0KFRhZ1R5cGVOdW1iZXIpOwogICAgICAgICBt
X3RhZ01hc2sgPSBtX291dC5jb25zdEludDY0KFRhZ01hc2spOwogICAgICAgICAKKyAgICAgICAg
bV9hYm9ydEZ1bmN0aW9uID0gY29uc3RJbnRUb1B0cigKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0
SW50UHRyKGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWJvcnQpKSwKKyAgICAgICAgICAgIHBvaW50
ZXJUeXBlKGZ1bmN0aW9uVHlwZShtX291dC52b2lkVHlwZSkpKTsKKyAgICAgICAgCiAgICAgICAg
IGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1fZ3JhcGgubV9i
bG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKICAgICAgICAgICAgIG1faGlnaEJsb2NrID0g
bV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKICAgICAgICAgICAgIGlmICghbV9o
aWdoQmxvY2spCkBAIC05MSwxMiArOTUsMjAgQEAgcHVibGljOgogICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICBjbG9zZU92ZXJGbHVzaGVkTG9jYWxPcHMoKTsKKworICAgICAgICBtX291dC5h
cHBlbmRUbyhtX3Byb2xvZ3VlLCBtX2Jsb2Nrcy5nZXQobV9ncmFwaC5tX2Jsb2Nrc1swXS5nZXQo
KSkpOworCiAgICAgICAgIHRyYW5zZmVyQW5kQ2hlY2tBcmd1bWVudHMoKTsKICAgICAgICAgCiAg
ICAgICAgIG1fb3V0Lmp1bXAobV9ibG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbMF0uZ2V0KCkp
KTsKICAgICAgICAgCiAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxv
Y2tJbmRleCA8IG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpCiAgICAgICAg
ICAgICBjb21waWxlQmxvY2soYmxvY2tJbmRleCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2VDb21w
aWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgIG1fZnRsU3RhdGUuZHVtcFN0YXRlKCJhZnRl
ciBsb3dlcmluZyIpOworICAgICAgICBpZiAodmFsaWRhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAg
ICAgIHZlcmlmeU1vZHVsZShtX2Z0bFN0YXRlLm1vZHVsZSk7CiAgICAgfQogCiBwcml2YXRlOgpA
QCAtMTg4LDE5ICsyMDAsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Js
b2NrIGxvd0Jsb2NrID0gbV9ibG9ja3MuZ2V0KG1faGlnaEJsb2NrKTsKICAgICAgICAgCi0gICAg
ICAgIEJhc2ljQmxvY2sqIG5leHRIaWdoQmxvY2sgPSAwOworICAgICAgICBtX25leHRIaWdoQmxv
Y2sgPSAwOwogICAgICAgICBmb3IgKEJsb2NrSW5kZXggbmV4dEJsb2NrSW5kZXggPSBibG9ja0lu
ZGV4ICsgMTsgbmV4dEJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKytuZXh0
QmxvY2tJbmRleCkgewotICAgICAgICAgICAgbmV4dEhpZ2hCbG9jayA9IG1fZ3JhcGgubV9ibG9j
a3NbbmV4dEJsb2NrSW5kZXhdLmdldCgpOwotICAgICAgICAgICAgaWYgKG5leHRIaWdoQmxvY2sp
CisgICAgICAgICAgICBtX25leHRIaWdoQmxvY2sgPSBtX2dyYXBoLm1fYmxvY2tzW25leHRCbG9j
a0luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIGlmIChtX25leHRIaWdoQmxvY2spCiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgTEJhc2ljQmxvY2sgbmV4dExvd0Js
b2NrID0gbmV4dEhpZ2hCbG9jayA/IG1fYmxvY2tzLmdldChuZXh0SGlnaEJsb2NrKSA6IDA7Cisg
ICAgICAgIG1fbmV4dExvd0Jsb2NrID0gbV9uZXh0SGlnaEJsb2NrID8gbV9ibG9ja3MuZ2V0KG1f
bmV4dEhpZ2hCbG9jaykgOiAwOwogICAgICAgICAKICAgICAgICAgLy8gQWxsIG9mIHRoaXMgZWZm
b3J0IHRvIGZpbmQgdGhlIG5leHQgYmxvY2sgZ2l2ZXMgdXMgdGhlIGFiaWxpdHkgdG8ga2VlcCB0
aGUKICAgICAgICAgLy8gZ2VuZXJhdGVkIElSIGluIHJvdWdobHkgcHJvZ3JhbSBvcmRlci4gVGhp
cyBvdWdodCBub3QgYWZmZWN0IHRoZSBwZXJmb3JtYW5jZQogICAgICAgICAvLyBvZiB0aGUgZ2Vu
ZXJhdGVkIGNvZGUgKHNpbmNlIHdlIGV4cGVjdCBMTFZNIHRvIHJlb3JkZXIgdGhpbmdzKSBidXQg
aXQgd2lsbAogICAgICAgICAvLyBtYWtlIElSIGR1bXBzIGVhc2llciB0byByZWFkLgotICAgICAg
ICBtX291dC5hcHBlbmRUbyhsb3dCbG9jaywgbmV4dExvd0Jsb2NrKTsKKyAgICAgICAgbV9vdXQu
YXBwZW5kVG8obG93QmxvY2ssIG1fbmV4dExvd0Jsb2NrKTsKICAgICAgICAgCiAgICAgICAgIC8v
IEZJWE1FOiBXZSBzaG91bGQgdHJhY2sgdGhlIE9TUiBzaXR1YXRpb24gaGVyZS4KICAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYyMwpAQCAtMjIx
LDYgKzIzMyw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBtX25vZGUgPSBtX2hpZ2hCbG9j
ay0+YXQobm9kZUluZGV4KTsKICAgICAgICAgCisgICAgICAgIGlmICh2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJMb3dlcmluZyAiLCBtX25vZGUsICJc
biIpOworICAgICAgICAKICAgICAgICAgYm9vbCBzaG91bGRFeGVjdXRlRWZmZWN0cyA9IG1fc3Rh
dGUuc3RhcnRFeGVjdXRpbmcobV9ub2RlKTsKICAgICAgICAgCiAgICAgICAgIGlmICghbV9ub2Rl
LT5zaG91bGRHZW5lcmF0ZSgpKQpAQCAtMjUxLDYgKzI2NiwzMSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFJldHVybjoKICAgICAgICAgICAgIGNvbXBpbGVSZXR1cm4oKTsKICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEFyaXRoQWRkOgorICAgICAgICBjYXNlIFZhbHVlQWRkOgor
ICAgICAgICAgICAgY29tcGlsZUFkZCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQXJpdGhNdWw6CisgICAgICAgICAgICBjb21waWxlQXJpdGhNdWwoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgICAgIGNvbXBpbGVCaXRBbmQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEJpdE9yOgorICAgICAgICAgICAg
Y29tcGlsZUJpdE9yKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCaXRSU2hp
ZnQ6CisgICAgICAgICAgICBjb21waWxlQml0UlNoaWZ0KCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBCaXRMU2hpZnQ6CisgICAgICAgICAgICBjb21waWxlQml0TFNoaWZ0KCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDb21wYXJlTGVzczoKKyAgICAgICAg
ICAgIGNvbXBpbGVDb21wYXJlTGVzcygpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgQnJhbmNoOgorICAgICAgICAgICAgY29tcGlsZUJyYW5jaCgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0zODYsMTcgKzQyNiwxMzggQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQucmV0KGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSkpOwogICAg
IH0KICAgICAKKyAgICB2b2lkIGNvbXBpbGVBZGQoKQorICAgIHsKKyAgICAgICAgc3dpdGNoICht
X25vZGUtPmJpbmFyeVVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIEludDMyVXNlOiB7CisgICAg
ICAgICAgICBMVmFsdWUgbGVmdCA9IGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICAgICAgTFZhbHVlIHJpZ2h0ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1fbm9kZS0+YXJp
dGhOb2RlRmxhZ3MoKSkpIHsKKyAgICAgICAgICAgICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25v
ZGUsIG1fb3V0LmFkZChsZWZ0LCByaWdodCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBMVmFsdWUgcmVzdWx0ID0gbV9v
dXQuYWRkV2l0aE92ZXJmbG93MzIobGVmdCwgcmlnaHQpOworICAgICAgICAgICAgc3BlY3VsYXRl
KE92ZXJmbG93LCAwLCAwLCBtX291dC5leHRyYWN0VmFsdWUocmVzdWx0LCAxKSk7CisgICAgICAg
ICAgICBtX2ludDMyVmFsdWVzLmFkZChtX25vZGUsIG1fb3V0LmV4dHJhY3RWYWx1ZShyZXN1bHQs
IDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBp
bGVBcml0aE11bCgpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+YmluYXJ5VXNlS2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgSW50MzJVc2U6IHsKKyAgICAgICAgICAgIExWYWx1ZSBsZWZ0
ID0gbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgcmlnaHQg
PSBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
TFZhbHVlIHJlc3VsdDsKKyAgICAgICAgICAgIGlmIChub2RlQ2FuVHJ1bmNhdGVJbnRlZ2VyKG1f
bm9kZS0+YXJpdGhOb2RlRmxhZ3MoKSkpCisgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9vdXQu
bXVsKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIExW
YWx1ZSBvdmVyZmxvd1Jlc3VsdCA9IG1fb3V0Lm11bFdpdGhPdmVyZmxvdzMyKGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoT3ZlcmZsb3csIDAsIDAsIG1fb3V0LmV4dHJh
Y3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMSkpOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IG1f
b3V0LmV4dHJhY3RWYWx1ZShvdmVyZmxvd1Jlc3VsdCwgMCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmICghbm9kZUNhbklnbm9yZU5lZ2F0aXZlWmVybyhtX25v
ZGUtPmFyaXRoTm9kZUZsYWdzKCkpKSB7CisgICAgICAgICAgICAgICAgTEJhc2ljQmxvY2sgc2xv
d0Nhc2UgPSBtX291dC5uZXdCbG9jaygpOworICAgICAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNv
bnRpbnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCAw
LCAwLCBtX291dC5sZXNzVGhhbihsZWZ0LCBtX291dC5pbnQzMlplcm8pKTsKKyAgICAgICAgICAg
ICAgICBzcGVjdWxhdGUoTmVnYXRpdmVaZXJvLCAwLCAwLCBtX291dC5sZXNzVGhhbihyaWdodCwg
bV9vdXQuaW50MzJaZXJvKSk7CisgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOworICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBtX2ludDMyVmFs
dWVzLmFkZChtX25vZGUsIHJlc3VsdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjb21waWxlQml0QW5kKCkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1
ZXMuYWRkKAorICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRBbmQobG93SW50MzIobV9ub2Rl
LT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgfQorICAgIAor
ICAgIHZvaWQgY29tcGlsZUJpdE9yKCkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1ZXMuYWRk
KAorICAgICAgICAgICAgbV9ub2RlLCBtX291dC5iaXRPcihsb3dJbnQzMihtX25vZGUtPmNoaWxk
MSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBjb21waWxlQml0UlNoaWZ0KCkKKyAgICB7CisgICAgICAgIG1faW50MzJWYWx1ZXMuYWRkKAor
ICAgICAgICAgICAgbV9ub2RlLAorICAgICAgICAgICAgbV9vdXQuYVNocigKKyAgICAgICAgICAg
ICAgICBsb3dJbnQzMihtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgICAgICBtX291dC5i
aXRBbmQobG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSksIG1fb3V0LmNvbnN0SW50MzIoMzEpKSkp
OworICAgIH0KKyAgICAKKyAgICB2b2lkIGNvbXBpbGVCaXRMU2hpZnQoKQorICAgIHsKKyAgICAg
ICAgbV9pbnQzMlZhbHVlcy5hZGQoCisgICAgICAgICAgICBtX25vZGUsCisgICAgICAgICAgICBt
X291dC5zaGwoCisgICAgICAgICAgICAgICAgbG93SW50MzIobV9ub2RlLT5jaGlsZDEoKSksCisg
ICAgICAgICAgICAgICAgbV9vdXQuYml0QW5kKGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpLCBt
X291dC5jb25zdEludDMyKDMxKSkpKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBjb21waWxlQ29t
cGFyZUxlc3MoKQorICAgIHsKKyAgICAgICAgaWYgKG1fbm9kZS0+aXNCaW5hcnlVc2VLaW5kKElu
dDMyVXNlKSkgeworICAgICAgICAgICAgbV9ib29sZWFuVmFsdWVzLmFkZCgKKyAgICAgICAgICAg
ICAgICBtX25vZGUsCisgICAgICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4obG93SW50MzIobV9u
b2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkpKSk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgY29tcGlsZUJyYW5jaCgpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAg
IGNhc2UgQm9vbGVhblVzZTogeworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKAorICAgICAgICAg
ICAgICAgIGxvd0Jvb2xlYW4obV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICAgICAgbV9i
bG9ja3MuZ2V0KG1fZ3JhcGgubV9ibG9ja3NbbV9ub2RlLT50YWtlbkJsb2NrSW5kZXgoKV0uZ2V0
KCkpLAorICAgICAgICAgICAgICAgIG1fYmxvY2tzLmdldChtX2dyYXBoLm1fYmxvY2tzW21fbm9k
ZS0+bm90VGFrZW5CbG9ja0luZGV4KCldLmdldCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgCiAgICAgdm9pZCBzcGVjdWxhdGVCYWNrd2FyZChFeGl0S2luZCwgTFZhbHVl
LCBOb2RlKiwgTFZhbHVlIGZhaWxDb25kaXRpb24pCiAgICAgewogICAgICAgICBMQmFzaWNCbG9j
ayBmYWlsQ2FzZSA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRp
bnVhdGlvbiA9IG1fb3V0Lm5ld0Jsb2NrKCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5icmFu
Y2goZmFpbENvbmRpdGlvbiwgZmFpbENhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIG1fb3V0
LmFwcGVuZFRvKGZhaWxDYXNlKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhmYWlsQ2FzZSwgY29udGludWF0aW9uKTsKICAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBPU1IgZXhpdC4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTExMzYyMworICAgICAgICBtX291dC5jYWxsKG1fYWJvcnRGdW5jdGlvbik7
CiAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGNv
bnRpbnVhdGlvbik7CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5l
eHQpOwogICAgIH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZUZvcndhcmQoRXhpdEtpbmQga2lu
ZCwgTFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9u
KQpAQCAtNDc4LDYgKzYzOSw5IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBBU1NFUlRfVU5V
U0VEKG1vZGUsIG1vZGUgPT0gTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9uIHx8IGVkZ2UudXNlS2lu
ZCgpID09IEJvb2xlYW5Vc2UpOwogICAgICAgICAKKyAgICAgICAgaWYgKExWYWx1ZSByZXN1bHQg
PSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIAogICAgICAgICBpZiAoTFZhbHVlIHVuYm94ZWRSZXN1bHQgPSBtX2pz
VmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKSkgewogICAgICAgICAgICAgRlRMX1RZUEVfQ0hF
Q0sodW5ib3hlZFJlc3VsdCwgZWRnZSwgU3BlY0Jvb2xlYW4sIGNoZWNrTm90Qm9vbGVhbih1bmJv
eGVkUmVzdWx0KSk7CiAgICAgICAgICAgICByZXR1cm4gdW5ib3hCb29sZWFuKHVuYm94ZWRSZXN1
bHQpOwpAQCAtNjA1LDYgKzc2OSw3IEBAIHByaXZhdGU6CiAgICAgTFZhbHVlIG1fY2FsbEZyYW1l
OwogICAgIExWYWx1ZSBtX3RhZ1R5cGVOdW1iZXI7CiAgICAgTFZhbHVlIG1fdGFnTWFzazsKKyAg
ICBMVmFsdWUgbV9hYm9ydEZ1bmN0aW9uOwogICAgIAogICAgIEhhc2hTZXQ8Tm9kZSo+IG1fZmx1
c2hlZExvY2FsT3BzOwogICAgIFZlY3RvcjxOb2RlKj4gbV9mbHVzaGVkTG9jYWxPcFdvcmtsaXN0
OwpAQCAtNjIwLDYgKzc4NSw4IEBAIHByaXZhdGU6CiAgICAgCiAgICAgQWJzdHJhY3RTdGF0ZSBt
X3N0YXRlOwogICAgIEJhc2ljQmxvY2sqIG1faGlnaEJsb2NrOworICAgIEJhc2ljQmxvY2sqIG1f
bmV4dEhpZ2hCbG9jazsKKyAgICBMQmFzaWNCbG9jayBtX25leHRMb3dCbG9jazsKICAgICBOb2Rl
KiBtX25vZGU7CiAgICAgU3BlY3VsYXRpb25EaXJlY3Rpb24gbV9kaXJlY3Rpb247CiB9OwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCShyZXZpc2lvbiAxNDcyNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NCw3ICs1NCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIGNsYXNzIE91
dHB1dCB7CiBwdWJsaWM6CiAgICAgT3V0cHV0KCkKLSAgICAgICAgOiBib29sZWFuKGludDFUeXBl
KCkpCisgICAgICAgIDogdm9pZFR5cGUoRlRMOjp2b2lkVHlwZSgpKQorICAgICAgICAsIGJvb2xl
YW4oaW50MVR5cGUoKSkKICAgICAgICAgLCBpbnQzMihpbnQzMlR5cGUoKSkKICAgICAgICAgLCBp
bnQ2NChpbnQ2NFR5cGUoKSkKICAgICAgICAgLCBpbnRQdHIoaW50UHRyVHlwZSgpKQpAQCAtNzAs
NiArNzEsOCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9idWlsZGVyKExMVk1DcmVhdGVCdWlsZGVy
KCkpCiAgICAgICAgICwgbV9ibG9jaygwKQogICAgICAgICAsIG1fbmV4dEJsb2NrKDApCisgICAg
ICAgICwgbV9hZGRXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uKDApCisgICAgICAgICwgbV9tdWxXaXRo
T3ZlcmZsb3czMkZ1bmN0aW9uKDApCiAgICAgewogICAgIH0KICAgICAKQEAgLTc4LDIyICs4MSwy
MSBAQCBwdWJsaWM6CiAgICAgICAgIExMVk1EaXNwb3NlQnVpbGRlcihtX2J1aWxkZXIpOwogICAg
IH0KICAgICAKLSAgICB2b2lkIGluaXRpYWxpemUoTFZhbHVlIGZ1bmN0aW9uKQorICAgIHZvaWQg
aW5pdGlhbGl6ZShMTW9kdWxlIG1vZHVsZSwgTFZhbHVlIGZ1bmN0aW9uKQogICAgIHsKKyAgICAg
ICAgbV9tb2R1bGUgPSBtb2R1bGU7CiAgICAgICAgIG1fZnVuY3Rpb24gPSBmdW5jdGlvbjsKICAg
ICB9CiAgICAgCi0gICAgLy8gVXNlIHRoaXMgbWV0aG9kIHdoZW4geW91J3JlIHN0YXJ0aW5nIGNv
ZGUgZ2VuZXJhdGlvbiBmb3IgYSBoaWdoLWxldmVsCi0gICAgLy8gYmFzaWMgYmxvY2suCi0gICAg
dm9pZCBhcHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaywgTEJhc2ljQmxvY2sgbmV4dEJsb2NrKQor
ICAgIExCYXNpY0Jsb2NrIGFwcGVuZFRvKExCYXNpY0Jsb2NrIGJsb2NrLCBMQmFzaWNCbG9jayBu
ZXh0QmxvY2spCiAgICAgeworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dEJsb2NrID0gbV9u
ZXh0QmxvY2s7CiAgICAgICAgIG1fbmV4dEJsb2NrID0gbmV4dEJsb2NrOwogICAgICAgICAKICAg
ICAgICAgYXBwZW5kVG8oYmxvY2spOworICAgICAgICByZXR1cm4gbGFzdE5leHRCbG9jazsKICAg
ICB9CiAgICAgCi0gICAgLy8gVXNlIG5ld0Jsb2NrKCkgYW5kIGFwcGVuZFRvKCkgaWYgeW91J3Jl
IHNwbGl0dGluZyB0aGUgaGlnaC1sZXZlbCBiYXNpYwotICAgIC8vIGJsb2NrIGludG8gbXVsdGlw
bGUgbG93LWxldmVsIGJhc2ljIGJsb2Nrcy4KICAgICB2b2lkIGFwcGVuZFRvKExCYXNpY0Jsb2Nr
IGJsb2NrKQogICAgIHsKICAgICAgICAgbV9ibG9jayA9IGJsb2NrOwpAQCAtMTE0LDggKzExNiwy
MSBAQCBwdWJsaWM6CiAgICAgTFZhbHVlIGNvbnN0SW50NjQoaW50NjRfdCB2YWx1ZSkgeyByZXR1
cm4gY29uc3RJbnQoaW50NjQsIHZhbHVlLCBTaWduRXh0ZW5kKTsgfQogICAgIAogICAgIExWYWx1
ZSBhZGQoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRBZGQobV9idWls
ZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICBMVmFsdWUgbXVsKExWYWx1ZSBsZWZ0LCBMVmFsdWUg
cmlnaHQpIHsgcmV0dXJuIGJ1aWxkTXVsKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQpOyB9CiAgICAg
TFZhbHVlIGJpdEFuZChMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZEFu
ZChtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBiaXRPcihMVmFsdWUgbGVm
dCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVybiBidWlsZE9yKG1fYnVpbGRlciwgbGVmdCwgcmlnaHQp
OyB9CiAgICAgTFZhbHVlIGJpdFhvcihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7IHJldHVy
biBidWlsZFhvcihtX2J1aWxkZXIsIGxlZnQsIHJpZ2h0KTsgfQorICAgIExWYWx1ZSBzaGwoTFZh
bHVlIGxlZnQsIExWYWx1ZSByaWdodCkgeyByZXR1cm4gYnVpbGRTaGwobV9idWlsZGVyLCBsZWZ0
LCByaWdodCk7IH0KKyAgICBMVmFsdWUgYVNocihMVmFsdWUgbGVmdCwgTFZhbHVlIHJpZ2h0KSB7
IHJldHVybiBidWlsZEFTaHIobV9idWlsZGVyLCBsZWZ0LCByaWdodCk7IH0KKyAgICAKKyAgICBM
VmFsdWUgYWRkV2l0aE92ZXJmbG93MzIoTFZhbHVlIGxlZnQsIExWYWx1ZSByaWdodCkKKyAgICB7
CisgICAgICAgIHJldHVybiBjYWxsKGFkZFdpdGhPdmVyZmxvdzMyRnVuY3Rpb24oKSwgbGVmdCwg
cmlnaHQpOworICAgIH0KKyAgICBMVmFsdWUgbXVsV2l0aE92ZXJmbG93MzIoTFZhbHVlIGxlZnQs
IExWYWx1ZSByaWdodCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsKG11bFdpdGhPdmVyZmxv
dzMyRnVuY3Rpb24oKSwgbGVmdCwgcmlnaHQpOworICAgIH0KICAgICAKICAgICBMVmFsdWUgemVy
b0V4dChMVmFsdWUgdmFsdWUsIExUeXBlIHR5cGUpIHsgcmV0dXJuIGJ1aWxkWkV4dChtX2J1aWxk
ZXIsIHZhbHVlLCB0eXBlKTsgfQogICAgIExWYWx1ZSBpbnRDYXN0KExWYWx1ZSB2YWx1ZSwgTFR5
cGUgdHlwZSkgeyByZXR1cm4gYnVpbGRJbnRDYXN0KG1fYnVpbGRlciwgdmFsdWUsIHR5cGUpOyB9
CkBAIC0xNTYsNiArMTcxLDExIEBAIHB1YmxpYzoKICAgICBMVmFsdWUgdGVzdE5vblplcm82NChM
VmFsdWUgdmFsdWUsIExWYWx1ZSBtYXNrKSB7IHJldHVybiBub3RaZXJvNjQoYml0QW5kKHZhbHVl
LCBtYXNrKSk7IH0KICAgICAKICAgICBMVmFsdWUgc2VsZWN0KExWYWx1ZSB2YWx1ZSwgTFZhbHVl
IHRha2VuLCBMVmFsdWUgbm90VGFrZW4pIHsgcmV0dXJuIGJ1aWxkU2VsZWN0KG1fYnVpbGRlciwg
dmFsdWUsIHRha2VuLCBub3RUYWtlbik7IH0KKyAgICBMVmFsdWUgZXh0cmFjdFZhbHVlKExWYWx1
ZSBhZ2dWYWwsIHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBidWlsZEV4dHJhY3RWYWx1ZShtX2J1
aWxkZXIsIGFnZ1ZhbCwgaW5kZXgpOyB9CisgICAgCisgICAgTFZhbHVlIGNhbGwoTFZhbHVlIGZ1
bmN0aW9uKSB7IHJldHVybiBidWlsZENhbGwobV9idWlsZGVyLCBmdW5jdGlvbik7IH0KKyAgICBM
VmFsdWUgY2FsbChMVmFsdWUgZnVuY3Rpb24sIExWYWx1ZSBhcmcxKSB7IHJldHVybiBidWlsZENh
bGwobV9idWlsZGVyLCBmdW5jdGlvbiwgYXJnMSk7IH0KKyAgICBMVmFsdWUgY2FsbChMVmFsdWUg
ZnVuY3Rpb24sIExWYWx1ZSBhcmcxLCBMVmFsdWUgYXJnMikgeyByZXR1cm4gYnVpbGRDYWxsKG1f
YnVpbGRlciwgZnVuY3Rpb24sIGFyZzEsIGFyZzIpOyB9CiAgICAgCiAgICAgdm9pZCBqdW1wKExC
YXNpY0Jsb2NrIGRlc3RpbmF0aW9uKSB7IGJ1aWxkQnIobV9idWlsZGVyLCBkZXN0aW5hdGlvbik7
IH0KICAgICB2b2lkIGJyYW5jaChMVmFsdWUgY29uZGl0aW9uLCBMQmFzaWNCbG9jayB0YWtlbiwg
TEJhc2ljQmxvY2sgbm90VGFrZW4pIHsgYnVpbGRDb25kQnIobV9idWlsZGVyLCBjb25kaXRpb24s
IHRha2VuLCBub3RUYWtlbik7IH0KQEAgLTE2Myw2ICsxODMsMjkgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgdW5yZWFjaGFibGUoKSB7IGJ1aWxkVW5yZWFjaGFibGUobV9idWlsZGVyKTsgfQog
ICAgIAorICAgIExWYWx1ZSBhZGRXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uKCkKKyAgICB7CisgICAg
ICAgIGlmICghbV9hZGRXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uKSB7CisgICAgICAgICAgICBtX2Fk
ZFdpdGhPdmVyZmxvdzMyRnVuY3Rpb24gPSBhZGRFeHRlcm5GdW5jdGlvbigKKyAgICAgICAgICAg
ICAgICBtX21vZHVsZSwgImxsdm0uc2FkZC53aXRoLm92ZXJmbG93LmkzMiIsCisgICAgICAgICAg
ICAgICAgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUoaW50MzIsIGJvb2xlYW4pLCBpbnQzMiwgaW50
MzIpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgcmV0dXJuIG1fYWRkV2l0aE92ZXJm
bG93MzJGdW5jdGlvbjsKKyAgICB9CisgICAgCisgICAgTFZhbHVlIG11bFdpdGhPdmVyZmxvdzMy
RnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgaWYgKCFtX211bFdpdGhPdmVyZmxvdzMyRnVuY3Rp
b24pIHsKKyAgICAgICAgICAgIG1fbXVsV2l0aE92ZXJmbG93MzJGdW5jdGlvbiA9IGFkZEV4dGVy
bkZ1bmN0aW9uKAorICAgICAgICAgICAgICAgIG1fbW9kdWxlLCAibGx2bS5zbXVsLndpdGgub3Zl
cmZsb3cuaTMyIiwKKyAgICAgICAgICAgICAgICBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShpbnQz
MiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gbV9hZGRXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uOworICAgIH0KKyAgICAKKyAgICBj
b25zdCBMVHlwZSB2b2lkVHlwZTsKICAgICBjb25zdCBMVHlwZSBib29sZWFuOwogICAgIGNvbnN0
IExUeXBlIGludDMyOwogICAgIGNvbnN0IExUeXBlIGludDY0OwpAQCAtMTc1LDExICsyMTgsMTYg
QEAgcHVibGljOgogICAgIGNvbnN0IExWYWx1ZSBpbnQzMlplcm87CiAgICAgY29uc3QgTFZhbHVl
IGludDY0WmVybzsKICAgICBjb25zdCBMVmFsdWUgaW50UHRyWmVybzsKLQorICAgIAorICAgIExN
b2R1bGUgbV9tb2R1bGU7CiAgICAgTFZhbHVlIG1fZnVuY3Rpb247CiAgICAgTEJ1aWxkZXIgbV9i
dWlsZGVyOwogICAgIExCYXNpY0Jsb2NrIG1fYmxvY2s7CiAgICAgTEJhc2ljQmxvY2sgbV9uZXh0
QmxvY2s7CisKK3ByaXZhdGU6CisgICAgTFZhbHVlIG1fYWRkV2l0aE92ZXJmbG93MzJGdW5jdGlv
bjsKKyAgICBMVmFsdWUgbV9tdWxXaXRoT3ZlcmZsb3czMkZ1bmN0aW9uOwogfTsKIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
dGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJGVExTdGF0ZS5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2tXaXRoSklUVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3Zv
aWQgU3RhdGU6OmR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKQoreworICAgIGRhdGFMb2coIkxM
Vk0gSVIgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKGdyYXBoLm1fY29kZUJsb2NrLCBKSVRD
b2RlOjpERkdKSVQpLCAiICIsIHdoZW4sICI6XG4iKTsKKyAgICBkdW1wTW9kdWxlKG1vZHVsZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEVOQUJMRShGVExf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCShyZXZpc2lvbiAx
NDcyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDYgKzUyLDggQEAgcHVibGljOgogICAgIERGRzo6R3JhcGgmIGdyYXBoOwog
ICAgIExNb2R1bGUgbW9kdWxlOwogICAgIExWYWx1ZSBmdW5jdGlvbjsKKyAgICAKKyAgICB2b2lk
IGR1bXBTdGF0ZShjb25zdCBjaGFyKiB3aGVuKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpGVEwKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NzI3MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTAzLTI5ICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgZm91cnRoVGllcjogRlRMIEpJVCBzaG91
bGQgYmUgYWJsZSB0byBjb21waWxlIHRoZSBNYXJzYWdsaWEgcmFuZG9tIG51bWJlciBnZW5lcmF0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMzYz
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9qcy9yZWdyZXNzL21hcnNhZ2xpYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvanMvcmVncmVzcy9tYXJzYWdsaWEuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXJzYWdsaWEuanM6IEFkZGVkLgorICAgICAgICAobWFyc2Fn
bGlhKToKKwogMjAxMy0wMy0yMCAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNv
bT4KIAogICAgICAgICBBbGxvdyBwb3J0cyBzcGVjaWZpYyB0ZXh0IHRyYWNrIG1lbnUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtZXhwZWN0ZWQudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL21hcnNhZ2xp
YS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNz
L21hcnNhZ2xpYQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNl
cHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL21hcnNhZ2xpYS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEuaHRt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvcmVncmVzcy9tYXJzYWdsaWEu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9tYXJzYWdsaWEuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
InJlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXJzYWdsaWEuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9t
YXJzYWdsaWEuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL21hcnNhZ2xpYS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1IEBA
CitmdW5jdGlvbiBtYXJzYWdsaWEobV96LCBtX3csIG4pIHsKKyAgICB2YXIgcmVzdWx0OworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgbjsgKytpKSB7CisgICAgICAgIG1feiA9ICgzNjk2OSAqICht
X3ogJiA2NTUzNSkgKyAobV96ID4+IDE2KSkgfCAwOworICAgICAgICBtX3cgPSAoMTgwMDAgKiAo
bV93ICYgNjU1MzUpICsgKG1fdyA+PiAxNikpIHwgMDsKKyAgICAgICAgcmVzdWx0ID0gKChtX3og
PDwgMTYpICsgbV93KSB8IDA7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZhciBy
ZXN1bHQgPSAwOworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICByZXN1bHQgKz0g
bWFyc2FnbGlhKGksIGkgKyAxLCAxMDAwMDAwKTsKKworcHJpbnQocmVzdWx0KTsK
</data>
<flag name="review"
          id="217813"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>