<?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>85853</bug_id>
          
          <creation_ts>2012-05-07 19:52:12 -0700</creation_ts>
          <short_desc>Cache inheritorID on JSFunction</short_desc>
          <delta_ts>2012-05-12 14:55:18 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>618238</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-07 19:52:12 -0700</bug_when>
    <thetext>We should be able to remove one word from every object, if we can remove the inheritorID.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>618239</commentid>
    <comment_count>1</comment_count>
      <attachid>140652</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-07 19:53:13 -0700</bug_when>
    <thetext>Created attachment 140652
Needs debugging - Causes GC crashiness in layouttests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620353</commentid>
    <comment_count>2</comment_count>
      <attachid>141104</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-10 00:59:08 -0700</bug_when>
    <thetext>Created attachment 141104
Fix

No performance impact.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620356</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-10 01:03:03 -0700</bug_when>
    <thetext>Attachment 141104 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/JavaScriptCore/ChangeLog&apos;, u&apos;Source...&quot; exit_code: 1
Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:461:  Extra space before )  [whitespace/parens] [2]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620586</commentid>
    <comment_count>4</comment_count>
      <attachid>141104</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-10 08:03:00 -0700</bug_when>
    <thetext>Comment on attachment 141104
Fix

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

Seems fine to land this to move forward with nixing inheritorID, but see my two comments below -- I think there might be a better way to do this. Maybe discuss with Phil.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3042
&gt; +        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, scratchGPR));

Would it be better just to treat a NULL inheritorID in a constructor as a spec failure? That would save on code size. The DFG should only see constructors that have already been called once.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3061
&gt; +    case CreateThisInlined: {

I think you made inlining use a separate node type because:
(a) in the inline case, the callee can&apos;t be implicit based on call frame;
(b) in the non-inline case, SpeculateCellOperand would add a branch because the JIT doesn&apos;t know that the callee is always a JSCell.

Is that right?

Maybe I&apos;m out of whack with the state of the art in our inlining, but I think it&apos;s kind of a shame to change node types based on inlining.

I&apos;d prefer to see the callee always made an explicit node, with the JIT knowing the type of the callee register in a call frame. Then, we wouldn&apos;t need a separate node type depending on inlining, and inlining would work automatically based on virtual register remapping.

&gt;&gt; Source/JavaScriptCore/llint/LLIntSlowPaths.cpp:461
&gt;&gt; +    Structure* structure = constructor-&gt;cachedInheritorID(exec  );
&gt; 
&gt; Extra space before )  [whitespace/parens] [2]

Fixo, please.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620673</commentid>
    <comment_count>5</comment_count>
      <attachid>141104</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-10 10:13:17 -0700</bug_when>
    <thetext>Comment on attachment 141104
Fix

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

r=me as well.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1538
&gt; +                set(currentInstruction[1].u.operand, addToGraph(CreateThisInlined, getDirect(m_inlineStackTop-&gt;m_calleeVR)));

Just an observation: instead of getDirect() you could be putting a constant in here.  Probably makes no difference though, since at this point in the code the callee will be in a register anyway.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3042
&gt;&gt; +        slowPath.append(m_jit.branchTestPtr(MacroAssembler::Zero, scratchGPR));
&gt; 
&gt; Would it be better just to treat a NULL inheritorID in a constructor as a spec failure? That would save on code size. The DFG should only see constructors that have already been called once.

I&apos;m not sure if it would save code size.  To speculate, we have to perform the nullcheck anyway, right?  And we already have a slow path.

So a speculation check instead of a slow path branch would only be beneficial if the CFA could propagate the proof generated by the null check to a subsequent use of the inheritor ID.  But I get the feeling that the inheritor ID is only used once.

&gt;&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT32_64.cpp:3061
&gt;&gt; +    case CreateThisInlined: {
&gt; 
&gt; I think you made inlining use a separate node type because:
&gt; (a) in the inline case, the callee can&apos;t be implicit based on call frame;
&gt; (b) in the non-inline case, SpeculateCellOperand would add a branch because the JIT doesn&apos;t know that the callee is always a JSCell.
&gt; 
&gt; Is that right?
&gt; 
&gt; Maybe I&apos;m out of whack with the state of the art in our inlining, but I think it&apos;s kind of a shame to change node types based on inlining.
&gt; 
&gt; I&apos;d prefer to see the callee always made an explicit node, with the JIT knowing the type of the callee register in a call frame. Then, we wouldn&apos;t need a separate node type depending on inlining, and inlining would work automatically based on virtual register remapping.

I think we will be adding more of these types of things.  Inlining is special, because we typically have more information, and getting that information is cheaper!  Making a special node, in the current state of the DFG, means that we can create tighter code.

What does bug me about this code, though, is that it has to get the callee from somewhere instead of just using a constant.  But maybe that&apos;s OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620772</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-10 11:32:45 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Just an observation: instead of getDirect() you could be putting a constant in here.  Probably makes no difference though, since at this point in the code the callee will be in a register anyway.

* nod.  It is in a register, and I&apos;ve left the code working as it was previously (for op_get_callee), so which leave as-if for now.  Lemme know if you&apos;re not happy with that resolution.

&gt; So a speculation check instead of a slow path branch would only be beneficial if the CFA could propagate the proof generated by the null check to a subsequent use of the inheritor ID.  But I get the feeling that the inheritor ID is only used once.

Hmmm, seems worthwhile discussing further, and is a somewhat unrelated change anyway.  Will follow up offline to see if we want to file a bug to take further change here.

&gt; &gt; I&apos;d prefer to see the callee always made an explicit node, with the JIT knowing the type of the callee register in a call frame. Then, we wouldn&apos;t need a separate node type depending on inlining, and inlining would work automatically based on virtual register remapping.
&gt; 
&gt; I think we will be adding more of these types of things.  Inlining is special, because we typically have more information, and getting that information is cheaper!  Making a special node, in the current state of the DFG, means that we can create tighter code.

Ugh, completely agreed in principal but I&apos;ve just switched my code to use one version of CreateThis. :-)  There is 

&gt; What does bug me about this code, though, is that it has to get the callee from somewhere instead of just using a constant.  But maybe that&apos;s OK.

In the non-inlined case, the callee isn&apos;t a constant because the function executable may be shared between inline functions (e.g. closures).  Of course, in the future it might be an interesting direction to evolve towards DFG code being JSFunction specific, in which case callee could be known constant...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620790</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-10 11:39:47 -0700</bug_when>
    <thetext>Fixed in r116670</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622258</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-12 00:53:57 -0700</bug_when>
    <thetext>This caused a regression on an internal Apple site, &lt;rdar://problem/11434001&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622261</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-12 00:58:58 -0700</bug_when>
    <thetext>And iCloud.com, &lt;rdar://problem/11434252&gt;. Roll out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622264</commentid>
    <comment_count>10</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-12 01:02:52 -0700</bug_when>
    <thetext>It&apos;s not rolling out easily. Please take a look.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622421</commentid>
    <comment_count>11</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2012-05-12 14:55:18 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; It&apos;s not rolling out easily. Please take a look.

Will do.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140652</attachid>
            <date>2012-05-07 19:53:13 -0700</date>
            <delta_ts>2012-05-10 00:59:08 -0700</delta_ts>
            <desc>Needs debugging - Causes GC crashiness in layouttests.</desc>
            <filename>inheritorID.4.patch</filename>
            <type>text/plain</type>
            <size>35094</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxMTYzNzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTA0MSw2ICsxMDQxLDkgQEAKIAkJODY4ODBGNEMxNDM1
M0IyMTAwQjA4RDQyIC8qIERGR1NwZWN1bGF0aXZlSklUNjQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA7IHBhdGggPSBkZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2
OUQwNEFFMTE5M0I1NEQwMDgwMzQ3NSAvKiBDYWNoZWRUcmFuc2NlbmRlbnRhbEZ1bmN0aW9uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENhY2hlZFRyYW5zY2VuZGVudGFsRnVu
Y3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY5RUJDQjYwRThDNkQ0QTAw
ODcyMkNDIC8qIFJlc3VsdFR5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UmVzdWx0VHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkEwNTQ0NjE1NTY0
NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlci5hc20gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmFzbS5hc207IG5hbWUg
PSBMb3dMZXZlbEludGVycHJldGVyLmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkEwNTQ0NzE1NTY0NTFCMDA0
NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9
IExvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc207IHBhdGggPSBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyMzJfNjQuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk4NkEwNTQ0ODE1
NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbSAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsg
bmFtZSA9IExvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc207IHBhdGggPSBsbGludC9Mb3dMZXZlbElu
dGVycHJldGVyNjQuYXNtOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkE5MEVDRjBF
RTdENTFGMDBBQjM1MEQgLyogSklUQXJpdGhtZXRpYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKSVRBcml0aG1ldGljLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJODZBREQxNDMwRkRERUE5ODAwMDZFRUMyIC8qIEFSTXY3QXNzZW1ibGVyLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFSTXY3QXNzZW1ibGVyLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QUREMTQ0MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fz
c2VtYmxlckFSTXY3LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1hY3JvQXNz
ZW1ibGVyQVJNdjcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE0MzAsNyArMTQz
Myw2IEBACiAJCQkJNDVFMTJEODgwNkE0OUIwRjAwRTlERjg0IC8qIGpzYy5jcHAgKi8sCiAJCQkJ
QTc2N0ZGOUYxNEY0NTAyOTAwNzg5MDU5IC8qIEpTQ1R5cGVkQXJyYXlTdHVicy5oICovLAogCQkJ
CUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25maWcuaCAqLywKLQkJCQkwRjQ2ODA5QzE0
QkE3RjREMDBCRkUyNzIgLyogbGxpbnQgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlG
IC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAxRDY0OUYgLyogYXNzZW1ibGVyICov
LAogCQkJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTE0NDAs
NiArMTQ0Miw3IEBACiAJCQkJMTQyRTMxMkExMzRGRjBBNjAwQUZBREI1IC8qIGhlYXAgKi8sCiAJ
CQkJMTQyOUQ3N0EwRUQyMEQ3MzAwQjg5NjE5IC8qIGludGVycHJldGVyICovLAogCQkJCTE0MjlE
OTJDMEVEMjJENzAwMEI4OTYxOSAvKiBqaXQgKi8sCisJCQkJMEY0NjgwOUMxNEJBN0Y0RDAwQkZF
MjcyIC8qIGxsaW50ICovLAogCQkJCTdFMzlEODM3MEVDM0EzODgwMDNBRjExQSAvKiBwYXJzZXIg
Ki8sCiAJCQkJOTVBQjgzMUEwREE0MkM2OTAwQkM4M0YzIC8qIHByb2ZpbGVyICovLAogCQkJCTdF
RjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAvKiBydW50aW1lICovLApAQCAtMTQ4OSw2ICsxNDkyLDkg
QEAKIAkJCQkwRjQ2ODA5RjE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3BwICov
LAogCQkJCTBGNDY4MEEwMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5oICovLAog
CQkJCTBGNDY4MEExMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3Bw
ICovLAorCQkJCTg2QTA1NDQ2MTU1NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZlbEludGVycHJldGVy
LmFzbSAqLywKKwkJCQk4NkEwNTQ0NzE1NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2ZWxJbnRlcnBy
ZXRlcjMyXzY0LmFzbSAqLywKKwkJCQk4NkEwNTQ0ODE1NTY0NTFCMDA0NDUxNTcgLyogTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbSAqLywKIAkJCSk7CiAJCQluYW1lID0gbGxpbnQ7CiAJCQlzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MTksOCArNTE5
LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhlY1N0YXRlKiBleGVjLCBjbwogICAgICAgICB9
CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6IHsKICAgICAgICAgICAgIGludCByMCA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBjcmVhdGVfdGhpcyAlcyAlc1xuIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZXhlYywgcjEp
LmRhdGEoKSk7CisgICAgICAgICAgICBkYXRhTG9nKCJbJTRkXSBjcmVhdGVfdGhpcyAlc1xuIiwg
bG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCByMCkuZGF0YSgpKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY29udmVydF90aGlzOiB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAxMTYzNzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIG1hY3JvKG9wX2NyZWF0
ZV9hY3RpdmF0aW9uLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2luaXRfbGF6eV9yZWcsIDIpIFwK
ICAgICAgICAgbWFjcm8ob3BfY3JlYXRlX2FyZ3VtZW50cywgMikgXAotICAgICAgICBtYWNybyhv
cF9jcmVhdGVfdGhpcywgMykgXAorICAgICAgICBtYWNybyhvcF9jcmVhdGVfdGhpcywgMikgXAog
ICAgICAgICBtYWNybyhvcF9nZXRfY2FsbGVlLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2NvbnZl
cnRfdGhpcywgMikgXAogICAgICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24g
MTE2MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0MiwxNyArNDQyLDggQEAgQnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKEZ1bgogICAgIHByZXNlcnZlTGFzdFZhcigpOwog
CiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuYyA9IG5ld1RlbXBvcmFyeSgpOwotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY1By
b3RvID0gbmV3VGVtcG9yYXJ5KCk7Ci0KLSAgICAgICAgZW1pdE9wY29kZShvcF9nZXRfY2FsbGVl
KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOwotICAgICAg
ICAvLyBMb2FkIHByb3RvdHlwZS4KLSAgICAgICAgZW1pdEdldEJ5SWQoZnVuY1Byb3RvLmdldCgp
LCBmdW5jLmdldCgpLCBnbG9iYWxEYXRhKCktPnByb3BlcnR5TmFtZXMtPnByb3RvdHlwZSk7Ci0K
ICAgICAgICAgZW1pdE9wY29kZShvcF9jcmVhdGVfdGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChtX3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGZ1bmNQcm90by0+aW5kZXgoKSk7CiAgICAgfSBlbHNlIGlmICghY29kZUJsb2Nr
LT5pc1N0cmljdE1vZGUoKSAmJiAoZnVuY3Rpb25Cb2R5LT51c2VzVGhpcygpIHx8IGNvZGVCbG9j
ay0+dXNlc0V2YWwoKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSkgewogICAgICAgICBlbWl0
T3Bjb2RlKG9wX2NvbnZlcnRfdGhpcyk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCht
X3RoaXNSZWdpc3Rlci5pbmRleCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTE2MzcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
Nzc0LDE5ICs3NzQsMjAgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2lnbmVkIGlu
ZAogICAgICAgICBkZXN0aW5hdGlvbi5tZXJnZShQcmVkaWN0T2JqZWN0T3RoZXIpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgICAgICAgICAKLSAgICBjYXNlIENyZWF0ZVRoaXM6IHsKLSAg
ICAgICAgTm9kZSYgY2hpbGQgPSBtX2dyYXBoW25vZGUuY2hpbGQxKCldOworCisgICAgY2FzZSBD
cmVhdGVUaGlzOgorICAgICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KFByZWRpY3RGaW5hbE9i
amVjdCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDcmVhdGVUaGlzSW5saW5lZDogewog
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBzb3VyY2UgPSBmb3JOb2RlKG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICBBYnN0cmFjdFZhbHVlJiBkZXN0aW5hdGlvbiA9IGZvck5vZGUobm9kZUluZGV4KTsK
ICAgICAgICAgICAgIAotICAgICAgICBpZiAoY2hpbGQuc2hvdWxkU3BlY3VsYXRlRmluYWxPYmpl
Y3QoKSkKLSAgICAgICAgICAgIHNvdXJjZS5maWx0ZXIoUHJlZGljdEZpbmFsT2JqZWN0KTsKLSAg
ICAgICAgICAgIAorICAgICAgICBzb3VyY2UuZmlsdGVyKFByZWRpY3RGdW5jdGlvbik7CiAgICAg
ICAgIGRlc3RpbmF0aW9uLnNldChQcmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsK
ICAgICB9Ci0gICAgICAgICAgICAKKwogICAgIGNhc2UgTmV3T2JqZWN0OgogICAgICAgICBmb3JO
b2RlKG5vZGVJbmRleCkuc2V0KG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2Rl
T3JpZ2luKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKSk7CiAgICAgICAgIG1faGF2ZVN0cnVjdHVy
ZXMgPSB0cnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTM0LDggKzE1
MzQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICB9CiAKICAgICAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczogewotICAgICAgICAgICAgTm9kZUlu
ZGV4IG9wMSA9IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICAgICAg
ICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENyZWF0
ZVRoaXMsIG9wMSkpOworICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lKQorICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCBhZGRUb0dyYXBoKENyZWF0ZVRoaXNJbmxpbmVkLCBnZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+bV9jYWxsZWVWUikpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgYWRkVG9HcmFwaChDcmVhdGVU
aGlzKSk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jcmVhdGVfdGhpcyk7CiAgICAgICAg
IH0KICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5
cGUuaAkocmV2aXNpb24gMTE2MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw2ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgREZHIHsKICAgICAvKiBOb2RlcyBmb3IgaGFuZGxpbmcgZnVuY3Rpb25zIChi
b3RoIGFzIGNhbGwgYW5kIGFzIGNvbnN0cnVjdCkuICovXAogICAgIG1hY3JvKENvbnZlcnRUaGlz
LCBOb2RlUmVzdWx0SlMpIFwKICAgICBtYWNybyhDcmVhdGVUaGlzLCBOb2RlUmVzdWx0SlMpIC8q
IE5vdGUgdGhpcyBpcyBub3QgTXVzdEdlbmVyYXRlIHNpbmNlIHdlJ3JlIHJldHVybmluZyBpdCBh
bnl3YXkuICovIFwKKyAgICBtYWNybyhDcmVhdGVUaGlzSW5saW5lZCwgTm9kZVJlc3VsdEpTKSAv
KiBOb3RlIHRoaXMgaXMgbm90IE11c3RHZW5lcmF0ZSBzaW5jZSB3ZSdyZSByZXR1cm5pbmcgaXQg
YW55d2F5LiAqLyBcCiAgICAgbWFjcm8oR2V0Q2FsbGVlLCBOb2RlUmVzdWx0SlMpIFwKICAgICBc
CiAgICAgLyogTm9kZXMgZm9yIGxvY2FsIHZhcmlhYmxlIGFjY2Vzcy4gKi9cCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDExNjM3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIwOSw3ICsyMDksNyBAQCBFbmNvZGVkSlNWYWx1ZSBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbkNvCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZE9wKS50b1RoaXNPYmplY3QoZXhlYykpOwogfQogCi1pbmxpbmUgSlNDZWxsKiBjcmVh
dGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBwcm90b3R5cGUsIEpTRnVuY3Rpb24qIGNv
bnN0cnVjdG9yKQoraW5saW5lIEpTQ2VsbCogY3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpT
RnVuY3Rpb24qIGNvbnN0cnVjdG9yKQogewogI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICBDb25z
dHJ1Y3REYXRhIGNvbnN0cnVjdERhdGE7CkBAIC0yMTksMjkgKzIxOSwyNCBAQCBpbmxpbmUgSlND
ZWxsKiBjcmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlCiAgICAgSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhID0gZXhlYy0+Z2xvYmFsRGF0YSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJmdsb2JhbERhdGEsIGV4ZWMpOwogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAg
aWYgKHByb3RvdHlwZS0+aXNPYmplY3QoKSkKLSAgICAgICAgc3RydWN0dXJlID0gYXNPYmplY3Qo
cHJvdG90eXBlKS0+aW5oZXJpdG9ySUQoZ2xvYmFsRGF0YSk7Ci0gICAgZWxzZQotICAgICAgICBz
dHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0LT5lbXB0eU9iamVj
dFN0cnVjdHVyZSgpOwotICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0
b3ItPmNhY2hlZEluaGVyaXRvcklEKGV4ZWMpOwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9i
amVjdChleGVjLCBzdHJ1Y3R1cmUpOwogfQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uQ3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogcHJvdG90eXBlKQorSlNDZWxs
KiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKIAotICAgIHJl
dHVybiBjcmVhdGVUaGlzKGV4ZWMsIHByb3RvdHlwZSwganNDYXN0PEpTRnVuY3Rpb24qPihleGVj
LT5jYWxsZWUoKSkpOworICAgIHJldHVybiBjcmVhdGVUaGlzKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZXhlYy0+Y2FsbGVlKCkpKTsKIH0KIAotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJh
dGlvbkNyZWF0ZVRoaXNJbmxpbmVkKEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBwcm90b3R5cGUs
IEpTQ2VsbCogY29uc3RydWN0b3IpCitKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3Jl
YXRlVGhpc0lubGluZWQoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNvbnN0cnVjdG9yKQogewog
ICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9ICZleGVjLT5nbG9iYWxEYXRhKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcihnbG9iYWxEYXRhLCBleGVjKTsKICAgICAKLSAg
ICByZXR1cm4gY3JlYXRlVGhpcyhleGVjLCBwcm90b3R5cGUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4o
Y29uc3RydWN0b3IpKTsKKyAgICByZXR1cm4gY3JlYXRlVGhpcyhleGVjLCBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNvbnN0cnVjdG9yKSk7CiB9CiAKIEpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC05Nyw4ICs5Nyw4
IEBAIHR5cGVkZWYgdm9pZCogREZHX09QRVJBVElPTiAoKlBfREZHT3BlcmEKIAogLy8gVGhlc2Ug
cm91dGluZXMgYXJlIHByb3ZpZGUgY2FsbGJhY2tzIG91dCB0byBDKysgaW1wbGVtZW50YXRpb25z
IG9mIG9wZXJhdGlvbnMgdG9vIGNvbXBsZXggdG8gSklULgogSlNDZWxsKiBERkdfT1BFUkFUSU9O
IG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBv
cGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSosIEpTQ2VsbCogZW5jb2RlZE9wMSk7Ci1KU0Nl
bGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQoRXhlY1N0YXRlKiwg
SlNDZWxsKiBlbmNvZGVkT3AxLCBKU0NlbGwqIGNvbnN0cnVjdG9yKTsKK0pTQ2VsbCogREZHX09Q
RVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSopOworSlNDZWxsKiBERkdfT1BF
UkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXNJbmxpbmVkKEV4ZWNTdGF0ZSosIEpTQ2VsbCogY29u
c3RydWN0b3IpOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRpb25Db252ZXJ0
VGhpcyhFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxKTsKIEVuY29kZWRKU1Zh
bHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uVmFsdWVBZGQoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jb2RlZE9wMSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CiBFbmNvZGVkSlNW
YWx1ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvblZhbHVlQWRkTm90TnVtYmVyKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDEsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRPcDIpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25Q
aGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODMsNiArNDgzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgICAg
ICAgICAgCiAgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICAgICAgY2FzZSBDcmVhdGVUaGlz
SW5saW5lZDoKICAgICAgICAgY2FzZSBOZXdPYmplY3Q6IHsKICAgICAgICAgICAgIGNoYW5nZWQg
fD0gc2V0UHJlZGljdGlvbihQcmVkaWN0RmluYWxPYmplY3QpOwogICAgICAgICAgICAgY2hhbmdl
ZCB8PSBtZXJnZURlZmF1bHRGbGFncyhub2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE2
MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyOSwzMiArMzAyOSw1MyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRl
IGJlY2F1c2Ugd2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKICAg
ICAgICAgLy8gb3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCiAg
ICAgICAgIAotICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBwcm90byh0aGlzLCBub2RlLmNo
aWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgR1BS
VGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cyk7CiAgICAgICAgIAotICAgICAgICBHUFJSZWcgcHJvdG9HUFIgPSBwcm90by5ncHIoKTsKLSAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKICAgICAgICAgR1BSUmVnIHNj
cmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVz
dWx0LmdwcigpOwogICAgICAgICAKLSAgICAgICAgcHJvdG8udXNlKCk7Ci0gICAgICAgIAorICAg
ICAgICAvLyBMb2FkIHRoZSBpbmhlcml0b3JJRC4gSWYgdGhlIGluaGVyaXRvcklEIGlzIG5vdCBz
ZXQsIGdvIHRvIHNsb3cgcGF0aC4KKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mQ2FjaGVkSW5oZXJpdG9y
SUQoKSksIHNjcmF0Y2hHUFIpOwogICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAotICAgICAgICAvLyBOZWVk
IHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0LiBJZiB3ZSBoYXZlIHJl
YXNvbiB0byBiZWxpZXZlCi0gICAgICAgIC8vIHRoYXQgaXQncyBhIEZpbmFsT2JqZWN0IHRoZW4g
d2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3ZQotICAgICAgICAvLyBk
byB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAgICAgaWYgKGF0KG5vZGUu
Y2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsKLSAgICAgICAgICAgIGlm
ICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUuY2hpbGQxKCkp
Lm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVjayhCYWRUeXBlLCBKU1Zh
bHVlU291cmNlOjp1bmJveGVkQ2VsbChwcm90b0dQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHByb3RvR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJkpTRmluYWxPYmplY3Q6OnNfaW5mbykpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9H
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hHUFIsIHJl
c3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOworICAgICAgICAKKyAgICAgICAgTWFjcm9B
c3NlbWJsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKKyAgICAgICAgCisgICAgICAgIHNs
b3dQYXRoLmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbm9kZS5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJz
KHJlc3VsdEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywg
cmVzdWx0R1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwor
ICAgICAgICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICAv
LyBMb2FkIHRoZSBpbmhlcml0b3JJRCAodGhlIFN0cnVjdHVyZSB0aGF0IG9iamVjdHMgd2hvIGhh
dmUgcHJvdG9HUFIgYXMgdGhlIHByb3RvdHlwZQotICAgICAgICAvLyB1c2UgdG8gcmVmZXIgdG8g
dGhhdCBwcm90b3R5cGUpLiBJZiB0aGUgaW5oZXJpdG9ySUQgaXMgbm90IHNldCwgZ28gdG8gc2xv
dyBwYXRoLgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHBy
b3RvR1BSLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwgc2NyYXRjaEdQUik7Cisg
ICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIGNhc2UgQ3JlYXRlVGhpc0lubGluZWQ6IHsKKyAgICAgICAgLy8g
Tm90ZSB0aGF0IHRoZXJlIGlzIG5vdCBzbyBtdWNoIHByb2ZpdCB0byBzcGVjdWxhdGUgaGVyZS4g
VGhlIG9ubHkgdGhpbmdzIHdlCisgICAgICAgIC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEpIHRoYXQg
aXQncyBhIGNlbGwsIHNpbmNlIHRoYXQgZWxpbWluYXRlcyBjZWxsIGNoZWNrcworICAgICAgICAv
LyBsYXRlciBpZiB0aGUgcHJvdG8gaXMgcmV1c2VkLCBhbmQgKDIpIGlmIHdlIGhhdmUgYSBGaW5h
bE9iamVjdCBwcmVkaWN0aW9uCisgICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRlIGJlY2F1c2Ug
d2Ugd2FudCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKKyAgICAgICAgLy8g
b3RoZXJ3aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCisgICAgICAgIAor
ICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5jaGlsZDEoKSk7
CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFy
eSBzY3JhdGNoKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNh
bGxlZS5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgR1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAKKyAgICAg
ICAgLy8gTG9hZCB0aGUgaW5oZXJpdG9ySUQuIElmIHRoZSBpbmhlcml0b3JJRCBpcyBub3Qgc2V0
LCBnbyB0byBzbG93IHBhdGguCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklE
KCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQ
YXRoOwogICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fz
c2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOwogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9j
YXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQ
YXRoKTsKQEAgLTMwNjMsMTYgKzMwODQsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwog
ICAgICAgICAKKyAgICAgICAgQVNTRVJUKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUp
OwogICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBp
ZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsIHJlc3VsdEdQUiwgcHJvdG9HUFIsIG5v
ZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSk7Ci0gICAgICAgIGVs
c2UKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSLCBwcm90b0dQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhp
c0lubGluZWQsIHJlc3VsdEdQUiwgY2FsbGVlR1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJl
Z2lzdGVycyhyZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7
CiAgICAgICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgs
IFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0
R1BSLCBtX2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxMTYzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDUzLDMyICszMDUzLDUzIEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgLy8gdGhlbiB3ZSBz
cGVjdWxhdGUgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCByZWNvbXBpbGVkIGlmIGl0IGlzbid0IChz
aW5jZQogICAgICAgICAvLyBvdGhlcndpc2Ugd2UnZCBzdGFydCB0YWtpbmcgc2xvdyBwYXRoIGEg
bG90KS4KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHByb3RvKHRoaXMs
IG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAg
ICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEdQUlJlZyBwcm90b0dQUiA9IHByb3RvLmdw
cigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwogICAgICAgICBH
UFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRH
UFIgPSByZXN1bHQuZ3ByKCk7CisKKyAgICAgICAgLy8gTG9hZCB0aGUgaW5oZXJpdG9ySUQuIElm
IHRoZSBpbmhlcml0b3JJRCBpcyBub3Qgc2V0LCBnbyB0byBzbG93IHBhdGguCisgICAgICAgIG1f
aml0LmxvYWRQdHIoSklUQ29tcGlsZXI6OmFkZHJlc3NGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihSZWdpc3RlckZpbGU6OkNhbGxlZSkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgbV9q
aXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3JhdGNoR1BSLCBKU0Z1bmN0aW9u
OjpvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOworICAgICAgICBzbG93UGF0aC5hcHBlbmQo
bV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxlcjo6WmVybywgc2NyYXRjaEdQUikpOwog
ICAgICAgICAKLSAgICAgICAgcHJvdG8udXNlKCk7CisgICAgICAgIGVtaXRBbGxvY2F0ZUpTRmlu
YWxPYmplY3Qoc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CiAg
ICAgICAgIAotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CisgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAgICAgICAgIAot
ICAgICAgICAvLyBOZWVkIHRvIHZlcmlmeSB0aGF0IHRoZSBwcm90b3R5cGUgaXMgYW4gb2JqZWN0
LiBJZiB3ZSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlCi0gICAgICAgIC8vIHRoYXQgaXQncyBhIEZp
bmFsT2JqZWN0IHRoZW4gd2Ugc3BlY3VsYXRlIG9uIHRoYXQgZGlyZWN0bHkuIE90aGVyd2lzZSB3
ZQotICAgICAgICAvLyBkbyB0aGUgc2xvdyAoc3RydWN0dXJlLWJhc2VkKSBjaGVjay4KLSAgICAg
ICAgaWYgKGF0KG5vZGUuY2hpbGQxKCkpLnNob3VsZFNwZWN1bGF0ZUZpbmFsT2JqZWN0KCkpIHsK
LSAgICAgICAgICAgIGlmICghaXNGaW5hbE9iamVjdFByZWRpY3Rpb24obV9zdGF0ZS5mb3JOb2Rl
KG5vZGUuY2hpbGQxKCkpLm1fdHlwZSkpCi0gICAgICAgICAgICAgICAgc3BlY3VsYXRpb25DaGVj
ayhCYWRUeXBlLCBKU1ZhbHVlUmVncyhwcm90b0dQUiksIG5vZGUuY2hpbGQxKCksIG1faml0LmJy
YW5jaFB0cihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KHByb3RvR1BSLCBKU0NlbGw6OmNsYXNzSW5mb09mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW1QdHIoJkpTRmluYWxPYmplY3Q6OnNfaW5mbykpKTsKLSAgICAgICAgfSBlbHNlIHsK
LSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9H
UFIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCBzY3JhdGNoR1BSKTsKLSAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2g4KE1hY3JvQXNzZW1ibGVyOjpCZWxvdywgTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgU3RydWN0dXJlOjp0eXBlSW5mb1R5cGVP
ZmZzZXQoKSksIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoT2JqZWN0VHlwZSkpKTsKLSAg
ICAgICAgfQorICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CisgICAgICAgIAorICAgICAg
ICBBU1NFUlQoIW5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICBzaWxl
bnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKG9w
ZXJhdGlvbkNyZWF0ZVRoaXMsIHJlc3VsdEdQUik7CisgICAgICAgIHNpbGVudEZpbGxBbGxSZWdp
c3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgCisgICAgICAgIGRvbmUubGluaygmbV9qaXQpOwog
ICAgICAgICAKLSAgICAgICAgLy8gTG9hZCB0aGUgaW5oZXJpdG9ySUQgKHRoZSBTdHJ1Y3R1cmUg
dGhhdCBvYmplY3RzIHdobyBoYXZlIHByb3RvR1BSIGFzIHRoZSBwcm90b3R5cGUKLSAgICAgICAg
Ly8gdXNlIHRvIHJlZmVyIHRvIHRoYXQgcHJvdG90eXBlKS4gSWYgdGhlIGluaGVyaXRvcklEIGlz
IG5vdCBzZXQsIGdvIHRvIHNsb3cgcGF0aC4KLSAgICAgICAgbV9qaXQubG9hZFB0cihNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNPYmplY3Q6Om9mZnNldE9mSW5oZXJpdG9ySUQo
KSksIHNjcmF0Y2hHUFIpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxl
SW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBjYXNlIENyZWF0ZVRoaXNJbmxp
bmVkOiB7CisgICAgICAgIC8vIE5vdGUgdGhhdCB0aGVyZSBpcyBub3Qgc28gbXVjaCBwcm9maXQg
dG8gc3BlY3VsYXRlIGhlcmUuIFRoZSBvbmx5IHRoaW5ncyB3ZQorICAgICAgICAvLyBzcGVjdWxh
dGUgb24gYXJlICgxKSB0aGF0IGl0J3MgYSBjZWxsLCBzaW5jZSB0aGF0IGVsaW1pbmF0ZXMgY2Vs
bCBjaGVja3MKKyAgICAgICAgLy8gbGF0ZXIgaWYgdGhlIHByb3RvIGlzIHJldXNlZCwgYW5kICgy
KSBpZiB3ZSBoYXZlIGEgRmluYWxPYmplY3QgcHJlZGljdGlvbgorICAgICAgICAvLyB0aGVuIHdl
IHNwZWN1bGF0ZSBiZWNhdXNlIHdlIHdhbnQgdG8gZ2V0IHJlY29tcGlsZWQgaWYgaXQgaXNuJ3Qg
KHNpbmNlCisgICAgICAgIC8vIG90aGVyd2lzZSB3ZSdkIHN0YXJ0IHRha2luZyBzbG93IHBhdGgg
YSBsb3QpLgorICAgICAgICAKKyAgICAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgY2FsbGVlKHRo
aXMsIG5vZGUuY2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwor
ICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgCisgICAgICAgIEdQ
UlJlZyBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRjaC5ncHIo
KTsKKyAgICAgICAgCisgICAgICAgIC8vIExvYWQgdGhlIGluaGVyaXRvcklELiBJZiB0aGUgaW5o
ZXJpdG9ySUQgaXMgbm90IHNldCwgZ28gdG8gc2xvdyBwYXRoLgorICAgICAgICBtX2ppdC5sb2Fk
UHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKGNhbGxlZUdQUiwgSlNGdW5jdGlvbjo6b2Zmc2V0
T2ZDYWNoZWRJbmhlcml0b3JJRCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hHUFIpKTsKICAgICAgICAg
CiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3Qoc2NyYXRjaEdQUiwgcmVzdWx0R1BS
LCBzY3JhdGNoR1BSLCBzbG93UGF0aCk7CkBAIC0zMDg3LDE2ICszMTA4LDE0IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgCiAgICAgICAgIHNsb3dQ
YXRoLmxpbmsoJm1faml0KTsKICAgICAgICAgCisgICAgICAgIEFTU0VSVChub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVz
dWx0R1BSKTsKLSAgICAgICAgaWYgKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCi0g
ICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZVRoaXNJbmxpbmVkLCByZXN1
bHRHUFIsIHByb3RvR1BSLCBub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUu
Z2V0KCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlv
bkNyZWF0ZVRoaXMsIHJlc3VsdEdQUiwgcHJvdG9HUFIpOworICAgICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbkNyZWF0ZVRoaXNJbmxpbmVkLCByZXN1bHRHUFIsIGNhbGxlZUdQUik7CiAgICAg
ICAgIHNpbGVudEZpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKICAgICAgICAgCiAgICAgICAg
IGRvbmUubGluaygmbV9qaXQpOwogICAgICAgICAKLSAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4LCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAg
ICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTE2MzcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgwOSw3
ICs0ODA5LDYgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgKi8KIAogICAgICAgICBp
bnQgdGhpc1JlZ2lzdGVyID0gdlBDWzFdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHByb3RvUmVn
aXN0ZXIgPSB2UENbMl0udS5vcGVyYW5kOwogCiAgICAgICAgIEpTRnVuY3Rpb24qIGNvbnN0cnVj
dG9yID0ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsRnJhbWUtPmNhbGxlZSgpKTsKICNpZiAhQVNT
RVJUX0RJU0FCTEVECkBAIC00ODE3LDEyICs0ODE2LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoK
ICAgICAgICAgQVNTRVJUKGNvbnN0cnVjdG9yLT5tZXRob2RUYWJsZSgpLT5nZXRDb25zdHJ1Y3RE
YXRhKGNvbnN0cnVjdG9yLCBjb25zdHJ1Y3REYXRhKSA9PSBDb25zdHJ1Y3RUeXBlSlMpOwogI2Vu
ZGlmCiAKLSAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAgICAgIEpTVmFsdWUgcHJv
dG8gPSBjYWxsRnJhbWUtPnIocHJvdG9SZWdpc3RlcikuanNWYWx1ZSgpOwotICAgICAgICBpZiAo
cHJvdG8uaXNPYmplY3QoKSkKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0KHByb3Rv
KS0+aW5oZXJpdG9ySUQoY2FsbEZyYW1lLT5nbG9iYWxEYXRhKCkpOwotICAgICAgICBlbHNlCi0g
ICAgICAgICAgICBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0
LT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGNvbnN0cnVjdG9yLT5jYWNoZWRJbmhlcml0b3JJRChjYWxsRnJhbWUpOwogICAgICAgICBjYWxs
RnJhbWUtPnVuY2hlY2tlZFIodGhpc1JlZ2lzdGVyKSA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGNh
bGxGcmFtZSwgc3RydWN0dXJlKTsKIAogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9j
cmVhdGVfdGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzMzJfNjQuY3BwCShyZXZpc2lvbiAxMTYzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzIsMzUgKzE1MzIs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2NhbGxlZShJbnN0cnVjdGlvbgogCiB2b2lkIEpJ
VDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QxLCBy
ZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQsIHJlZ1QxKTsKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2Vs
bDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJ
Zk5vdE9iamVjdChyZWdUMSkpOwotICAgIAotICAgIC8vIG5vdyB3ZSBrbm93IHRoYXQgdGhlIHBy
b3RvdHlwZSBpcyBhbiBvYmplY3QsIGJ1dCB3ZSBkb24ndCBrbm93IGlmIGl0J3MgZ290IGFuCi0g
ICAgLy8gaW5oZXJpdG9yIElECi0gICAgCi0gICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU09i
amVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwgcmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2Fs
bEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMCk7CisgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkp
LCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoVGVzdFB0cihaZXJvLCByZWdUMikpOwog
ICAgIAogICAgIC8vIG5vdyByZWdUMiBjb250YWlucyB0aGUgaW5oZXJpdG9ySUQsIHdoaWNoIGlz
IHRoZSBzdHJ1Y3R1cmUgdGhhdCB0aGUgbmV3bHkKICAgICAvLyBhbGxvY2F0ZWQgb2JqZWN0IHdp
bGwgaGF2ZS4KICAgICAKICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHJlZ1QyLCByZWdU
MCwgcmVnVDEpOwotCiAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kLCByZWdUMCk7CiB9CiAKIHZvaWQgSklUOjplbWl0U2xvd19vcF9jcmVhdGVfdGhpcyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOyAvLyBub3QgYSBjZWxsCi0gICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOyAvLyBub3QgYW4gb2JqZWN0CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBk
b2Vzbid0IGhhdmUgYW4gaW5oZXJpdG9yIElECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBh
bGxvY2F0aW9uIGZhaWxlZAotICAgIHVuc2lnbmVkIHByb3RvUmVnaXN0ZXIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGVtaXRMb2FkKHByb3RvUmVnaXN0ZXIsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV90
aGlzKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMSwgcmVnVDApOwogICAgIHN0dWJD
YWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTE2MzcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTI3MiwzMyArMTI3MiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfY2FsbGVlKElu
c3RydWN0aW9uCiAKIHZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgZW1pdEp1bXBTbG93Q2FzZUlm
Tm90SlNDZWxsKHJlZ1QyLCBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKTsKLSAgICBs
b2FkUHRyKEFkZHJlc3MocmVnVDIsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLCByZWdUMSk7
Ci0gICAgYWRkU2xvd0Nhc2UoZW1pdEp1bXBJZk5vdE9iamVjdChyZWdUMSkpOwotICAgIAotICAg
IC8vIG5vdyB3ZSBrbm93IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QsIGJ1dCB3ZSBk
b24ndCBrbm93IGlmIGl0J3MgZ290IGFuCi0gICAgLy8gaW5oZXJpdG9yIElECi0gICAgCi0gICAg
bG9hZFB0cihBZGRyZXNzKHJlZ1QyLCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwg
cmVnVDIpOworICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6
Q2FsbGVlLCByZWdUMCk7CisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpv
ZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkpLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJh
bmNoVGVzdFB0cihaZXJvLCByZWdUMikpOwogICAgIAogICAgIC8vIG5vdyByZWdUMiBjb250YWlu
cyB0aGUgaW5oZXJpdG9ySUQsIHdoaWNoIGlzIHRoZSBzdHJ1Y3R1cmUgdGhhdCB0aGUgbmV3bHkK
ICAgICAvLyBhbGxvY2F0ZWQgb2JqZWN0IHdpbGwgaGF2ZS4KICAgICAKICAgICBlbWl0QWxsb2Nh
dGVKU0ZpbmFsT2JqZWN0KHJlZ1QyLCByZWdUMCwgcmVnVDEpOwotICAgIAogICAgIGVtaXRQdXRW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAKIHZv
aWQgSklUOjplbWl0U2xvd19vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGxp
bmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpOyAvLyBub3QgYSBjZWxsCi0gICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBub3QgYW4gb2Jq
ZWN0CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBkb2Vzbid0IGhhdmUgYW4gaW5oZXJpdG9y
IElECiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOyAvLyBhbGxvY2F0aW9uIGZhaWxlZAogICAgIEpJ
VFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jcmVhdGVfdGhpcyk7Ci0gICAgc3R1YkNh
bGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEpOwog
ICAgIHN0dWJDYWxsLmNhbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCShyZXZpc2lvbiAxMTYz
NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTI4NiwxMiArMTI4Niw3IEBAIERFRklORV9TVFVCX0ZVTkNUSU9OKEVuY29kZWRK
U1ZhbHVlLCBvcF8KICAgICBBU1NFUlQoY29uc3RydWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENv
bnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVK
Uyk7CiAjZW5kaWYKIAotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwotICAgIEpTVmFsdWUgcHJv
dG8gPSBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgpOwotICAgIGlmIChwcm90by5pc09iamVj
dCgpKQotICAgICAgICBzdHJ1Y3R1cmUgPSBhc09iamVjdChwcm90byktPmluaGVyaXRvcklEKCpz
dGFja0ZyYW1lLmdsb2JhbERhdGEpOwotICAgIGVsc2UKLSAgICAgICAgc3RydWN0dXJlID0gY29u
c3RydWN0b3ItPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUoKTsK
KyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5jYWNoZWRJbmhlcml0b3JJ
RChjYWxsRnJhbWUpOwogICAgIEpTVmFsdWUgcmVzdWx0ID0gY29uc3RydWN0RW1wdHlPYmplY3Qo
Y2FsbEZyYW1lLCBzdHJ1Y3R1cmUpOwogCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0
aHMuY3BwCShyZXZpc2lvbiAxMTYzNzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTgsMTMgKzQ1OCw3IEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfdGgKICAgICBBU1NFUlQoY29uc3Ry
dWN0b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0
cnVjdERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7CiAjZW5kaWYKICAgICAKLSAgICBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZTsKLSAgICBKU1ZhbHVlIHByb3RvID0gTExJTlRfT1AoMikuanNWYWx1ZSgp
OwotICAgIGlmIChwcm90by5pc09iamVjdCgpKQotICAgICAgICBzdHJ1Y3R1cmUgPSBhc09iamVj
dChwcm90byktPmluaGVyaXRvcklEKGdsb2JhbERhdGEpOwotICAgIGVsc2UKLSAgICAgICAgc3Ry
dWN0dXJlID0gY29uc3RydWN0b3ItPnNjb3BlKCktPmdsb2JhbE9iamVjdC0+ZW1wdHlPYmplY3RT
dHJ1Y3R1cmUoKTsKLSAgICAKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9y
LT5jYWNoZWRJbmhlcml0b3JJRChleGVjICApOwogICAgIExMSU5UX1JFVFVSTihjb25zdHJ1Y3RF
bXB0eU9iamVjdChleGVjLCBzdHJ1Y3R1cmUpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20J
KHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0zNDMsMjMgKzM0MywxOCBA
QCBfbGxpbnRfb3BfY3JlYXRlX2FyZ3VtZW50czoKIAogX2xsaW50X29wX2NyZWF0ZV90aGlzOgog
ICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkaSA4W1BDXSwgdDAKLSAgICBhc3NlcnROb3RD
b25zdGFudCh0MCkKLSAgICBiaW5lcSBUYWdPZmZzZXRbY2ZyLCB0MCwgOF0sIENlbGxUYWcsIC5v
cENyZWF0ZVRoaXNTbG93Ci0gICAgbG9hZGkgUGF5bG9hZE9mZnNldFtjZnIsIHQwLCA4XSwgdDAK
LSAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDEKLSAgICBiYmIgU3RydWN0dXJl
OjptX3R5cGVJbmZvICsgVHlwZUluZm86Om1fdHlwZVt0MV0sIE9iamVjdFR5cGUsIC5vcENyZWF0
ZVRoaXNTbG93Ci0gICAgbG9hZHAgSlNPYmplY3Q6Om1faW5oZXJpdG9ySURbdDBdLCB0MgorICAg
IGxvYWRwIENhbGxlZVtjZnJdLCB0MAorICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fY2FjaGVkSW5o
ZXJpdG9ySURbdDBdLCB0MgogICAgIGJ0cHogdDIsIC5vcENyZWF0ZVRoaXNTbG93CiAgICAgYWxs
b2NhdGVCYXNpY0pTT2JqZWN0KEpTRmluYWxPYmplY3RTaXplQ2xhc3NJbmRleCwgSlNHbG9iYWxE
YXRhOjpqc0ZpbmFsT2JqZWN0Q2xhc3NJbmZvLCB0MiwgdDAsIHQxLCB0MywgLm9wQ3JlYXRlVGhp
c1Nsb3cpCiAgICAgbG9hZGkgNFtQQ10sIHQxCiAgICAgc3RvcmVpIENlbGxUYWcsIFRhZ09mZnNl
dFtjZnIsIHQxLCA4XQogICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQxLCA4XQot
ICAgIGRpc3BhdGNoKDMpCisgICAgZGlzcGF0Y2goMikKIAogLm9wQ3JlYXRlVGhpc1Nsb3c6CiAg
ICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfY3JlYXRlX3RoaXMpCi0gICAgZGlzcGF0
Y2goMykKKyAgICBkaXNwYXRjaCgyKQogCiAKIF9sbGludF9vcF9nZXRfY2FsbGVlOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXI2NC5hc20JKHJldmlzaW9uIDExNjM3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yMjEsMjIgKzIy
MSwxNyBAQCBfbGxpbnRfb3BfY3JlYXRlX2FyZ3VtZW50czoKIAogX2xsaW50X29wX2NyZWF0ZV90
aGlzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBsb2FkaXMgMTZbUEIsIFBDLCA4XSwgdDAK
LSAgICBhc3NlcnROb3RDb25zdGFudCh0MCkKLSAgICBsb2FkcCBbY2ZyLCB0MCwgOF0sIHQwCi0g
ICAgYnRwbnogdDAsIHRhZ01hc2ssIC5vcENyZWF0ZVRoaXNTbG93Ci0gICAgbG9hZHAgSlNDZWxs
OjptX3N0cnVjdHVyZVt0MF0sIHQxCi0gICAgYmJiIFN0cnVjdHVyZTo6bV90eXBlSW5mbyArIFR5
cGVJbmZvOjptX3R5cGVbdDFdLCBPYmplY3RUeXBlLCAub3BDcmVhdGVUaGlzU2xvdwotICAgIGxv
YWRwIEpTT2JqZWN0OjptX2luaGVyaXRvcklEW3QwXSwgdDIKKyAgICBsb2FkcCBDYWxsZWVbY2Zy
XSwgdDAKKyAgICBsb2FkcCBKU0Z1bmN0aW9uOjptX2NhY2hlZEluaGVyaXRvcklEW3QwXSwgdDIK
ICAgICBidHB6IHQyLCAub3BDcmVhdGVUaGlzU2xvdwogICAgIGFsbG9jYXRlQmFzaWNKU09iamVj
dChKU0ZpbmFsT2JqZWN0U2l6ZUNsYXNzSW5kZXgsIEpTR2xvYmFsRGF0YTo6anNGaW5hbE9iamVj
dENsYXNzSW5mbywgdDIsIHQwLCB0MSwgdDMsIC5vcENyZWF0ZVRoaXNTbG93KQogICAgIGxvYWRp
cyA4W1BCLCBQQywgOF0sIHQxCiAgICAgc3RvcmVwIHQwLCBbY2ZyLCB0MSwgOF0KLSAgICBkaXNw
YXRjaCgzKQorICAgIGRpc3BhdGNoKDIpCiAKIC5vcENyZWF0ZVRoaXNTbG93OgogICAgIGNhbGxT
bG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2NyZWF0ZV90aGlzKQotICAgIGRpc3BhdGNoKDMpCisg
ICAgZGlzcGF0Y2goMikKIAogCiBfbGxpbnRfb3BfZ2V0X2NhbGxlZToKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxMTYzNzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODIsNiArODIsNyBAQCBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgCiAgICAgOiBCYXNlKGV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlKQogICAg
ICwgbV9leGVjdXRhYmxlKCkKICAgICAsIG1fc2NvcGVDaGFpbihleGVjLT5nbG9iYWxEYXRhKCks
IHRoaXMsIGdsb2JhbE9iamVjdC0+Z2xvYmFsU2NvcGVDaGFpbigpKQorICAgICwgbV9jYWNoZWRJ
bmhlcml0b3JJRCgwKQogewogfQogCkBAIC04OSw2ICs5MCw3IEBAIEpTRnVuY3Rpb246OkpTRnVu
Y3Rpb24oRXhlY1N0YXRlKiBleGVjLCAKICAgICA6IEJhc2UoZXhlYy0+Z2xvYmFsRGF0YSgpLCBz
Y29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5jdGlvblN0cnVjdHVyZSgpKQogICAgICwg
bV9leGVjdXRhYmxlKGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZXhlY3V0YWJsZSkKICAgICAs
IG1fc2NvcGVDaGFpbihleGVjLT5nbG9iYWxEYXRhKCksIHRoaXMsIHNjb3BlQ2hhaW5Ob2RlKQor
ICAgICwgbV9jYWNoZWRJbmhlcml0b3JJRCgwKQogewogfQogCkBAIC0xMTIsNiArMTE0LDE2IEBA
IHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oRXhlY1N0YXQKICAgICBwdXREaXJlY3RP
ZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzY29wZUNoYWluTm9kZS0+Z2xvYmFsT2JqZWN0LT5m
dW5jdGlvbk5hbWVPZmZzZXQoKSwgZXhlY3V0YWJsZS0+bmFtZVZhbHVlKCkpOwogfQogCitTdHJ1
Y3R1cmUqIEpTRnVuY3Rpb246OmNhY2hlSW5oZXJpdG9ySUQoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2V0KGV4ZWMsIGV4ZWMtPmdsb2JhbERhdGEoKS5wcm9w
ZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIGlmIChwcm90b3R5cGUuaXNPYmplY3QoKSkKKyAg
ICAgICAgbV9jYWNoZWRJbmhlcml0b3JJRCA9IGFzT2JqZWN0KHByb3RvdHlwZSktPmluaGVyaXRv
cklEKGV4ZWMtPmdsb2JhbERhdGEoKSk7CisgICAgZWxzZQorICAgICAgICBtX2NhY2hlZEluaGVy
aXRvcklEID0gZ2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7CisgICAgcmV0
dXJuIG1fY2FjaGVkSW5oZXJpdG9ySUQ7Cit9CisKIGNvbnN0IFVTdHJpbmcmIEpTRnVuY3Rpb246
Om5hbWUoRXhlY1N0YXRlKiBleGVjKQogewogICAgIHJldHVybiBhc1N0cmluZyhnZXREaXJlY3Qo
ZXhlYy0+Z2xvYmFsRGF0YSgpLCBleGVjLT5nbG9iYWxEYXRhKCkucHJvcGVydHlOYW1lcy0+bmFt
ZSkpLT50cnlHZXRWYWx1ZSgpOwpAQCAtMzMyLDYgKzM0NCw3IEBAIHZvaWQgSlNGdW5jdGlvbjo6
cHV0KEpTQ2VsbCogY2VsbCwgRXhlY1MKICAgICAgICAgLy8gZm9sbG93aW5nIHRoZSBydWxlcyBz
ZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4KICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAg
ICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlz
T2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOworICAgICAgICB0aGlzT2JqZWN0LT5t
X2NhY2hlZEluaGVyaXRvcklEID0gMDsKICAgICB9CiAgICAgaWYgKHRoaXNPYmplY3QtPmpzRXhl
Y3V0YWJsZSgpLT5pc1N0cmljdE1vZGUoKSAmJiAocHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3Bl
cnR5TmFtZXMoKS5hcmd1bWVudHMgfHwgcHJvcGVydHlOYW1lID09IGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jYWxsZXIpKSB7CiAgICAgICAgIC8vIFRoaXMgd2lsbCB0cmlnZ2VyIHRoZSBwcm9wZXJ0
eSB0byBiZSByZWlmaWVkLCBpZiB0aGlzIGlzIG5vdCBhbHJlYWR5IHRoZSBjYXNlIQpAQCAtMzcy
LDYgKzM4NSw3IEBAIGJvb2wgSlNGdW5jdGlvbjo6ZGVmaW5lT3duUHJvcGVydHkoSlNPYmoKICAg
ICAgICAgLy8gZm9sbG93aW5nIHRoZSBydWxlcyBzZXQgb3V0IGluIEVDTUEtMjYyIDguMTIuOS4K
ICAgICAgICAgUHJvcGVydHlTbG90IHNsb3Q7CiAgICAgICAgIHRoaXNPYmplY3QtPm1ldGhvZFRh
YmxlKCktPmdldE93blByb3BlcnR5U2xvdCh0aGlzT2JqZWN0LCBleGVjLCBwcm9wZXJ0eU5hbWUs
IHNsb3QpOworICAgICAgICB0aGlzT2JqZWN0LT5tX2NhY2hlZEluaGVyaXRvcklEID0gMDsKICAg
ICAgICAgcmV0dXJuIEJhc2U6OmRlZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVy
dHlOYW1lLCBkZXNjcmlwdG9yLCB0aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMTYzNzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMSw2ICsxMjEsMTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBy
ZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSk7CiAgICAgICAg
IH0KIAorICAgICAgICBTdHJ1Y3R1cmUqIGNhY2hlZEluaGVyaXRvcklEKEV4ZWNTdGF0ZSogZXhl
YykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKFVOTElLRUxZKCFtX2NhY2hlZEluaGVyaXRv
cklEKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gY2FjaGVJbmhlcml0b3JJRChleGVjKTsKKyAg
ICAgICAgICAgIHJldHVybiBtX2NhY2hlZEluaGVyaXRvcklEOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2NhY2hlZElu
aGVyaXRvcklEKTsKKyAgICAgICAgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBjb25zdCBz
dGF0aWMgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNs
b3QgfCBJbXBsZW1lbnRzSGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3Zl
cnJpZGVzR2V0UHJvcGVydHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIApAQCAt
MTMwLDYgKzE0Miw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGZpbmlzaENyZWF0
aW9uKEV4ZWNTdGF0ZSosIE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lKTsKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBG
dW5jdGlvbkV4ZWN1dGFibGUqLCBTY29wZUNoYWluTm9kZSopOwogCisgICAgICAgIFN0cnVjdHVy
ZSogY2FjaGVJbmhlcml0b3JJRChFeGVjU3RhdGUqKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCBn
ZXRPd25Qcm9wZXJ0eVNsb3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYs
IFByb3BlcnR5U2xvdCYpOwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2Ny
aXB0b3IoSlNPYmplY3QqLCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlE
ZXNjcmlwdG9yJik7CiAgICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNP
YmplY3QqLCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9
IEV4Y2x1ZGVEb250RW51bVByb3BlcnRpZXMpOwpAQCAtMTUyLDYgKzE2Niw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRh
YmxlOwogICAgICAgICBXcml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG1fc2NvcGVDaGFpbjsK
KyAgICAgICAgU3RydWN0dXJlKiBtX2NhY2hlZEluaGVyaXRvcklEOwogICAgIH07CiAKICAgICBp
bmxpbmUgYm9vbCBKU1ZhbHVlOjppc0Z1bmN0aW9uKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141104</attachid>
            <date>2012-05-10 00:59:08 -0700</date>
            <delta_ts>2012-05-10 10:13:17 -0700</delta_ts>
            <desc>Fix</desc>
            <filename>inheritorID.6.patch</filename>
            <type>text/plain</type>
            <size>39310</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2NjEzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxIEBA
CisyMDEyLTA1LTEwICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4K
KworICAgICAgICBDYWNoZSBpbmhlcml0b3JJRCBvbiBKU0Z1bmN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NTg1MworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFuIG9iamVjdCdzIHByb3RvdHlwZSBp
cyBpbmRpY2F0ZWQgdmlhIGl0cyBzdHJ1Y3R1cmUuICBUbyBjcmVhdGUgYW4gb3RoZXJ3aXNlCisg
ICAgICAgIGVtcHR5IG9iamVjdCB3aXRoIG9iamVjdCBBIGFzIGl0cyBwcm90b3R5cGUsIHdlIHJl
cXVpcmUgYSBzdHJ1Y3R1cmUgd2l0aCBpdHMKKyAgICAgICAgcHJvdG90eXBlIHNldCB0byBwb2lu
dCB0byBBLiAgV2Ugd2lzaCB0byB1c2UgdGhpcyBzYW1lIHN0cnVjdHVyZSBmb3IgYWxsIGVtcHR5
CisgICAgICAgIG9iamVjdHMgY3JlYXRlZCB3aXRoIGEgcHJvdG90eXBlIG9mIEEsIHNvIHdlIHBy
ZXNlbnRseSBzdG9yZSB0aGlzIHN0cnVjdHVyZSBhcworICAgICAgICBhIHByb3BlcnR5IG9mIEEs
IGtub3duIGFzIHRoZSBpbmhlcml0b3JJRC4KKworICAgICAgICBXaGVuIGEgZnVuY3Rpb24gRiBp
cyBpbnZva2VkIGFzIGEgY29uc3RydWN0b3IsIHdoZXJlIEYgaGFzIGEgcHJvcGVydHkgJ3Byb3Rv
dHlwZScKKyAgICAgICAgc2V0IHRvIHBvaW50IHRvIEEsIGluIG9yZGVyIHRvIGNyZWF0ZSB0aGUg
J3RoaXMnIHZhbHVlIGZvciB0aGUgY29uc3RydWN0b3IgdG8KKyAgICAgICAgdXNlIHRoZSBmb2xs
b3dpbmcgc3RlcHMgYXJlIHRha2VuOgorICAgICAgICAgIC0gdGhlICdwcm90b3R5cGUnIHByb3B0
ZXJ5IG9mIEYgaXMgcmVhZCwgdmlhIGEgcmVndWxhciBbW0dldF1dIGFjY2Vzcy4KKyAgICAgICAg
ICAtIHRoZSBpbmhlcml0b3JJRCBpbnRlcm5hbCBwcm9wZXJ0eSBvZiB0aGUgcHJvdG90eXBlIGlz
IHJlYWQuCisgICAgICAgICAgLSBhIG5ldywgZW1wdHkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkIHdp
dGggaXRzIHN0cnVjdHVyZSBzZXQgdG8gcG9pbnQgdG8gaW5oZXJpdG9ySUQuCisKKyAgICAgICAg
VGhlcmUgYXJlIHR3byBkcmF3YmFja3MgdG8gdGhlIGN1cnJlbnQgYXBwcm9hY2g6CisgICAgICAg
ICAgLSBpdCByZXF1aXJlcyB0aGF0IGV2ZXJ5IG9iamVjdCBoYXMgYW4gaW5oZXJpdG9ySUQgZmll
bGQuCisgICAgICAgICAgLSBpdCByZXF1aXJlcyBhIFtbR2V0XV0gYWNjZXNzIG9uIGV2ZXJ5IGNv
bnN0cnVjdG9yIGNhbGwgdG8gYWNjZXNzIHRoZSAncHJvdG90eXBlJyBwcm9wZXJ0eS4KKworICAg
ICAgICBJbnN0ZWFkLCBzd2l0Y2ggdG8gY2FjaGluZyBhIGNvcHkgb2YgdGhlIGluaGVyaXRvcklE
IG9uIHRoZSBmdW5jdGlvbi4gIENvbnN0cnVjdG9yCisgICAgICAgIGNhbGxzIG5vdyBvbmx5IG5l
ZWQgcmVhZCB0aGUgaW50ZXJuYWwgcHJvcGVydHkgZnJvbSB0aGUgY2FsbGVlLCBzYXZpbmcgYSBb
W0dldF1dLgorICAgICAgICBUaGlzIGFsc28gbWVhbnMgdGhhdCBKU09iamVjdDo6bV9pbmhlcml0
b3JJRCBpcyBubyBsb25nZXIgY29tbW9ubHkgcmVhZCwgYW5kIGluIGEKKyAgICAgICAgZnV0dXJl
IHBhdGNoIHdlIGNhbiBtb3ZlIHRvIHN0b3JpbmcgdGhpcyBpbiBhIG1vcmUgbWVtb3J5IGVmZmlj
aWVudCBmYXNoaW9uLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAo
SlNDOjpDb2RlQmxvY2s6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL09wY29kZS5oOgorICAg
ICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6cGFkT3Bjb2RlTmFtZSk6CisgICAgICAgICogYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RT
dGF0ZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6
CisgICAgICAgIChERkcpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJv
cGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0
aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnByaXZhdGVFeGVjdXRlKToKKyAg
ICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRB
bGxvY2F0ZUpTRnVuY3Rpb24pOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5j
cHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdFNsb3dfb3BfY3JlYXRlX3RoaXMpOgorICAgICAgICAqIGppdC9KSVRTdHVi
cy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToKKyAgICAgICAgKiBs
bGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9X
X1BBVEhfREVDTCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFz
bToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAq
IHJ1bnRpbWUvSlNGdW5jdGlvbi5jcHA6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OkpTRnVu
Y3Rpb24pOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjYWNoZUluaGVyaXRvcklEKToKKyAg
ICAgICAgKEpTQyk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OnB1dCk6CisgICAgICAgIChK
U0M6OkpTRnVuY3Rpb246OmRlZmluZU93blByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pT
RnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y2FjaGVkSW5oZXJpdG9ySUQp
OgorICAgICAgICAoSlNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246Om9mZnNl
dE9mQ2FjaGVkSW5oZXJpdG9ySUQpOgorCiAyMDEyLTA1LTA5ICBGaWxpcCBQaXpsbyAgPGZwaXps
b0BhcHBsZS5jb20+CiAKICAgICAgICAgSklUIG1lbW9yeSBhbGxvY2F0b3IgaXMgbm90IHJldHVy
bmluZyBtZW1vcnkgdG8gdGhlIE9TIG9uIERhcndpbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oJKHJldmlzaW9uIDExNjU3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQxLDYgKzEwNDEsOSBAQAogCQk4Njg4MEY0QzE0MzUzQjIxMDBCMDhENDIgLyogREZHU3BlY3Vs
YXRpdmVKSVQ2NC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcDsgcGF0aCA9IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODY5RDA0QUUxMTkzQjU0RDAwODAzNDc1IC8q
IENhY2hlZFRyYW5zY2VuZGVudGFsRnVuY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FjaGVkVHJhbnNjZW5kZW50YWxGdW5jdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZXN1bHRUeXBlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTg2QTA1NDQ2MTU1NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZlbElu
dGVycHJldGVyLmFzbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYXNtLmFzbTsgbmFtZSA9IExvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OyBwYXRoID0gbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc207IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTg2QTA1NDQ3MTU1NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc207IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTg2QTA1NDQ4MTU1NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZl
bEludGVycHJldGVyNjQuYXNtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5hc20uYXNtOyBuYW1lID0gTG93TGV2ZWxJbnRlcnByZXRl
cjY0LmFzbTsgcGF0aCA9IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc207IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg2QTkwRUNGMEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0
aG1ldGljLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpJVEFyaXRo
bWV0aWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NkFERDE0MzBGRERFQTk4
MDAwNkVFQzIgLyogQVJNdjdBc3NlbWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gQVJNdjdBc3NlbWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJODZB
REQxNDQwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXJBUk12Ny5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwpAQCAtMTQzMCw3ICsxNDMzLDYgQEAKIAkJCQk0NUUxMkQ4ODA2QTQ5
QjBGMDBFOURGODQgLyoganNjLmNwcCAqLywKIAkJCQlBNzY3RkY5RjE0RjQ1MDI5MDA3ODkwNTkg
LyogSlNDVHlwZWRBcnJheVN0dWJzLmggKi8sCiAJCQkJRjY4RUJCOEMwMjU1RDRDNjAxRkY2MEY3
IC8qIGNvbmZpZy5oICovLAotCQkJCTBGNDY4MDlDMTRCQTdGNEQwMEJGRTI3MiAvKiBsbGludCAq
LywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEy
MEVEMTJCNEUwMDFENjQ5RiAvKiBhc3NlbWJsZXIgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAw
RjFGNjgxIC8qIGJ5dGVjb2RlICovLApAQCAtMTQ0MCw2ICsxNDQyLDcgQEAKIAkJCQkxNDJFMzEy
QTEzNEZGMEE2MDBBRkFEQjUgLyogaGVhcCAqLywKIAkJCQkxNDI5RDc3QTBFRDIwRDczMDBCODk2
MTkgLyogaW50ZXJwcmV0ZXIgKi8sCiAJCQkJMTQyOUQ5MkMwRUQyMkQ3MDAwQjg5NjE5IC8qIGpp
dCAqLywKKwkJCQkwRjQ2ODA5QzE0QkE3RjREMDBCRkUyNzIgLyogbGxpbnQgKi8sCiAJCQkJN0Uz
OUQ4MzcwRUMzQTM4ODAwM0FGMTFBIC8qIHBhcnNlciAqLywKIAkJCQk5NUFCODMxQTBEQTQyQzY5
MDBCQzgzRjMgLyogcHJvZmlsZXIgKi8sCiAJCQkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8q
IHJ1bnRpbWUgKi8sCkBAIC0xNDg5LDYgKzE0OTIsOSBAQAogCQkJCTBGNDY4MDlGMTRCQTdGODIw
MEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgKi8sCiAJCQkJMEY0NjgwQTAxNEJBN0Y4MjAw
QkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggKi8sCiAJCQkJMEY0NjgwQTExNEJBN0Y4MjAwQkZF
MjcyIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rvci5jcHAgKi8sCisJCQkJODZBMDU0NDYxNTU2NDUx
QjAwNDQ1MTU3IC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuYXNtICovLAorCQkJCTg2QTA1NDQ3MTU1
NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtICovLAorCQkJCTg2
QTA1NDQ4MTU1NjQ1MUIwMDQ0NTE1NyAvKiBMb3dMZXZlbEludGVycHJldGVyNjQuYXNtICovLAog
CQkJKTsKIAkJCW5hbWUgPSBsbGludDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNp
b24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUxOSw4ICs1MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZHVt
cChFeGVjU3RhdGUqIGV4ZWMsIGNvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jcmVhdGVf
dGhpczogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAg
ICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKLSAgICAgICAgICAgIGRhdGFMb2coIlsl
NGRdIGNyZWF0ZV90aGlzICVzICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4ZWMsIHIw
KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShleGVjLCByMSkuZGF0YSgpKTsKKyAgICAgICAgICAgIGRh
dGFMb2coIlslNGRdIGNyZWF0ZV90aGlzICVzXG4iLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGV4
ZWMsIHIwKS5kYXRhKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jb252ZXJ0X3RoaXM6IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9PcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDExNjU3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9PcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3BfY3JlYXRlX2FjdGl2YXRpb24sIDIpIFwKICAgICAg
ICAgbWFjcm8ob3BfaW5pdF9sYXp5X3JlZywgMikgXAogICAgICAgICBtYWNybyhvcF9jcmVhdGVf
YXJndW1lbnRzLCAyKSBcCi0gICAgICAgIG1hY3JvKG9wX2NyZWF0ZV90aGlzLCAzKSBcCisgICAg
ICAgIG1hY3JvKG9wX2NyZWF0ZV90aGlzLCAyKSBcCiAgICAgICAgIG1hY3JvKG9wX2dldF9jYWxs
ZWUsIDIpIFwKICAgICAgICAgbWFjcm8ob3BfY29udmVydF90aGlzLCAyKSBcCiAgICAgICAgIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxMTY1NzQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNDQyLDE3ICs0NDIsOCBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoRnVuCiAgICAgcHJlc2VydmVMYXN0VmFyKCk7CiAKICAgICBpZiAoaXNDb25zdHJ1Y3Rvcigp
KSB7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gbmV3VGVtcG9yYXJ5KCk7Ci0g
ICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jUHJvdG8gPSBuZXdUZW1wb3JhcnkoKTsKLQot
ICAgICAgICBlbWl0T3Bjb2RlKG9wX2dldF9jYWxsZWUpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7Ci0gICAgICAgIC8vIExvYWQgcHJvdG90eXBlLgotICAg
ICAgICBlbWl0R2V0QnlJZChmdW5jUHJvdG8uZ2V0KCksIGZ1bmMuZ2V0KCksIGdsb2JhbERhdGEo
KS0+cHJvcGVydHlOYW1lcy0+cHJvdG90eXBlKTsKLQogICAgICAgICBlbWl0T3Bjb2RlKG9wX2Ny
ZWF0ZV90aGlzKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVy
LmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuY1Byb3RvLT5pbmRl
eCgpKTsKICAgICB9IGVsc2UgaWYgKCFjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpICYmIChmdW5j
dGlvbkJvZHktPnVzZXNUaGlzKCkgfHwgY29kZUJsb2NrLT51c2VzRXZhbCgpIHx8IG1fc2hvdWxk
RW1pdERlYnVnSG9va3MpKSB7CiAgICAgICAgIGVtaXRPcGNvZGUob3BfY29udmVydF90aGlzKTsK
ICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
CShyZXZpc2lvbiAxMTY1NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzQsMTkgKzc3NCwyMCBAQCBib29sIEFi
c3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIGRlc3RpbmF0aW9uLm1l
cmdlKFByZWRpY3RPYmplY3RPdGhlcik7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAg
ICAgIAotICAgIGNhc2UgQ3JlYXRlVGhpczogewotICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3Jh
cGhbbm9kZS5jaGlsZDEoKV07CisKKyAgICBjYXNlIENyZWF0ZVRoaXM6CisgICAgICAgIGZvck5v
ZGUobm9kZUluZGV4KS5zZXQoUHJlZGljdEZpbmFsT2JqZWN0KTsKKyAgICAgICAgYnJlYWs7CisK
KyAgICBjYXNlIENyZWF0ZVRoaXNJbmxpbmVkOiB7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIHNv
dXJjZSA9IGZvck5vZGUobm9kZS5jaGlsZDEoKSk7CiAgICAgICAgIEFic3RyYWN0VmFsdWUmIGRl
c3RpbmF0aW9uID0gZm9yTm9kZShub2RlSW5kZXgpOwogICAgICAgICAgICAgCi0gICAgICAgIGlm
IChjaGlsZC5zaG91bGRTcGVjdWxhdGVGaW5hbE9iamVjdCgpKQotICAgICAgICAgICAgc291cmNl
LmZpbHRlcihQcmVkaWN0RmluYWxPYmplY3QpOwotICAgICAgICAgICAgCisgICAgICAgIHNvdXJj
ZS5maWx0ZXIoUHJlZGljdEZ1bmN0aW9uKTsKICAgICAgICAgZGVzdGluYXRpb24uc2V0KFByZWRp
Y3RGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAgICAgICAgIAorCiAg
ICAgY2FzZSBOZXdPYmplY3Q6CiAgICAgICAgIGZvck5vZGUobm9kZUluZGV4KS5zZXQobV9jb2Rl
QmxvY2stPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pLT5lbXB0eU9iamVjdFN0cnVj
dHVyZSgpKTsKICAgICAgICAgbV9oYXZlU3RydWN0dXJlcyA9IHRydWU7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24g
MTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsOCArMTUzNCwxMCBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2Ny
ZWF0ZV90aGlzOiB7Ci0gICAgICAgICAgICBOb2RlSW5kZXggb3AxID0gZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ3JlYXRlVGhpcywgb3AxKSk7CisgICAgICAgICAg
ICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAg
ICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGFkZFRvR3JhcGgoQ3JlYXRl
VGhpc0lubGluZWQsIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxlZVZSKSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHNldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCBhZGRUb0dyYXBoKENyZWF0ZVRoaXMpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NyZWF0ZV90aGlzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTY1NzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDYgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIC8q
IE5vZGVzIGZvciBoYW5kbGluZyBmdW5jdGlvbnMgKGJvdGggYXMgY2FsbCBhbmQgYXMgY29uc3Ry
dWN0KS4gKi9cCiAgICAgbWFjcm8oQ29udmVydFRoaXMsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKENyZWF0ZVRoaXMsIE5vZGVSZXN1bHRKUykgLyogTm90ZSB0aGlzIGlzIG5vdCBNdXN0R2Vu
ZXJhdGUgc2luY2Ugd2UncmUgcmV0dXJuaW5nIGl0IGFueXdheS4gKi8gXAorICAgIG1hY3JvKENy
ZWF0ZVRoaXNJbmxpbmVkLCBOb2RlUmVzdWx0SlMpIC8qIE5vdGUgdGhpcyBpcyBub3QgTXVzdEdl
bmVyYXRlIHNpbmNlIHdlJ3JlIHJldHVybmluZyBpdCBhbnl3YXkuICovIFwKICAgICBtYWNybyhH
ZXRDYWxsZWUsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgbG9jYWwg
dmFyaWFibGUgYWNjZXNzLiAqL1wKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDcgKzIwOSw3
IEBAIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ28KICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWU6OmRlY29kZShlbmNvZGVkT3ApLnRvVGhpc09iamVjdChl
eGVjKSk7CiB9CiAKLWlubGluZSBKU0NlbGwqIGNyZWF0ZVRoaXMoRXhlY1N0YXRlKiBleGVjLCBK
U0NlbGwqIHByb3RvdHlwZSwgSlNGdW5jdGlvbiogY29uc3RydWN0b3IpCitpbmxpbmUgSlNDZWxs
KiBjcmVhdGVUaGlzKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogY29uc3RydWN0b3IpCiB7
CiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIENvbnN0cnVjdERhdGEgY29uc3RydWN0RGF0YTsK
QEAgLTIxOSwyOSArMjE5LDI0IEBAIGlubGluZSBKU0NlbGwqIGNyZWF0ZVRoaXMoRXhlY1N0YXRl
KiBleGUKICAgICBKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEgPSBleGVjLT5nbG9iYWxEYXRhKCk7
CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmZ2xvYmFsRGF0YSwgZXhlYyk7CiAK
LSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKLSAgICBpZiAocHJvdG90eXBlLT5pc09iamVjdCgp
KQotICAgICAgICBzdHJ1Y3R1cmUgPSBhc09iamVjdChwcm90b3R5cGUpLT5pbmhlcml0b3JJRChn
bG9iYWxEYXRhKTsKLSAgICBlbHNlCi0gICAgICAgIHN0cnVjdHVyZSA9IGNvbnN0cnVjdG9yLT5z
Y29wZSgpLT5nbG9iYWxPYmplY3QtPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7Ci0gICAgCisgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rvci0+Y2FjaGVkSW5oZXJpdG9ySUQoZXhl
Yyk7CiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMsIHN0cnVjdHVyZSk7CiB9
CiAKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzKEV4ZWNTdGF0ZSog
ZXhlYywgSlNDZWxsKiBwcm90b3R5cGUpCitKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9u
Q3JlYXRlVGhpcyhFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogCi0gICAgcmV0dXJuIGNyZWF0ZVRoaXMoZXhlYywgcHJv
dG90eXBlLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGV4ZWMtPmNhbGxlZSgpKSk7CisgICAgcmV0dXJu
IGNyZWF0ZVRoaXMoZXhlYywganNDYXN0PEpTRnVuY3Rpb24qPihleGVjLT5jYWxsZWUoKSkpOwog
fQogCi1KU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIHByb3RvdHlwZSwgSlNDZWxsKiBjb25zdHJ1Y3RvcikKK0pT
Q2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZChFeGVjU3RhdGUq
IGV4ZWMsIEpTQ2VsbCogY29uc3RydWN0b3IpCiB7CiAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxE
YXRhID0gJmV4ZWMtPmdsb2JhbERhdGEoKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJh
Y2VyKGdsb2JhbERhdGEsIGV4ZWMpOwogICAgIAotICAgIHJldHVybiBjcmVhdGVUaGlzKGV4ZWMs
IHByb3RvdHlwZSwganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvcikpOworICAgIHJldHVy
biBjcmVhdGVUaGlzKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpKTsKIH0K
IAogSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTk3LDggKzk3LDggQEAgdHlwZWRlZiB2b2lkKiBERkdfT1BF
UkFUSU9OICgqUF9ERkdPcGVyYQogCiAvLyBUaGVzZSByb3V0aW5lcyBhcmUgcHJvdmlkZSBjYWxs
YmFja3Mgb3V0IHRvIEMrKyBpbXBsZW1lbnRhdGlvbnMgb2Ygb3BlcmF0aW9ucyB0b28gY29tcGxl
eCB0byBKSVQuCiBKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNT
dGF0ZSopOwotSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRoaXMoRXhlY1N0
YXRlKiwgSlNDZWxsKiBlbmNvZGVkT3AxKTsKLUpTQ2VsbCogREZHX09QRVJBVElPTiBvcGVyYXRp
b25DcmVhdGVUaGlzSW5saW5lZChFeGVjU3RhdGUqLCBKU0NlbGwqIGVuY29kZWRPcDEsIEpTQ2Vs
bCogY29uc3RydWN0b3IpOworSlNDZWxsKiBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNyZWF0ZVRo
aXMoRXhlY1N0YXRlKik7CitKU0NlbGwqIERGR19PUEVSQVRJT04gb3BlcmF0aW9uQ3JlYXRlVGhp
c0lubGluZWQoRXhlY1N0YXRlKiwgSlNDZWxsKiBjb25zdHJ1Y3Rvcik7CiBFbmNvZGVkSlNWYWx1
ZSBERkdfT1BFUkFUSU9OIG9wZXJhdGlvbkNvbnZlcnRUaGlzKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRPcDEpOwogRW5jb2RlZEpTVmFsdWUgREZHX09QRVJBVElPTiBvcGVyYXRp
b25WYWx1ZUFkZChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkT3AxLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkT3AyKTsKIEVuY29kZWRKU1ZhbHVlIERGR19PUEVSQVRJT04gb3BlcmF0
aW9uVmFsdWVBZGROb3ROdW1iZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9w
MSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZE9wMik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNw
cAkocmV2aXNpb24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Myw2ICs0ODMs
NyBAQCBwcml2YXRlOgogICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBDcmVh
dGVUaGlzOgorICAgICAgICBjYXNlIENyZWF0ZVRoaXNJbmxpbmVkOgogICAgICAgICBjYXNlIE5l
d09iamVjdDogewogICAgICAgICAgICAgY2hhbmdlZCB8PSBzZXRQcmVkaWN0aW9uKFByZWRpY3RG
aW5hbE9iamVjdCk7CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlRGVmYXVsdEZsYWdzKG5v
ZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxMTY1NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDI5LDMyICszMDI5LDUzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9k
ZSkKICAgICAgICAgLy8gdGhlbiB3ZSBzcGVjdWxhdGUgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCBy
ZWNvbXBpbGVkIGlmIGl0IGlzbid0IChzaW5jZQogICAgICAgICAvLyBvdGhlcndpc2Ugd2UnZCBz
dGFydCB0YWtpbmcgc2xvdyBwYXRoIGEgbG90KS4KICAgICAgICAgCi0gICAgICAgIFNwZWN1bGF0
ZUNlbGxPcGVyYW5kIHByb3RvKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsK
KyAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgCi0gICAgICAgIEdQ
UlJlZyBwcm90b0dQUiA9IHByb3RvLmdwcigpOwotICAgICAgICBHUFJSZWcgcmVzdWx0R1BSID0g
cmVzdWx0LmdwcigpOwogICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9IHNjcmF0Y2guZ3ByKCk7
CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIAotICAg
ICAgICBwcm90by51c2UoKTsKLSAgICAgICAgCisgICAgICAgIC8vIExvYWQgdGhlIGluaGVyaXRv
cklELiBJZiB0aGUgaW5oZXJpdG9ySUQgaXMgbm90IHNldCwgZ28gdG8gc2xvdyBwYXRoLgorICAg
ICAgICBtX2ppdC5sb2FkUHRyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHN0YXRpY19jYXN0PFZp
cnR1YWxSZWdpc3Rlcj4oUmVnaXN0ZXJGaWxlOjpDYWxsZWUpKSwgc2NyYXRjaEdQUik7CisgICAg
ICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Moc2NyYXRjaEdQUiwgSlNG
dW5jdGlvbjo6b2Zmc2V0T2ZDYWNoZWRJbmhlcml0b3JJRCgpKSwgc2NyYXRjaEdQUik7CiAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgc2xvd1BhdGgu
YXBwZW5kKG1faml0LmJyYW5jaFRlc3RQdHIoTWFjcm9Bc3NlbWJsZXI6Olplcm8sIHNjcmF0Y2hH
UFIpKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlIHByb3Rv
dHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJlbGlldmUKLSAgICAgICAg
Ly8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxhdGUgb24gdGhhdCBkaXJl
Y3RseS4gT3RoZXJ3aXNlIHdlCi0gICAgICAgIC8vIGRvIHRoZSBzbG93IChzdHJ1Y3R1cmUtYmFz
ZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSkuc2hvdWxkU3BlY3VsYXRl
RmluYWxPYmplY3QoKSkgewotICAgICAgICAgICAgaWYgKCFpc0ZpbmFsT2JqZWN0UHJlZGljdGlv
bihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkKLSAgICAgICAgICAgICAg
ICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVTb3VyY2U6OnVuYm94ZWRDZWxsKHBy
b3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNGaW5hbE9iamVj
dDo6c19pbmZvKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwotICAgICAgICB9CisgICAgICAgIGVtaXRBbGxv
Y2F0ZUpTRmluYWxPYmplY3Qoc2NyYXRjaEdQUiwgcmVzdWx0R1BSLCBzY3JhdGNoR1BSLCBzbG93
UGF0aCk7CisgICAgICAgIAorICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOworICAgICAgICAKKyAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOworICAg
ICAgICAKKyAgICAgICAgQVNTRVJUKCFub2RlLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsK
KyAgICAgICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R1BSKTsKKyAgICAgICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIpOworICAgICAgICBzaWxl
bnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CisgICAgICAgIAorICAgICAgICBkb25lLmxp
bmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIC8vIExvYWQgdGhlIGluaGVyaXRvcklEICh0
aGUgU3RydWN0dXJlIHRoYXQgb2JqZWN0cyB3aG8gaGF2ZSBwcm90b0dQUiBhcyB0aGUgcHJvdG90
eXBlCi0gICAgICAgIC8vIHVzZSB0byByZWZlciB0byB0aGF0IHByb3RvdHlwZSkuIElmIHRoZSBp
bmhlcml0b3JJRCBpcyBub3Qgc2V0LCBnbyB0byBzbG93IHBhdGguCi0gICAgICAgIG1faml0Lmxv
YWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTT2JqZWN0OjpvZmZzZXRP
ZkluaGVyaXRvcklEKCkpLCBzY3JhdGNoR1BSKTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRH
UFIsIG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgY2FzZSBD
cmVhdGVUaGlzSW5saW5lZDogeworICAgICAgICAvLyBOb3RlIHRoYXQgdGhlcmUgaXMgbm90IHNv
IG11Y2ggcHJvZml0IHRvIHNwZWN1bGF0ZSBoZXJlLiBUaGUgb25seSB0aGluZ3Mgd2UKKyAgICAg
ICAgLy8gc3BlY3VsYXRlIG9uIGFyZSAoMSkgdGhhdCBpdCdzIGEgY2VsbCwgc2luY2UgdGhhdCBl
bGltaW5hdGVzIGNlbGwgY2hlY2tzCisgICAgICAgIC8vIGxhdGVyIGlmIHRoZSBwcm90byBpcyBy
ZXVzZWQsIGFuZCAoMikgaWYgd2UgaGF2ZSBhIEZpbmFsT2JqZWN0IHByZWRpY3Rpb24KKyAgICAg
ICAgLy8gdGhlbiB3ZSBzcGVjdWxhdGUgYmVjYXVzZSB3ZSB3YW50IHRvIGdldCByZWNvbXBpbGVk
IGlmIGl0IGlzbid0IChzaW5jZQorICAgICAgICAvLyBvdGhlcndpc2Ugd2UnZCBzdGFydCB0YWtp
bmcgc2xvdyBwYXRoIGEgbG90KS4KKyAgICAgICAgCisgICAgICAgIFNwZWN1bGF0ZUNlbGxPcGVy
YW5kIGNhbGxlZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisgICAgICAg
IAorICAgICAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBHUFJS
ZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgc2NyYXRjaEdQUiA9
IHNjcmF0Y2guZ3ByKCk7CisgICAgICAgIAorICAgICAgICAvLyBMb2FkIHRoZSBpbmhlcml0b3JJ
RC4gSWYgdGhlIGluaGVyaXRvcklEIGlzIG5vdCBzZXQsIGdvIHRvIHNsb3cgcGF0aC4KKyAgICAg
ICAgbV9qaXQubG9hZFB0cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhjYWxsZWVHUFIsIEpTRnVu
Y3Rpb246Om9mZnNldE9mQ2FjaGVkSW5oZXJpdG9ySUQoKSksIHNjcmF0Y2hHUFIpOworICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xvd1BhdGg7CiAgICAgICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BS
KSk7CiAgICAgICAgIAogICAgICAgICBlbWl0QWxsb2NhdGVKU0ZpbmFsT2JqZWN0KHNjcmF0Y2hH
UFIsIHJlc3VsdEdQUiwgc2NyYXRjaEdQUiwgc2xvd1BhdGgpOwpAQCAtMzA2MywxNiArMzA4NCwx
NCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIAog
ICAgICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAgICAgICAgIAorICAgICAgICBBU1NFUlQo
bm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CiAgICAgICAgIHNpbGVudFNwaWxsQWxs
UmVnaXN0ZXJzKHJlc3VsdEdQUik7Ci0gICAgICAgIGlmIChub2RlLmNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lKQotICAgICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlz
SW5saW5lZCwgcmVzdWx0R1BSLCBwcm90b0dQUiwgbm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVlLmdldCgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25DcmVhdGVUaGlzLCByZXN1bHRHUFIsIHByb3RvR1BSKTsKKyAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVUaGlzSW5saW5lZCwgcmVzdWx0R1BSLCBjYWxs
ZWVHUFIpOwogICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdQUik7CiAgICAg
ICAgIAogICAgICAgICBkb25lLmxpbmsoJm1faml0KTsKICAgICAgICAgCi0gICAgICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNp
dGx5KTsKKyAgICAgICAgY2VsbFJlc3VsdChyZXN1bHRHUFIsIG1fY29tcGlsZUluZGV4KTsKICAg
ICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExNjU3NCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMwNTMsMzIgKzMwNTMsNTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICAvLyB0aGVuIHdlIHNwZWN1bGF0ZSBiZWNhdXNlIHdlIHdhbnQg
dG8gZ2V0IHJlY29tcGlsZWQgaWYgaXQgaXNuJ3QgKHNpbmNlCiAgICAgICAgIC8vIG90aGVyd2lz
ZSB3ZSdkIHN0YXJ0IHRha2luZyBzbG93IHBhdGggYSBsb3QpLgogICAgICAgICAKLSAgICAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgcHJvdG8odGhpcywgbm9kZS5jaGlsZDEoKSk7Ci0gICAgICAg
IEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgIEdQUlRlbXBvcmFyeSBzY3JhdGNo
KHRoaXMpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwogICAgICAgICAKLSAg
ICAgICAgR1BSUmVnIHByb3RvR1BSID0gcHJvdG8uZ3ByKCk7Ci0gICAgICAgIEdQUlJlZyByZXN1
bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgICAgIEdQUlJlZyBzY3JhdGNoR1BSID0gc2NyYXRj
aC5ncHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKworICAg
ICAgICAvLyBMb2FkIHRoZSBpbmhlcml0b3JJRC4gSWYgdGhlIGluaGVyaXRvcklEIGlzIG5vdCBz
ZXQsIGdvIHRvIHNsb3cgcGF0aC4KKyAgICAgICAgbV9qaXQubG9hZFB0cihKSVRDb21waWxlcjo6
YWRkcmVzc0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KFJlZ2lzdGVyRmlsZTo6Q2Fs
bGVlKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKHNjcmF0Y2hHUFIsIEpTRnVuY3Rpb246Om9mZnNldE9mQ2FjaGVkSW5oZXJpdG9y
SUQoKSksIHNjcmF0Y2hHUFIpOworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qgc2xv
d1BhdGg7CisgICAgICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hUZXN0UHRyKE1hY3Jv
QXNzZW1ibGVyOjpaZXJvLCBzY3JhdGNoR1BSKSk7CiAgICAgICAgIAotICAgICAgICBwcm90by51
c2UoKTsKKyAgICAgICAgZW1pdEFsbG9jYXRlSlNGaW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1
bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsKICAgICAgICAgCi0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
ZG9uZSA9IG1faml0Lmp1bXAoKTsKICAgICAgICAgCi0gICAgICAgIC8vIE5lZWQgdG8gdmVyaWZ5
IHRoYXQgdGhlIHByb3RvdHlwZSBpcyBhbiBvYmplY3QuIElmIHdlIGhhdmUgcmVhc29uIHRvIGJl
bGlldmUKLSAgICAgICAgLy8gdGhhdCBpdCdzIGEgRmluYWxPYmplY3QgdGhlbiB3ZSBzcGVjdWxh
dGUgb24gdGhhdCBkaXJlY3RseS4gT3RoZXJ3aXNlIHdlCi0gICAgICAgIC8vIGRvIHRoZSBzbG93
IChzdHJ1Y3R1cmUtYmFzZWQpIGNoZWNrLgotICAgICAgICBpZiAoYXQobm9kZS5jaGlsZDEoKSku
c2hvdWxkU3BlY3VsYXRlRmluYWxPYmplY3QoKSkgewotICAgICAgICAgICAgaWYgKCFpc0ZpbmFs
T2JqZWN0UHJlZGljdGlvbihtX3N0YXRlLmZvck5vZGUobm9kZS5jaGlsZDEoKSkubV90eXBlKSkK
LSAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHBy
b3RvR1BSKSwgbm9kZS5jaGlsZDEoKSwgbV9qaXQuYnJhbmNoUHRyKE1hY3JvQXNzZW1ibGVyOjpO
b3RFcXVhbCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MocHJvdG9HUFIsIEpTQ2VsbDo6Y2xhc3NJ
bmZvT2Zmc2V0KCkpLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmSlNGaW5hbE9iamVj
dDo6c19pbmZvKSkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbV9qaXQubG9hZFB0
cihNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhwcm90b0dQUiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZz
ZXQoKSksIHNjcmF0Y2hHUFIpOwotICAgICAgICAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJy
YW5jaDgoTWFjcm9Bc3NlbWJsZXI6OkJlbG93LCBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhzY3Jh
dGNoR1BSLCBTdHJ1Y3R1cmU6OnR5cGVJbmZvVHlwZU9mZnNldCgpKSwgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihPYmplY3RUeXBlKSkpOwotICAgICAgICB9CisgICAgICAgIHNsb3dQYXRo
LmxpbmsoJm1faml0KTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVCghbm9kZS5jb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgIHNpbGVudFNwaWxsQWxsUmVnaXN0ZXJzKHJlc3Vs
dEdQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0
R1BSKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOworICAgICAg
ICAKKyAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAgICAgIAotICAgICAgICAvLyBMb2Fk
IHRoZSBpbmhlcml0b3JJRCAodGhlIFN0cnVjdHVyZSB0aGF0IG9iamVjdHMgd2hvIGhhdmUgcHJv
dG9HUFIgYXMgdGhlIHByb3RvdHlwZQotICAgICAgICAvLyB1c2UgdG8gcmVmZXIgdG8gdGhhdCBw
cm90b3R5cGUpLiBJZiB0aGUgaW5oZXJpdG9ySUQgaXMgbm90IHNldCwgZ28gdG8gc2xvdyBwYXRo
LgotICAgICAgICBtX2ppdC5sb2FkUHRyKE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKHByb3RvR1BS
LCBKU09iamVjdDo6b2Zmc2V0T2ZJbmhlcml0b3JJRCgpKSwgc2NyYXRjaEdQUik7CisgICAgICAg
IGNlbGxSZXN1bHQocmVzdWx0R1BSLCBtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKworICAgIGNhc2UgQ3JlYXRlVGhpc0lubGluZWQ6IHsKKyAgICAgICAgLy8gTm90ZSB0
aGF0IHRoZXJlIGlzIG5vdCBzbyBtdWNoIHByb2ZpdCB0byBzcGVjdWxhdGUgaGVyZS4gVGhlIG9u
bHkgdGhpbmdzIHdlCisgICAgICAgIC8vIHNwZWN1bGF0ZSBvbiBhcmUgKDEpIHRoYXQgaXQncyBh
IGNlbGwsIHNpbmNlIHRoYXQgZWxpbWluYXRlcyBjZWxsIGNoZWNrcworICAgICAgICAvLyBsYXRl
ciBpZiB0aGUgcHJvdG8gaXMgcmV1c2VkLCBhbmQgKDIpIGlmIHdlIGhhdmUgYSBGaW5hbE9iamVj
dCBwcmVkaWN0aW9uCisgICAgICAgIC8vIHRoZW4gd2Ugc3BlY3VsYXRlIGJlY2F1c2Ugd2Ugd2Fu
dCB0byBnZXQgcmVjb21waWxlZCBpZiBpdCBpc24ndCAoc2luY2UKKyAgICAgICAgLy8gb3RoZXJ3
aXNlIHdlJ2Qgc3RhcnQgdGFraW5nIHNsb3cgcGF0aCBhIGxvdCkuCisgICAgICAgIAorICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBjYWxsZWUodGhpcywgbm9kZS5jaGlsZDEoKSk7CisgICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlRlbXBvcmFyeSBzY3Jh
dGNoKHRoaXMpOworICAgICAgICAKKyAgICAgICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxlZS5n
cHIoKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBzY3JhdGNoLmdwcigpOworICAgICAgICAKKyAgICAgICAgLy8g
TG9hZCB0aGUgaW5oZXJpdG9ySUQuIElmIHRoZSBpbmhlcml0b3JJRCBpcyBub3Qgc2V0LCBnbyB0
byBzbG93IHBhdGguCisgICAgICAgIG1faml0LmxvYWRQdHIoTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MoY2FsbGVlR1BSLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkpLCBz
Y3JhdGNoR1BSKTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNsb3dQYXRoOwog
ICAgICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoVGVzdFB0cihNYWNyb0Fzc2VtYmxl
cjo6WmVybywgc2NyYXRjaEdQUikpOwogICAgICAgICAKICAgICAgICAgZW1pdEFsbG9jYXRlSlNG
aW5hbE9iamVjdChzY3JhdGNoR1BSLCByZXN1bHRHUFIsIHNjcmF0Y2hHUFIsIHNsb3dQYXRoKTsK
QEAgLTMwODcsMTYgKzMxMDgsMTQgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
JiBub2RlKQogICAgICAgICAKICAgICAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHUFIpOwotICAgICAgICBpZiAobm9k
ZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKLSAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uQ3JlYXRlVGhpc0lubGluZWQsIHJlc3VsdEdQUiwgcHJvdG9HUFIsIG5vZGUuY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSk7Ci0gICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpcywgcmVzdWx0R1BSLCBw
cm90b0dQUik7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlVGhpc0lubGlu
ZWQsIHJlc3VsdEdQUiwgY2FsbGVlR1BSKTsKICAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHUFIpOwogICAgICAgICAKICAgICAgICAgZG9uZS5saW5rKCZtX2ppdCk7CiAgICAg
ICAgIAotICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbV9jb21waWxlSW5kZXgsIFVzZUNo
aWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAgICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBt
X2NvbXBpbGVJbmRleCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxMTY1NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODA5LDcgKzQ4MDksNiBAQCBza2lwX2lkX2N1c3Rv
bV9zZWxmOgogICAgICAgICAqLwogCiAgICAgICAgIGludCB0aGlzUmVnaXN0ZXIgPSB2UENbMV0u
dS5vcGVyYW5kOwotICAgICAgICBpbnQgcHJvdG9SZWdpc3RlciA9IHZQQ1syXS51Lm9wZXJhbmQ7
CiAKICAgICAgICAgSlNGdW5jdGlvbiogY29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNGdW5jdGlvbio+
KGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTQ4MTcsMTIg
KzQ4MTYsNyBAQCBza2lwX2lkX2N1c3RvbV9zZWxmOgogICAgICAgICBBU1NFUlQoY29uc3RydWN0
b3ItPm1ldGhvZFRhYmxlKCktPmdldENvbnN0cnVjdERhdGEoY29uc3RydWN0b3IsIGNvbnN0cnVj
dERhdGEpID09IENvbnN0cnVjdFR5cGVKUyk7CiAjZW5kaWYKIAotICAgICAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZTsKLSAgICAgICAgSlNWYWx1ZSBwcm90byA9IGNhbGxGcmFtZS0+cihwcm90b1Jl
Z2lzdGVyKS5qc1ZhbHVlKCk7Ci0gICAgICAgIGlmIChwcm90by5pc09iamVjdCgpKQotICAgICAg
ICAgICAgc3RydWN0dXJlID0gYXNPYmplY3QocHJvdG8pLT5pbmhlcml0b3JJRChjYWxsRnJhbWUt
Pmdsb2JhbERhdGEoKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cnVjdHVyZSA9IGNv
bnN0cnVjdG9yLT5zY29wZSgpLT5nbG9iYWxPYmplY3QtPmVtcHR5T2JqZWN0U3RydWN0dXJlKCk7
CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmNhY2hlZEluaGVy
aXRvcklEKGNhbGxGcmFtZSk7CiAgICAgICAgIGNhbGxGcmFtZS0+dW5jaGVja2VkUih0aGlzUmVn
aXN0ZXIpID0gY29uc3RydWN0RW1wdHlPYmplY3QoY2FsbEZyYW1lLCBzdHJ1Y3R1cmUpOwogCiAg
ICAgICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX2NyZWF0ZV90aGlzKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCShyZXZpc2lvbiAxMTY1
NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAkod29y
a2luZyBjb3B5KQpAQCAtNDQ4LDYgKzQ0OCw5IEBAIGlubGluZSB2b2lkIEpJVDo6ZW1pdEFsbG9j
YXRlSlNGdW5jdGlvbigKICAgICAvLyBzdG9yZSB0aGUgZnVuY3Rpb24ncyBleGVjdXRhYmxlIG1l
bWJlcgogICAgIHN0b3JlUHRyKFRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSksIEFkZHJlc3MocmVz
dWx0LCBKU0Z1bmN0aW9uOjpvZmZzZXRPZkV4ZWN1dGFibGUoKSkpOwogCisgICAgLy8gY2xlYXIg
dGhlIGZ1bmN0aW9uJ3MgaW5oZXJpdG9ySUQKKyAgICBzdG9yZVB0cihUcnVzdGVkSW1tUHRyKDAp
LCBBZGRyZXNzKHJlc3VsdCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZDYWNoZWRJbmhlcml0b3JJRCgp
KSk7CisKICAgICAvLyBzdG9yZSB0aGUgZnVuY3Rpb24ncyBuYW1lCiAgICAgQVNTRVJUKGV4ZWN1
dGFibGUtPm5hbWVWYWx1ZSgpKTsKICAgICBpbnQgZnVuY3Rpb25OYW1lT2Zmc2V0ID0gc2l6ZW9m
KEpTVmFsdWUpICogbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpLT5mdW5jdGlvbk5hbWVPZmZz
ZXQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAJKHJldmlzaW9uIDExNjU3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzMiwzNSArMTUzMiwyMiBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uCiAKIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
ZW1pdExvYWQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsK
LSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZCwgcmVnVDEpOwotICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNDZWxsOjpzdHJ1
Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBhZGRTbG93Q2FzZShlbWl0SnVtcElmTm90T2Jq
ZWN0KHJlZ1QxKSk7Ci0gICAgCi0gICAgLy8gbm93IHdlIGtub3cgdGhhdCB0aGUgcHJvdG90eXBl
IGlzIGFuIG9iamVjdCwgYnV0IHdlIGRvbid0IGtub3cgaWYgaXQncyBnb3QgYW4KLSAgICAvLyBp
bmhlcml0b3IgSUQKLSAgICAKLSAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTT2JqZWN0Ojpv
ZmZzZXRPZkluaGVyaXRvcklEKCkpLCByZWdUMik7CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVI
ZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJl
c3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mQ2FjaGVkSW5oZXJpdG9ySUQoKSksIHJlZ1Qy
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0UHRyKFplcm8sIHJlZ1QyKSk7CiAgICAgCiAg
ICAgLy8gbm93IHJlZ1QyIGNvbnRhaW5zIHRoZSBpbmhlcml0b3JJRCwgd2hpY2ggaXMgdGhlIHN0
cnVjdHVyZSB0aGF0IHRoZSBuZXdseQogICAgIC8vIGFsbG9jYXRlZCBvYmplY3Qgd2lsbCBoYXZl
LgogICAgIAogICAgIGVtaXRBbGxvY2F0ZUpTRmluYWxPYmplY3QocmVnVDIsIHJlZ1QwLCByZWdU
MSk7Ci0KICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QwKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NyZWF0ZV90aGlzKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgbGlua1Nsb3dDYXNlSWZOb3RKU0NlbGwoaXRlciwgY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCk7IC8vIG5vdCBhIGNlbGwKLSAgICBsaW5rU2xvd0Nhc2UoaXRl
cik7IC8vIG5vdCBhbiBvYmplY3QKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvZXNuJ3Qg
aGF2ZSBhbiBpbmhlcml0b3IgSUQKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGFsbG9jYXRp
b24gZmFpbGVkCi0gICAgdW5zaWduZWQgcHJvdG9SZWdpc3RlciA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdExvYWQocHJvdG9SZWdpc3RlciwgcmVnVDEsIHJlZ1Qw
KTsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3BfY3JlYXRlX3RoaXMpOwot
ICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxLCByZWdUMCk7CiAgICAgc3R1YkNhbGwuY2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxMTY1NzQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcyLDMzICsxMjcyLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9jYWxsZWUoSW5zdHJ1Y3Rp
b24KIAogdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QyKTsKLSAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0Nl
bGwocmVnVDIsIGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwotICAgIGxvYWRQdHIo
QWRkcmVzcyhyZWdUMiwgSlNDZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksIHJlZ1QxKTsKLSAgICBh
ZGRTbG93Q2FzZShlbWl0SnVtcElmTm90T2JqZWN0KHJlZ1QxKSk7Ci0gICAgCi0gICAgLy8gbm93
IHdlIGtub3cgdGhhdCB0aGUgcHJvdG90eXBlIGlzIGFuIG9iamVjdCwgYnV0IHdlIGRvbid0IGtu
b3cgaWYgaXQncyBnb3QgYW4KLSAgICAvLyBpbmhlcml0b3IgSUQKLSAgICAKLSAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDIsIEpTT2JqZWN0OjpvZmZzZXRPZkluaGVyaXRvcklEKCkpLCByZWdUMik7
CisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUs
IHJlZ1QwKTsKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9m
Q2FjaGVkSW5oZXJpdG9ySUQoKSksIHJlZ1QyKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hUZXN0
UHRyKFplcm8sIHJlZ1QyKSk7CiAgICAgCiAgICAgLy8gbm93IHJlZ1QyIGNvbnRhaW5zIHRoZSBp
bmhlcml0b3JJRCwgd2hpY2ggaXMgdGhlIHN0cnVjdHVyZSB0aGF0IHRoZSBuZXdseQogICAgIC8v
IGFsbG9jYXRlZCBvYmplY3Qgd2lsbCBoYXZlLgogICAgIAogICAgIGVtaXRBbGxvY2F0ZUpTRmlu
YWxPYmplY3QocmVnVDIsIHJlZ1QwLCByZWdUMSk7Ci0gICAgCiAgICAgZW1pdFB1dFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgbGlua1Nsb3dD
YXNlSWZOb3RKU0NlbGwoaXRlciwgY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7IC8v
IG5vdCBhIGNlbGwKLSAgICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIG5vdCBhbiBvYmplY3QKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGRvZXNuJ3QgaGF2ZSBhbiBpbmhlcml0b3IgSUQKICAg
ICBsaW5rU2xvd0Nhc2UoaXRlcik7IC8vIGFsbG9jYXRpb24gZmFpbGVkCiAgICAgSklUU3R1YkNh
bGwgc3R1YkNhbGwodGhpcywgY3RpX29wX2NyZWF0ZV90aGlzKTsKLSAgICBzdHViQ2FsbC5hZGRB
cmd1bWVudChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kLCByZWdUMSk7CiAgICAgc3R1
YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKIH0KIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9uIDExNjU3NCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjg2LDEyICsxMjg2LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04oRW5jb2RlZEpTVmFsdWUs
IG9wXwogICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0
RGF0YShjb25zdHJ1Y3RvciwgY29uc3RydWN0RGF0YSkgPT0gQ29uc3RydWN0VHlwZUpTKTsKICNl
bmRpZgogCi0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7Ci0gICAgSlNWYWx1ZSBwcm90byA9IHN0
YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCk7Ci0gICAgaWYgKHByb3RvLmlzT2JqZWN0KCkpCi0g
ICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0KHByb3RvKS0+aW5oZXJpdG9ySUQoKnN0YWNrRnJh
bWUuZ2xvYmFsRGF0YSk7Ci0gICAgZWxzZQotICAgICAgICBzdHJ1Y3R1cmUgPSBjb25zdHJ1Y3Rv
ci0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0LT5lbXB0eU9iamVjdFN0cnVjdHVyZSgpOworICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmNhY2hlZEluaGVyaXRvcklEKGNhbGxG
cmFtZSk7CiAgICAgSlNWYWx1ZSByZXN1bHQgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChjYWxsRnJh
bWUsIHN0cnVjdHVyZSk7CiAKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJ
KHJldmlzaW9uIDExNjU3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNs
b3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1OCwxMyArNDU4LDcgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV90aAogICAgIEFTU0VSVChjb25zdHJ1Y3Rvci0+
bWV0aG9kVGFibGUoKS0+Z2V0Q29uc3RydWN0RGF0YShjb25zdHJ1Y3RvciwgY29uc3RydWN0RGF0
YSkgPT0gQ29uc3RydWN0VHlwZUpTKTsKICNlbmRpZgogICAgIAotICAgIFN0cnVjdHVyZSogc3Ry
dWN0dXJlOwotICAgIEpTVmFsdWUgcHJvdG8gPSBMTElOVF9PUCgyKS5qc1ZhbHVlKCk7Ci0gICAg
aWYgKHByb3RvLmlzT2JqZWN0KCkpCi0gICAgICAgIHN0cnVjdHVyZSA9IGFzT2JqZWN0KHByb3Rv
KS0+aW5oZXJpdG9ySUQoZ2xvYmFsRGF0YSk7Ci0gICAgZWxzZQotICAgICAgICBzdHJ1Y3R1cmUg
PSBjb25zdHJ1Y3Rvci0+c2NvcGUoKS0+Z2xvYmFsT2JqZWN0LT5lbXB0eU9iamVjdFN0cnVjdHVy
ZSgpOwotICAgIAorICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY29uc3RydWN0b3ItPmNhY2hl
ZEluaGVyaXRvcklEKGV4ZWMgICk7CiAgICAgTExJTlRfUkVUVVJOKGNvbnN0cnVjdEVtcHR5T2Jq
ZWN0KGV4ZWMsIHN0cnVjdHVyZSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNp
b24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTM0MywyMyArMzQzLDE4IEBAIF9sbGlu
dF9vcF9jcmVhdGVfYXJndW1lbnRzOgogCiBfbGxpbnRfb3BfY3JlYXRlX3RoaXM6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQotICAgIGxvYWRpIDhbUENdLCB0MAotICAgIGFzc2VydE5vdENvbnN0YW50
KHQwKQotICAgIGJpbmVxIFRhZ09mZnNldFtjZnIsIHQwLCA4XSwgQ2VsbFRhZywgLm9wQ3JlYXRl
VGhpc1Nsb3cKLSAgICBsb2FkaSBQYXlsb2FkT2Zmc2V0W2NmciwgdDAsIDhdLCB0MAotICAgIGxv
YWRwIEpTQ2VsbDo6bV9zdHJ1Y3R1cmVbdDBdLCB0MQotICAgIGJiYiBTdHJ1Y3R1cmU6Om1fdHlw
ZUluZm8gKyBUeXBlSW5mbzo6bV90eXBlW3QxXSwgT2JqZWN0VHlwZSwgLm9wQ3JlYXRlVGhpc1Ns
b3cKLSAgICBsb2FkcCBKU09iamVjdDo6bV9pbmhlcml0b3JJRFt0MF0sIHQyCisgICAgbG9hZHAg
Q2FsbGVlW2Nmcl0sIHQwCisgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9jYWNoZWRJbmhlcml0b3JJ
RFt0MF0sIHQyCiAgICAgYnRweiB0MiwgLm9wQ3JlYXRlVGhpc1Nsb3cKICAgICBhbGxvY2F0ZUJh
c2ljSlNPYmplY3QoSlNGaW5hbE9iamVjdFNpemVDbGFzc0luZGV4LCBKU0dsb2JhbERhdGE6Ompz
RmluYWxPYmplY3RDbGFzc0luZm8sIHQyLCB0MCwgdDEsIHQzLCAub3BDcmVhdGVUaGlzU2xvdykK
ICAgICBsb2FkaSA0W1BDXSwgdDEKICAgICBzdG9yZWkgQ2VsbFRhZywgVGFnT2Zmc2V0W2Nmciwg
dDEsIDhdCiAgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zmc2V0W2NmciwgdDEsIDhdCi0gICAgZGlz
cGF0Y2goMykKKyAgICBkaXNwYXRjaCgyKQogCiAub3BDcmVhdGVUaGlzU2xvdzoKICAgICBjYWxs
U2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9jcmVhdGVfdGhpcykKLSAgICBkaXNwYXRjaCgzKQor
ICAgIGRpc3BhdGNoKDIpCiAKIAogX2xsaW50X29wX2dldF9jYWxsZWU6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFz
bQkocmV2aXNpb24gMTE2NTc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTIyMSwyMiArMjIxLDE3IEBA
IF9sbGludF9vcF9jcmVhdGVfYXJndW1lbnRzOgogCiBfbGxpbnRfb3BfY3JlYXRlX3RoaXM6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGxvYWRpcyAxNltQQiwgUEMsIDhdLCB0MAotICAgIGFz
c2VydE5vdENvbnN0YW50KHQwKQotICAgIGxvYWRwIFtjZnIsIHQwLCA4XSwgdDAKLSAgICBidHBu
eiB0MCwgdGFnTWFzaywgLm9wQ3JlYXRlVGhpc1Nsb3cKLSAgICBsb2FkcCBKU0NlbGw6Om1fc3Ry
dWN0dXJlW3QwXSwgdDEKLSAgICBiYmIgU3RydWN0dXJlOjptX3R5cGVJbmZvICsgVHlwZUluZm86
Om1fdHlwZVt0MV0sIE9iamVjdFR5cGUsIC5vcENyZWF0ZVRoaXNTbG93Ci0gICAgbG9hZHAgSlNP
YmplY3Q6Om1faW5oZXJpdG9ySURbdDBdLCB0MgorICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MAor
ICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fY2FjaGVkSW5oZXJpdG9ySURbdDBdLCB0MgogICAgIGJ0
cHogdDIsIC5vcENyZWF0ZVRoaXNTbG93CiAgICAgYWxsb2NhdGVCYXNpY0pTT2JqZWN0KEpTRmlu
YWxPYmplY3RTaXplQ2xhc3NJbmRleCwgSlNHbG9iYWxEYXRhOjpqc0ZpbmFsT2JqZWN0Q2xhc3NJ
bmZvLCB0MiwgdDAsIHQxLCB0MywgLm9wQ3JlYXRlVGhpc1Nsb3cpCiAgICAgbG9hZGlzIDhbUEIs
IFBDLCA4XSwgdDEKICAgICBzdG9yZXAgdDAsIFtjZnIsIHQxLCA4XQotICAgIGRpc3BhdGNoKDMp
CisgICAgZGlzcGF0Y2goMikKIAogLm9wQ3JlYXRlVGhpc1Nsb3c6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfY3JlYXRlX3RoaXMpCi0gICAgZGlzcGF0Y2goMykKKyAgICBkaXNw
YXRjaCgyKQogCiAKIF9sbGludF9vcF9nZXRfY2FsbGVlOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDExNjU3NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTIsNiArMTEyLDE2IEBAIHZvaWQgSlNGdW5jdGlvbjo6ZmluaXNoQ3JlYXRpb24oRXhl
Y1N0YXQKICAgICBwdXREaXJlY3RPZmZzZXQoZXhlYy0+Z2xvYmFsRGF0YSgpLCBzY29wZUNoYWlu
Tm9kZS0+Z2xvYmFsT2JqZWN0LT5mdW5jdGlvbk5hbWVPZmZzZXQoKSwgZXhlY3V0YWJsZS0+bmFt
ZVZhbHVlKCkpOwogfQogCitTdHJ1Y3R1cmUqIEpTRnVuY3Rpb246OmNhY2hlSW5oZXJpdG9ySUQo
RXhlY1N0YXRlKiBleGVjKQoreworICAgIEpTVmFsdWUgcHJvdG90eXBlID0gZ2V0KGV4ZWMsIGV4
ZWMtPmdsb2JhbERhdGEoKS5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOworICAgIGlmIChwcm90
b3R5cGUuaXNPYmplY3QoKSkKKyAgICAgICAgbV9jYWNoZWRJbmhlcml0b3JJRC5zZXQoZXhlYy0+
Z2xvYmFsRGF0YSgpLCB0aGlzLCBhc09iamVjdChwcm90b3R5cGUpLT5pbmhlcml0b3JJRChleGVj
LT5nbG9iYWxEYXRhKCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fY2FjaGVkSW5oZXJpdG9ySUQu
c2V0KGV4ZWMtPmdsb2JhbERhdGEoKSwgdGhpcywgZ2xvYmFsT2JqZWN0KCktPmVtcHR5T2JqZWN0
U3RydWN0dXJlKCkpOworICAgIHJldHVybiBtX2NhY2hlZEluaGVyaXRvcklELmdldCgpOworfQor
CiBjb25zdCBVU3RyaW5nJiBKU0Z1bmN0aW9uOjpuYW1lKEV4ZWNTdGF0ZSogZXhlYykKIHsKICAg
ICByZXR1cm4gYXNTdHJpbmcoZ2V0RGlyZWN0KGV4ZWMtPmdsb2JhbERhdGEoKSwgZXhlYy0+Z2xv
YmFsRGF0YSgpLnByb3BlcnR5TmFtZXMtPm5hbWUpKS0+dHJ5R2V0VmFsdWUoKTsKQEAgLTMzMiw2
ICszNDIsNyBAQCB2b2lkIEpTRnVuY3Rpb246OnB1dChKU0NlbGwqIGNlbGwsIEV4ZWNTCiAgICAg
ICAgIC8vIGZvbGxvd2luZyB0aGUgcnVsZXMgc2V0IG91dCBpbiBFQ01BLTI2MiA4LjEyLjkuCiAg
ICAgICAgIFByb3BlcnR5U2xvdCBzbG90OwogICAgICAgICB0aGlzT2JqZWN0LT5tZXRob2RUYWJs
ZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3QodGhpc09iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBz
bG90KTsKKyAgICAgICAgdGhpc09iamVjdC0+bV9jYWNoZWRJbmhlcml0b3JJRC5jbGVhcigpOwog
ICAgIH0KICAgICBpZiAodGhpc09iamVjdC0+anNFeGVjdXRhYmxlKCktPmlzU3RyaWN0TW9kZSgp
ICYmIChwcm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmFyZ3VtZW50cyB8fCBw
cm9wZXJ0eU5hbWUgPT0gZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGxlcikpIHsKICAgICAgICAg
Ly8gVGhpcyB3aWxsIHRyaWdnZXIgdGhlIHByb3BlcnR5IHRvIGJlIHJlaWZpZWQsIGlmIHRoaXMg
aXMgbm90IGFscmVhZHkgdGhlIGNhc2UhCkBAIC0zNzIsNiArMzgzLDcgQEAgYm9vbCBKU0Z1bmN0
aW9uOjpkZWZpbmVPd25Qcm9wZXJ0eShKU09iagogICAgICAgICAvLyBmb2xsb3dpbmcgdGhlIHJ1
bGVzIHNldCBvdXQgaW4gRUNNQS0yNjIgOC4xMi45LgogICAgICAgICBQcm9wZXJ0eVNsb3Qgc2xv
dDsKICAgICAgICAgdGhpc09iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90
KHRoaXNPYmplY3QsIGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisgICAgICAgIHRoaXNPYmpl
Y3QtPm1fY2FjaGVkSW5oZXJpdG9ySUQuY2xlYXIoKTsKICAgICAgICAgcmV0dXJuIEJhc2U6OmRl
ZmluZU93blByb3BlcnR5KG9iamVjdCwgZXhlYywgcHJvcGVydHlOYW1lLCBkZXNjcmlwdG9yLCB0
aHJvd0V4Y2VwdGlvbik7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxMTY1NzQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw2ICsxMjEs
MTggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1cm4gT0JKRUNUX09GRlNFVE9G
KEpTRnVuY3Rpb24sIG1fZXhlY3V0YWJsZSk7CiAgICAgICAgIH0KIAorICAgICAgICBTdHJ1Y3R1
cmUqIGNhY2hlZEluaGVyaXRvcklEKEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKFVOTElLRUxZKCFtX2NhY2hlZEluaGVyaXRvcklEKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gY2FjaGVJbmhlcml0b3JJRChleGVjKTsKKyAgICAgICAgICAgIHJldHVybiBtX2Nh
Y2hlZEluaGVyaXRvcklELmdldCgpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHNpemVf
dCBvZmZzZXRPZkNhY2hlZEluaGVyaXRvcklEKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0aW9uLCBtX2NhY2hlZEluaGVyaXRvcklEKTsKKyAg
ICAgICAgfQorCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBjb25zdCBzdGF0aWMgdW5zaWduZWQg
U3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBJbXBsZW1lbnRz
SGFzSW5zdGFuY2UgfCBPdmVycmlkZXNWaXNpdENoaWxkcmVuIHwgT3ZlcnJpZGVzR2V0UHJvcGVy
dHlOYW1lcyB8IEpTT2JqZWN0OjpTdHJ1Y3R1cmVGbGFnczsKIApAQCAtMTMwLDYgKzE0Miw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSos
IE5hdGl2ZUV4ZWN1dGFibGUqLCBpbnQgbGVuZ3RoLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lKTsK
ICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqLCBGdW5jdGlvbkV4ZWN1dGFi
bGUqLCBTY29wZUNoYWluTm9kZSopOwogCisgICAgICAgIFN0cnVjdHVyZSogY2FjaGVJbmhlcml0
b3JJRChFeGVjU3RhdGUqKTsKKwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNs
b3QoSlNDZWxsKiwgRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIFByb3BlcnR5U2xvdCYp
OwogICAgICAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlEZXNjcmlwdG9yJik7CiAg
ICAgICAgIHN0YXRpYyB2b2lkIGdldE93blByb3BlcnR5TmFtZXMoSlNPYmplY3QqLCBFeGVjU3Rh
dGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYsIEVudW1lcmF0aW9uTW9kZSA9IEV4Y2x1ZGVEb250RW51
bVByb3BlcnRpZXMpOwpAQCAtMTUyLDYgKzE2Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIFdyaXRlQmFycmllcjxFeGVjdXRhYmxlQmFzZT4gbV9leGVjdXRhYmxlOwogICAgICAgICBX
cml0ZUJhcnJpZXI8U2NvcGVDaGFpbk5vZGU+IG1fc2NvcGVDaGFpbjsKKyAgICAgICAgV3JpdGVC
YXJyaWVyPFN0cnVjdHVyZT4gbV9jYWNoZWRJbmhlcml0b3JJRDsKICAgICB9OwogCiAgICAgaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6aXNGdW5jdGlvbigpIGNvbnN0Cg==
</data>
<flag name="review"
          id="147194"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>