<?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>178949</bug_id>
          
          <creation_ts>2017-10-27 12:57:42 -0700</creation_ts>
          <short_desc>Bytecode liveness should live on UnlinkedCodeBlock so it can be shared amongst CodeBlocks</short_desc>
          <delta_ts>2017-11-15 12:40:05 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>Safari Technology Preview</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1365468</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 12:57:42 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365528</commentid>
    <comment_count>1</comment_count>
      <attachid>325201</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 14:52:45 -0700</bug_when>
    <thetext>Created attachment 325201
WIP

refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365540</commentid>
    <comment_count>2</comment_count>
      <attachid>325204</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 15:12:35 -0700</bug_when>
    <thetext>Created attachment 325204
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365541</commentid>
    <comment_count>3</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 15:14:42 -0700</bug_when>
    <thetext>(In reply to Saam Barati from comment #2)
&gt; Created attachment 325204 [details]
&gt; WIP

It seems to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365542</commentid>
    <comment_count>4</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-10-27 15:15:11 -0700</bug_when>
    <thetext>Attachment 325204 did not pass style-queue:


ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:89:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:91:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:92:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:93:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:95:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/bytecode/BytecodeLivenessAnalysis.cpp:117:  Should have a space between // and comment  [whitespace/comments] [4]
Total errors found: 6 in 14 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>1365561</commentid>
    <comment_count>5</comment_count>
      <attachid>325212</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 16:00:41 -0700</bug_when>
    <thetext>Created attachment 325212
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365563</commentid>
    <comment_count>6</comment_count>
      <attachid>325213</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 16:09:04 -0700</bug_when>
    <thetext>Created attachment 325213
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365564</commentid>
    <comment_count>7</comment_count>
      <attachid>325213</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 16:14:28 -0700</bug_when>
    <thetext>Comment on attachment 325213
patch

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

&gt; Source/JavaScriptCore/bytecode/UnlinkedCodeBlock.cpp:430
&gt; +    {
&gt; +        auto locker = holdLock(m_lock);
&gt; +        m_liveness = std::make_unique&lt;BytecodeLivenessAnalysis&gt;(codeBlock);
&gt; +    }

Keith pointed out I need to check if we have m_liveness already or not to avoid computing it twice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365566</commentid>
    <comment_count>8</comment_count>
      <attachid>325214</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 16:16:10 -0700</bug_when>
    <thetext>Created attachment 325214
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365581</commentid>
    <comment_count>9</comment_count>
      <attachid>325219</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-10-27 16:55:14 -0700</bug_when>
    <thetext>Created attachment 325219
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365584</commentid>
    <comment_count>10</comment_count>
      <attachid>325219</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2017-10-27 16:57:08 -0700</bug_when>
    <thetext>Comment on attachment 325219
patch

r=me if you get GCC working.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365606</commentid>
    <comment_count>11</comment_count>
      <attachid>325219</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-27 18:03:25 -0700</bug_when>
    <thetext>Comment on attachment 325219
patch

Clearing flags on attachment: 325219

Committed r224138: &lt;https://trac.webkit.org/changeset/224138&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1365607</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-27 18:03:27 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1372202</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-11-15 12:40:05 -0800</bug_when>
    <thetext>&lt;rdar://problem/35567840&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325201</attachid>
            <date>2017-10-27 14:52:45 -0700</date>
            <delta_ts>2017-10-27 15:12:35 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>34246</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjIzOTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDE1IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IFZlY3RvcjxZaWVsZERhdGE+IFlpZWxkczsKIAogICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0
aW9uKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpVbnBh
Y2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBTeW1ib2xUYWJsZSogZ2VuZXJhdG9yRnJh
bWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKLSAgICAg
ICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zKQorICAgICAgICA6IG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpCisg
ICAgICAgICwgbV9ncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpCiAgICAgICAgICwg
bV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlKCpjb2RlQmxvY2stPnZtKCksIGdlbmVyYXRvckZy
YW1lU3ltYm9sVGFibGUpCiAgICAgICAgICwgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5k
ZXgoZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KQogICAgIHsKICAgICAgICAgZm9yIChC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaCkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA6IGJsb2NrLT5vZmZzZXRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9ICZtX2dyYXBoLmluc3RydWN0aW9u
cygpW2J5dGVjb2RlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEluc3Ry
dWN0aW9uKiBwYyA9ICZpbnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdOwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAocGMtPnUub3Bjb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBvcF9lbnRl
cjogewogICAgICAgICAgICAgICAgICAgICBtX2VudGVyUG9pbnQgPSBieXRlY29kZU9mZnNldDsK
QEAgLTkxLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBydW4oKTsKIAotICAgIEJ5dGVj
b2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0K
KyAgICBCeXRlY29kZUdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KIAogICAgIGNv
bnN0IFlpZWxkcyYgeWllbGRzKCkgY29uc3QKICAgICB7CkBAIC0xMjEsMTAgKzEyMyw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPFN0b3JhZ2U+IHN0b3JhZ2UgPSBtX3N0
b3JhZ2VzW2luZGV4XSkKICAgICAgICAgICAgIHJldHVybiAqc3RvcmFnZTsKIAotICAgICAgICBV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFt
ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+YWRkSWRlbnRpZmllcihpZGVu
dGlmaWVyKTsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gbV9jb2RlQmxvY2st
Pm51bWJlck9mSWRlbnRpZmllcnMoKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZp
ZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0ID0gbV9nZW5l
cmF0b3JGcmFtZVN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vz
c2FyeSk7CiAgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0
KHNjb3BlT2Zmc2V0KSkpOwogCkBAIC0xMzgsNyArMTM5LDkgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBtX2VudGVyUG9pbnQgeyAwIH07Ci0gICAgQnl0ZWNvZGVHcmFwaDxVbmxp
bmtlZENvZGVCbG9jaz4gbV9ncmFwaDsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CisgICAgVW5saW5rZWRDb2RlQmxvY2s6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBtX2luc3Ry
dWN0aW9uczsKKyAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiAgICAgVmVjdG9yPHN0ZDo6b3B0
aW9uYWw8U3RvcmFnZT4+IG1fc3RvcmFnZXM7CiAgICAgWWllbGRzIG1feWllbGRzOwogICAgIFN0
cm9uZzxTeW1ib2xUYWJsZT4gbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlOwpAQCAtMTUyLDE1
ICsxNTUsMTUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHJ1bigpCisgICAg
dm9pZCBydW4oVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2s6
OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCiAgICAgewogICAgICAgICAvLyBQ
ZXJmb3JtIG1vZGlmaWVkIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGRldGVybWluZSB3aGljaCBsb2Nh
bHMgYXJlIGxpdmUgYXQgdGhlIG1lcmdlIHBvaW50cy4KICAgICAgICAgLy8gVGhpcyBwcm9kdWNl
cyB0aGUgY29uc2VydmF0aXZlIHJlc3VsdHMgZm9yIHRoZSBxdWVzdGlvbiwgIndoaWNoIHZhcmlh
YmxlcyBzaG91bGQgYmUgc2F2ZWQgYW5kIHJlc3VtZWQ/Ii4KIAotICAgICAgICBydW5MaXZlbmVz
c0ZpeHBvaW50KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOworICAgICAgICBydW5MaXZl
bmVzc0ZpeHBvaW50KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlv
bi5ncmFwaCgpKTsKIAogICAgICAgICBmb3IgKFlpZWxkRGF0YSYgZGF0YSA6IG1fZ2VuZXJhdG9y
aWZpY2F0aW9uLnlpZWxkcygpKQotICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQobV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgZGF0
YS5wb2ludCArIG9wY29kZUxlbmd0aChvcF95aWVsZCkpOworICAgICAgICAgICAgZGF0YS5saXZl
bmVzcyA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRhdGEucG9pbnQgKyBvcGNvZGVM
ZW5ndGgob3BfeWllbGQpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzMsMTggKzE3NiwxNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpydW4oKQogCiAgICAgewogICAgICAg
ICBHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzIHBhc3MoKnRoaXMpOwotICAgICAgICBwYXNzLnJ1
bigpOworICAgICAgICBwYXNzLnJ1bihtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOwogICAg
IH0KIAotICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9j
aygpOwotICAgIEJ5dGVjb2RlUmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCk7CisgICAgQnl0ZWNv
ZGVSZXdyaXRlciByZXdyaXRlcihtX2dyYXBoLCBtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMp
OwogCiAgICAgLy8gU2V0dXAgdGhlIGdsb2JhbCBzd2l0Y2ggZm9yIHRoZSBnZW5lcmF0b3IuCiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBuZXh0VG9FbnRlclBvaW50ID0gZW50ZXJQb2ludCgpICsg
b3Bjb2RlTGVuZ3RoKG9wX2VudGVyKTsKLSAgICAgICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRl
eCA9IG1fZ3JhcGguY29kZUJsb2NrKCktPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpOworICAg
ICAgICB1bnNpZ25lZCBzd2l0Y2hUYWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJlck9mU3dp
dGNoSnVtcFRhYmxlcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhdGUgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChzdGF0aWNfY2FzdDxpbnQzMl90PihKU0dlbmVyYXRvckZ1bmN0
aW9uOjpHZW5lcmF0b3JBcmd1bWVudDo6U3RhdGUpKTsKLSAgICAgICAgYXV0byYganVtcFRhYmxl
ID0gbV9ncmFwaC5jb2RlQmxvY2soKS0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIGF1
dG8mIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAg
ICAganVtcFRhYmxlLm1pbiA9IDA7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzLnJl
c2l6ZShtX3lpZWxkcy5zaXplKCkgKyAxKTsKICAgICAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNl
dHMuZmlsbCgwKTsKQEAgLTIyNyw3ICsyMjksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uOjpydW4oKQogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXgpOwogICAgICAgICAgICAgICAgIFN0b3JhZ2Ug
c3RvcmFnZSA9IHN0b3JhZ2VGb3JHZW5lcmF0b3JMb2NhbChpbmRleCk7CiAKLSAgICAgICAgICAg
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gY29kZUJsb2NrLT5hZGRWYWx1ZVBy
b2ZpbGUoKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
bV9jb2RlQmxvY2stPmFkZFZhbHVlUHJvZmlsZSgpOwogICAgICAgICAgICAgICAgIGZyYWdtZW50
LmFwcGVuZEluc3RydWN0aW9uKAogICAgICAgICAgICAgICAgICAgICBvcF9nZXRfZnJvbV9zY29w
ZSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSwgLy8gZHN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4K
IGNsYXNzIEJ5dGVjb2RlR3JhcGggewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVjb2RlR3JhcGgpOwogcHVibGljOgotICAgIHR5cGVk
ZWYgQmxvY2sgQ29kZUJsb2NrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQmxvY2s6Okluc3RydWN0
aW9uIEluc3RydWN0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUJhc2ljQmxvY2s+PiBCYXNpY0Jsb2Nrc1ZlY3RvcjsKIAotICAgIHR5cGVkZWYgV1RGOjpJ
bmRleGVkQ29udGFpbmVySXRlcmF0b3I8Qnl0ZWNvZGVHcmFwaDxCbG9jaz4+IGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgV1RGOjpJbmRleGVkQ29udGFpbmVySXRlcmF0b3I8Qnl0ZWNvZGVHcmFwaD4g
aXRlcmF0b3I7CiAKLSAgICBpbmxpbmUgQnl0ZWNvZGVHcmFwaChCbG9jayosIHR5cGVuYW1lIEJs
b2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYpOwotCi0gICAgQmxvY2sqIGNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0KLSAgICB0eXBlbmFtZSBCbG9jazo6VW5wYWNr
ZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgaW5saW5lIEJ5dGVj
b2RlR3JhcGgoQ29kZUJsb2NrVHlwZSosIHR5cGVuYW1lIENvZGVCbG9ja1R5cGU6OlVucGFja2Vk
SW5zdHJ1Y3Rpb25zJik7CiAKICAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8QmFzaWNCbG9ja3NWZWN0
b3I6OnJldmVyc2VfaXRlcmF0b3I+IGJhc2ljQmxvY2tzSW5SZXZlcnNlT3JkZXIoKQogICAgIHsK
QEAgLTEwNiwxOSArMTAwLDE0IEBAIHB1YmxpYzoKICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGxh
c3QoKSB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQogCiBwcml2YXRlOgotICAgIEJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBCYXNpY0Jsb2Nrc1ZlY3RvciBtX2Jhc2ljQmxvY2tzOwotICAgIHR5
cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVjdGlvbnM7CiB9Owog
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotQnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVj
b2RlR3JhcGgoQmxvY2sqIGNvZGVCbG9jaywgdHlwZW5hbWUgQmxvY2s6OlVucGFja2VkSW5zdHJ1
Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
LCBtX2luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgorQnl0ZWNvZGVHcmFwaDo6Qnl0ZWNvZGVHcmFwaChDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIHR5cGVuYW1lIENvZGVCbG9ja1R5cGU6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0
cnVjdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICBCeXRlY29kZUJhc2lj
QmxvY2s6OmNvbXB1dGUobV9jb2RlQmxvY2ssIGluc3RydWN0aW9ucy5iZWdpbigpLCBpbnN0cnVj
dGlvbnMuc2l6ZSgpLCBtX2Jhc2ljQmxvY2tzKTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2s6OmNv
bXB1dGUoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rpb25zLnNpemUo
KSwgbV9iYXNpY0Jsb2Nrcyk7CiAgICAgQVNTRVJUKG1fYmFzaWNCbG9ja3Muc2l6ZSgpKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw0MCArNDAsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICAgICA6IG1fZ3JhcGgoY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpKQogewotICAgIGNvbXB1dGUoKTsKKyAgICBydW5MaXZlbmVzc0ZpeHBvaW50KGNvZGVCbG9j
aywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCk7CisKKyAgICBpZiAoT3B0aW9u
czo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCisgICAgICAgIGR1bXBSZXN1bHRzKGNv
ZGVCbG9jayk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0KTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50
cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICByZXN1
bHQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9yQnl0ZWNvZGVPZmZzZXQobV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCByZXN1
bHQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2Nr
LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZz
ZXQsIHJlc3VsdCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5k
SXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OwotICAgIGdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKHJlc3VsdCwgb3BlcmFuZCk7Ci19Ci0KLUZh
c3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEZhc3RC
aXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0
ZUZ1bGxMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKIHsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7Ci0gICAgCisKICAgICByZXN1bHQubV9tYXAucmVz
aXplKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAKICAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+JiBibG9jayA6IG1fZ3JhcGguYmFzaWNC
bG9ja3NJblJldmVyc2VPcmRlcigpKSB7CkBAIC04NCw3ICs3Nyw3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVzdWx0
Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KQEAgLTkyLDQw
ICs4NSw0MCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1CiAKIHZv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMoQnl0ZWNvZGVLaWxscyYg
cmVzdWx0KQogewotICAgIEZhc3RCaXRWZWN0b3Igb3V0OwotICAgIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKLSAgICByZXN1bHQubV9jb2RlQmxvY2sg
PSBjb2RlQmxvY2s7Ci0gICAgcmVzdWx0Lm1fa2lsbFNldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5
dGVjb2RlS2lsbHM6OktpbGxTZXRbXT4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwotICAgIAotICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4mIGJs
b2NrIDogbV9ncmFwaC5iYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkpIHsKLSAgICAgICAgaWYg
KGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgb3V0ID0gYmxvY2stPm91dCgpOwotICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm9mZnNldHMoKS5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPm9m
ZnNldHMoKVtpXTsKLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgICAgICAgICAgWyZdICh1bnNp
Z25lZCBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgot
ICAgICAgICAgICAgICAgICAgICBpZiAob3V0W2luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fa2lsbFNldHNbYnl0ZWNv
ZGVPZmZzZXRdLmFkZChpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFtpbmRleF0gPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBp
bmRleCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWZzLgotICAgICAg
ICAgICAgICAgICAgICBvdXRbaW5kZXhdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9GYXN0Qml0
VmVjdG9yIG91dDsKKyAgICAvLworICAgIC8vQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBo
LmNvZGVCbG9jaygpOworICAgIC8vcmVzdWx0Lm1fY29kZUJsb2NrID0gY29kZUJsb2NrOworICAg
IC8vcmVzdWx0Lm1fa2lsbFNldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlS2lsbHM6Oktp
bGxTZXRbXT4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIC8vCisgICAg
Ly9mb3IgKHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+JiBibG9jayA6IG1fZ3Jh
cGguYmFzaWNCbG9ja3NJblJldmVyc2VPcmRlcigpKSB7CisgICAgLy8gICAgaWYgKGJsb2NrLT5p
c0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAvLyAgICAgICAgY29u
dGludWU7CisgICAgLy8gICAgCisgICAgLy8gICAgb3V0ID0gYmxvY2stPm91dCgpOworICAgIC8v
ICAgIAorICAgIC8vICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgp
OyBpLS07KSB7CisgICAgLy8gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
Pm9mZnNldHMoKVtpXTsKKyAgICAvLyAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKKyAgICAv
LyAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgIC8vICAgICAgICAgICAg
WyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgIC8vICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
Zm9yIHVzZXMuCisgICAgLy8gICAgICAgICAgICAgICAgaWYgKG91dFtpbmRleF0pCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAvLyAgICAgICAgICAgICAgICByZXN1bHQu
bV9raWxsU2V0c1tieXRlY29kZU9mZnNldF0uYWRkKGluZGV4KTsKKyAgICAvLyAgICAgICAgICAg
ICAgICBvdXRbaW5kZXhdID0gdHJ1ZTsKKyAgICAvLyAgICAgICAgICAgIH0sCisgICAgLy8gICAg
ICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CisgICAgLy8gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBmb3IgZGVmcy4KKyAgICAvLyAgICAgICAgICAgICAgICBvdXRbaW5kZXhdID0gZmFs
c2U7CisgICAgLy8gICAgICAgICAgICB9KTsKKyAgICAvLyAgICB9CisgICAgLy99CiB9CiAKLXZv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCit2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwogICAgIGRhdGFM
b2coIlxuRHVtcGluZyBieXRlY29kZSBsaXZlbmVzcyBmb3IgIiwgKmNvZGVCbG9jaywgIjpcbiIp
OwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTE3OCw3ICsxNzEsNyBA
QCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsCiAgICAgICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJmluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XTsKIAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVz
OiIpOwotICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBGYXN0Qml0
VmVjdG9yIGxpdmVCZWZvcmUgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICAgICAgZHVtcEJpdFZlY3RvcihsaXZlQmVm
b3JlKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogICAgICAgICAgICAgY29kZUJsb2Nr
LT5kdW1wQnl0ZWNvZGUoV1RGOjpkYXRhRmlsZSgpLCBpbnN0cnVjdGlvbnNCZWdpbiwgY3VycmVu
dEluc3RydWN0aW9uKTsKQEAgLTE5NSwxMiArMTg4LDQgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmR1bXBSZXN1bAogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmNvbXB1dGUoKQotewotICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQobV9ncmFwaCk7Ci0K
LSAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCi0gICAgICAg
IGR1bXBSZXN1bHRzKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaAkocmV2aXNpb24gMjIzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyAr
MzcsMTcgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3Jh
cGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3RlcE92
ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VG
dW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucywgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlw
ZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5jdG9yJik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBHcmFwaD4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKEdyYXBoJiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVj
b2RlR3JhcGgmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgb3V0KTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPiBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWNvZGVPZmZzZXQoR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2sqLCB1bnNpZ25lZCB0
YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0
aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2sqLCB1bnNpZ25lZCB0YXJn
ZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBHcmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiwgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlw
ZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2soQ29k
ZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29k
ZUJhc2ljQmxvY2sqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPiBGYXN0Qml0VmVj
dG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoR3JhcGgmLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5h
bWUgSW5zdHJ1Y3Rpb25zPiBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgm
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFw
aD4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KEdyYXBoJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiB2b2lkIHJ1bkxpdmVuZXNz
Rml4cG9pbnQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3Jh
cGgmKTsKIH07CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyA6IHByaXZhdGUgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uIHsKQEAgLTU3LDE5ICs1NywxNyBAQCBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjsKICAgICBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNM
aXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAKLSAgICB2b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJl
c3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayosIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0ZUtpbGxzKEJ5dGVjb2RlS2ls
bHMmIHJlc3VsdCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBk
dW1wUmVzdWx0cygpOworICAgIHZvaWQgZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2
b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3Im
KTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2Rl
R3JhcGggbV9ncmFwaDsKIH07CiAKIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50
IG9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lv
biAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlu
bGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBp
bnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNlL2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0
IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNsdWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRo
ZSB1c2VzLgotdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5
cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVu
YW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFw
aCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Us
IGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0
ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJz
dCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAgLy8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9n
aWNhbCBvcmRlcmluZyBpcyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRl
ZiB0aGUgc2FtZQpAQCAtNzksMjEgKzc5LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjoKICAgICAvLyB1c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3Bl
cmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVhciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdl
J2QKICAgICAvLyBmaXJzdCBhZGQgaXQgdG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhl
biB3ZSdkIHJlbW92ZSBpdCAodGhlIGRlZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFw
aC5jb2RlQmxvY2soKTsKLSAgICBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CisgICAgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVj
dGlvbnMuYmVnaW4oKTsKICAgICBhdXRvKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdp
bltieXRlY29kZU9mZnNldF07CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6
Z2V0T3Bjb2RlSUQoKmluc3RydWN0aW9uKTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAg
ICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1
Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tU
eXBlKiwgY29uc3QgdHlwZW5hbWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bj
b2RlSUQsIGludCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgZGVmKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS50b0xvY2FsKCkpOwogICAgICAgICB9KTsKIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAot
ICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6
SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2Rl
QmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBl
KiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgdXNlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOwogICAgICAgICB9KTsKQEAgLTEwNywxMSArMTA2LDEx
IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICB9CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBn
cmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisg
ICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCiAg
ICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJ
bmRleF0gPSB0cnVlOwpAQCAtMTIyLDggKzEyMSw4IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdy
YXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+
CitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExp
dmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2Rl
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYg
cmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VS
VCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKQEAgLTEzNCwyMiArMTMzLDIyIEBAIGlubGluZSBi
b29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0
ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3RlcE92ZXJJ
bnN0cnVjdGlvbihncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNl
dCwgb3V0KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiBncmFwaCwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBo
JiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBpZiAoYmxvY2stPmlz
RXhpdEJsb2NrKCkgfHwgYmxvY2stPmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoZ3Jh
cGgsIGJsb2NrLCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKKyAgICByZXR1
cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBC
eXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQoR3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBGYXN0Qml0
VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Js
b2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChibG9jayk7
CkBAIC0xNTcsMTQgKzE1NiwxMyBAQCBpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVu
ZXNzUHJvCiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZl
Y3RvciBvdXQ7CiAgICAgb3V0LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNl
dChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwg
b3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlu
bGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6cnVuTGl2ZW5lc3NGaXhwb2lu
dChHcmFwaCYgZ3JhcGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnJ1bkxpdmVuZXNzRml4cG9pbnQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgYXV0
byogY29kZUJsb2NrID0gZ3JhcGguY29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZW
YXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwogICAgIGZvciAoQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoKSB7CiAgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6
ZShudW1iZXJPZlZhcmlhYmxlcyk7CkBAIC0xODYsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOgogICAgICAgICAgICAgZm9yIChCeXRlY29kZUJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCiAgICAgICAgICAgICAgICAg
bmV3T3V0IHw9IHN1Y2Nlc3Nvci0+aW4oKTsKICAgICAgICAgICAgIGJsb2NrLT5vdXQoKSA9IG5l
d091dDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9j
ayhncmFwaCwgYmxvY2suZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJsb2NrKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2su
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3Bw
CShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVSZXdyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCB2b2lk
IEJ5dGVjb2RlUmV3cml0ZXI6OmFwcGx5TW9kaWZpY2F0aW9uCiAgICAgZm9yIChzaXplX3QgaW5z
ZXJ0aW9uSW5kZXggPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbnNlcnRpb25JbmRleC0tOykgewog
ICAgICAgICBJbnNlcnRpb24mIGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbnNlcnRpb25JbmRl
eF07CiAgICAgICAgIGlmIChpbnNlcnRpb24udHlwZSA9PSBJbnNlcnRpb246OlR5cGU6OlJlbW92
ZSkKLSAgICAgICAgICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKCkucmVtb3ZlKGluc2VydGlvbi5p
bmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1f
aW5zdHJ1Y3Rpb25zLnJlbW92ZShpbnNlcnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2Vy
dGlvbi5sZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGluc2VydGlv
bi5pbmNsdWRlQnJhbmNoID09IEluY2x1ZGVCcmFuY2g6OlllcykgewogICAgICAgICAgICAgICAg
IGludCBmaW5hbE9mZnNldCA9IGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCArIGNhbGN1
bGF0ZURpZmZlcmVuY2UobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5iZWdpbigp
ICsgaW5zZXJ0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGFkanVzdEp1bXBUYXJnZXRzSW5G
cmFnbWVudChmaW5hbE9mZnNldCwgaW5zZXJ0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuaW5zZXJ0VmVjdG9yKGluc2VydGlvbi5pbmRleC5i
eXRlY29kZU9mZnNldCwgaW5zZXJ0aW9uLmluc3RydWN0aW9ucyk7CisgICAgICAgICAgICBtX2lu
c3RydWN0aW9ucy5pbnNlcnRWZWN0b3IoaW5zZXJ0aW9uLmluZGV4LmJ5dGVjb2RlT2Zmc2V0LCBp
bnNlcnRpb24uaW5zdHJ1Y3Rpb25zKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2luc2VydGlv
bnMuY2xlYXIoKTsKQEAgLTU2LDggKzU2LDcgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjpleGVj
dXRlKCkKICAgICAgICAgcmV0dXJuIGxocy5pbmRleCA8IHJocy5pbmRleDsKICAgICB9KTsKIAot
ICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwot
ICAgIGNvZGVCbG9jay0+YXBwbHlNb2RpZmljYXRpb24oKnRoaXMpOworICAgIG1fY29kZUJsb2Nr
LT5hcHBseU1vZGlmaWNhdGlvbigqdGhpcywgbV9pbnN0cnVjdGlvbnMpOwogfQogCiB2b2lkIEJ5
dGVjb2RlUmV3cml0ZXI6OmFkanVzdEp1bXBUYXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5h
bE9mZnNldCwgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCkBAIC02OSw4ICs2OCw3IEBAIHZvaWQgQnl0
ZWNvZGVSZXdyaXRlcjo6YWRqdXN0SnVtcFRhcmdldHMKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnN0cnVjdGlvbi51Lm9wY29kZTsKICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlE
KSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBmaW5hbE9mZnNldCAr
IGZyYWdtZW50T2Zmc2V0OwotICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRh
cmdldHNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFn
bWVudE9mZnNldCwgWyZdKGludDMyX3QmIGxhYmVsKSB7CisgICAgICAgICAgICBleHRyYWN0U3Rv
cmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChtX2NvZGVCbG9jaywgaW5zdHJ1Y3Rpb25z
QmVnaW4sIGZyYWdtZW50T2Zmc2V0LCBbJl0oaW50MzJfdCYgbGFiZWwpIHsKICAgICAgICAgICAg
ICAgICBpbnQgYWJzb2x1dGVPZmZzZXQgPSBhZGp1c3RBYnNvbHV0ZU9mZnNldChsYWJlbCk7CiAg
ICAgICAgICAgICAgICAgbGFiZWwgPSBhYnNvbHV0ZU9mZnNldCAtIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJKHJldmlzaW9uIDIyMzk1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MSw4ICsxNjEsMTAgQEAgcHVibGljOgogICAgICAgICBJbmNs
dWRlQnJhbmNoJiBtX2luY2x1ZGVCcmFuY2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0
ZXIoQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoKQorICAgIEJ5dGVjb2Rl
UmV3cml0ZXIoQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25z
KQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgICAgICAsIG1faW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICB7CiAgICAg
fQogCkBAIC0xODgsMTIgKzE5MCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUJ5dGVj
b2RlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9pbnNlcnRpb25z
LmFwcGVuZChJbnNlcnRpb24geyBJbnNlcnRpb25Qb2ludChieXRlY29kZU9mZnNldCwgUG9zaXRp
b246Ok9yaWdpbmFsQnl0ZWNvZGVQb2ludCksIEluc2VydGlvbjo6VHlwZTo6UmVtb3ZlLCBJbmNs
dWRlQnJhbmNoOjpObywgb3Bjb2RlTGVuZ3RoKG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9IH0pOworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5k
KEluc2VydGlvbiB7IEluc2VydGlvblBvaW50KGJ5dGVjb2RlT2Zmc2V0LCBQb3NpdGlvbjo6T3Jp
Z2luYWxCeXRlY29kZVBvaW50KSwgSW5zZXJ0aW9uOjpUeXBlOjpSZW1vdmUsIEluY2x1ZGVCcmFu
Y2g6Ok5vLCBvcGNvZGVMZW5ndGgobV9pbnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdLnUub3Bj
b2RlKSwgeyB9IH0pOwogICAgIH0KIAogICAgIHZvaWQgZXhlY3V0ZSgpOwogCi0gICAgQnl0ZWNv
ZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQor
ICAgIEJ5dGVjb2RlR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQogCiAgICAgaW50
IGFkanVzdEFic29sdXRlT2Zmc2V0KGludCBhYnNvbHV0ZU9mZnNldCkKICAgICB7CkBAIC0yMTUs
NyArMjE3LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgYWRqdXN0SnVtcFRhcmdldChJbnNlcnRpb25Q
b2ludCBzdGFydFBvaW50LCBJbnNlcnRpb25Qb2ludCBqdW1wVGFyZ2V0UG9pbnQpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiBpbnQgY2FsY3VsYXRlRGlmZmVyZW5jZShJdGVyYXRv
ciBiZWdpbiwgSXRlcmF0b3IgZW5kKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2Rl
QmxvY2s+JiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGgmIG1fZ3JhcGg7CisgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tl
ZEluc3RydWN0aW9ucyYgbV9pbnN0cnVjdGlvbnM7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4g
bV9pbnNlcnRpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE5LDcgKzE3
MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tCiAgICAgLy8g
aXMgYmVjYXVzZSB0aGUgdmFyaWFibGVzIHRoYXQgdGhlIG9wX2NhdGNoIGRlZmluZXMgbWlnaHQg
YmUgZGVhZCwgYW5kCiAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRy
YWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCi0g
ICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9j
YXRjaCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3Mu
Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCArIE9Q
Q09ERV9MRU5HVEgob3BfY2F0Y2gpKTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBsaXZl
T3BlcmFuZHM7CiAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGl2ZUxv
Y2Fscy5iaXRDb3VudCgpKTsKICAgICBsaXZlTG9jYWxzLmZvckVhY2hTZXRCaXQoWyZdICh1bnNp
Z25lZCBsaXZlTG9jYWwpIHsKQEAgLTI4NTIsNyArMjg1Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2
YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMp
OyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBD
b2RlQmxvY2sgZm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9
IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoMCk7CisgICAgRmFzdEJp
dFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9m
ZnNldCh0aGlzLCAwKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsKICAgICAgICAgYmVnaW5WYWxp
ZGF0aW9uRGlkRmFpbCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkocmV2aXNpb24gMjIzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsNiArMTE1LDkgQEAgY2xh
c3MgQ29kZUJsb2NrIDogcHVibGljIEpTQ2VsbCB7CiAgICAgfTsKIAogcHVibGljOgorCisgICAg
dXNpbmcgSW5zdHJ1Y3Rpb25UeXBlID0gSW5zdHJ1Y3Rpb247CisKICAgICBlbnVtIENvcHlQYXJz
ZWRCbG9ja1RhZyB7IENvcHlQYXJzZWRCbG9jayB9OwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0lt
bW9ydGFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNDAsMTUgKzM0MCwxNSBAQCBVbmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9j
azo6CiAgICAgcmV0dXJuIFVubGlua2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChtX3Jh
cmVEYXRhLT5tX2V4Y2VwdGlvbkhhbmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0K
IAotdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdy
aXRlciYgcmV3cml0ZXIpCit2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlv
bihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRlciwgVW5wYWNrZWRJbnN0cnVjdGlvbnMmIGluc3Ry
dWN0aW9ucykKIHsKICAgICAvLyBCZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVz
dCB0aGUganVtcHMgYmFzZWQgb24gdGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9m
ZnNldCB0byB0aGUganVtcCB0YXJnZXQsIGFuZAogICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3Jt
YXRpb24uCiAKLSAgICBCeXRlY29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGggPSBy
ZXdyaXRlci5ncmFwaCgpOwotICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0Jl
Z2luID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKTsKKyAgICBCeXRlY29kZUdyYXBoJiBn
cmFwaCA9IHJld3JpdGVyLmdyYXBoKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKIAotICAgIGZvciAoaW50IGJ5dGVj
b2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGdyYXBoLmluc3RydWN0aW9ucygpLnNp
emUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlvbkNvdW50OykgeworICAgIGZvciAoaW50
IGJ5dGVjb2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9IGluc3RydWN0aW9ucy5zaXpl
KCk7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25Db3VudDspIHsKICAgICAgICAgVW5saW5r
ZWRJbnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZz
ZXQ7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gY3VycmVudFswXS51Lm9wY29kZTsKICAg
ICAgICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQodGhpcywgaW5z
dHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBbJl0oaW50MzJfdCYgcmVsYXRpdmVPZmZz
ZXQpIHsKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1v
ZGlmaWNhdGlvCiAKICAgICAvLyBBbmQgcmVjb21wdXRlIHRoZSBqdW1wIHRhcmdldCBiYXNlZCBv
biB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rpb25zLgogICAgIG1fanVtcFRhcmdldHMu
Y2xlYXIoKTsKLSAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgZ3JhcGguaW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpLCBtX2p1bXBU
YXJnZXRzKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVtcFRhcmdldHModGhpcywgaW5zdHJ1Y3Rp
b25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXplKCksIG1fanVtcFRhcmdldHMpOwogfQogCiB2
b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzaHJpbmtUb0ZpdCgpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24g
MjIzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAKIAogbmFtZXNwYWNlIEpTQyB7
CiAKK2NsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKIGNsYXNzIEJ5dGVjb2RlUmV3cml0
ZXI7CiBjbGFzcyBEZWJ1Z2dlcjsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKQEAgLTExNSw2
ICsxMTYsOCBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0
aW9uID0gdHJ1ZTsKIAorICAgIHVzaW5nIEluc3RydWN0aW9uVHlwZSA9IFVubGlua2VkSW5zdHJ1
Y3Rpb247CisKICAgICBlbnVtIHsgQ2FsbEZ1bmN0aW9uLCBBcHBseUZ1bmN0aW9uIH07CiAKICAg
ICB0eXBlZGVmIFVubGlua2VkSW5zdHJ1Y3Rpb24gSW5zdHJ1Y3Rpb247CkBAIC00MDgsNyArNDEx
LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZVJl
d3JpdGVyOwotICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYpOwor
ICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIFVucGFja2VkSW5z
dHJ1Y3Rpb25zJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQogICAg
IHsKQEAgLTUwMCw2ICs1MDMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxzaXplX3Q+IG1f
b3BQcm9maWxlQ29udHJvbEZsb3dCeXRlY29kZU9mZnNldHM7CiAgICAgfTsKIAorICAgIHN0ZDo6
dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+IG1fbGl2ZW5lc3M7CisKIHByaXZh
dGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRhPiBtX3JhcmVEYXRhOwogICAgIFZlY3Rv
cjxFeHByZXNzaW9uUmFuZ2VJbmZvPiBtX2V4cHJlc3Npb25JbmZvOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcg
KzEwODYsNyBAQCBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yCiAgICAg
ICAgIHJldHVybiAqaXRlci0+dmFsdWU7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxC
eXRlY29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2Rl
TGl2ZW5lc3M+KCk7Ci0gICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1
bGxMaXZlbmVzcygqbGl2ZW5lc3MpOworICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygp
LmNvbXB1dGVGdWxsTGl2ZW5lc3MoY29kZUJsb2NrLCAqbGl2ZW5lc3MpOwogICAgIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiByZXN1bHQgPSAqbGl2ZW5lc3M7CiAgICAgbV9ieXRlY29kZUxpdmVuZXNz
LmFkZChjb2RlQmxvY2ssIFdURk1vdmUobGl2ZW5lc3MpKTsKICAgICByZXR1cm4gcmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMjM5NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTcsNyArNjk3LDggQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5l
Y2VzcwogICAgIGlmICghbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJPZkxvY2FscygpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5l
c3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2NhbHMo
KTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325204</attachid>
            <date>2017-10-27 15:12:35 -0700</date>
            <delta_ts>2017-10-27 16:00:41 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>37560</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNwcAkocmV2aXNpb24gMjIzOTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsMTMgKzUzLDE1IEBAIHB1YmxpYzoKICAgICB0eXBlZGVm
IFZlY3RvcjxZaWVsZERhdGE+IFlpZWxkczsKIAogICAgIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0
aW9uKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpVbnBh
Y2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBTeW1ib2xUYWJsZSogZ2VuZXJhdG9yRnJh
bWVTeW1ib2xUYWJsZSwgaW50IGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKLSAgICAg
ICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zKQorICAgICAgICA6IG1fY29kZUJs
b2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpCisg
ICAgICAgICwgbV9ncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpCiAgICAgICAgICwg
bV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlKCpjb2RlQmxvY2stPnZtKCksIGdlbmVyYXRvckZy
YW1lU3ltYm9sVGFibGUpCiAgICAgICAgICwgbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5k
ZXgoZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4KQogICAgIHsKICAgICAgICAgZm9yIChC
eXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrIDogbV9ncmFwaCkgewogICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA6IGJsb2NrLT5vZmZzZXRzKCkpIHsKLSAgICAgICAgICAg
ICAgICBjb25zdCBVbmxpbmtlZEluc3RydWN0aW9uKiBwYyA9ICZtX2dyYXBoLmluc3RydWN0aW9u
cygpW2J5dGVjb2RlT2Zmc2V0XTsKKyAgICAgICAgICAgICAgICBjb25zdCBVbmxpbmtlZEluc3Ry
dWN0aW9uKiBwYyA9ICZpbnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdOwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAocGMtPnUub3Bjb2RlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBvcF9lbnRl
cjogewogICAgICAgICAgICAgICAgICAgICBtX2VudGVyUG9pbnQgPSBieXRlY29kZU9mZnNldDsK
QEAgLTkxLDcgKzkzLDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBydW4oKTsKIAotICAgIEJ5dGVj
b2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0K
KyAgICBCeXRlY29kZUdyYXBoJiBncmFwaCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KIAogICAgIGNv
bnN0IFlpZWxkcyYgeWllbGRzKCkgY29uc3QKICAgICB7CkBAIC0xMjEsMTAgKzEyMyw5IEBAIHBy
aXZhdGU6CiAgICAgICAgIGlmIChzdGQ6Om9wdGlvbmFsPFN0b3JhZ2U+IHN0b3JhZ2UgPSBtX3N0
b3JhZ2VzW2luZGV4XSkKICAgICAgICAgICAgIHJldHVybiAqc3RvcmFnZTsKIAotICAgICAgICBV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICAg
ICAgSWRlbnRpZmllciBpZGVudGlmaWVyID0gSWRlbnRpZmllcjo6ZnJvbVVpZChQcml2YXRlTmFt
ZSgpKTsKLSAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gY29kZUJsb2NrLT5udW1i
ZXJPZklkZW50aWZpZXJzKCk7Ci0gICAgICAgIGNvZGVCbG9jay0+YWRkSWRlbnRpZmllcihpZGVu
dGlmaWVyKTsKKyAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllckluZGV4ID0gbV9jb2RlQmxvY2st
Pm51bWJlck9mSWRlbnRpZmllcnMoKTsKKyAgICAgICAgbV9jb2RlQmxvY2stPmFkZElkZW50aWZp
ZXIoaWRlbnRpZmllcik7CiAgICAgICAgIFNjb3BlT2Zmc2V0IHNjb3BlT2Zmc2V0ID0gbV9nZW5l
cmF0b3JGcmFtZVN5bWJvbFRhYmxlLT50YWtlTmV4dFNjb3BlT2Zmc2V0KE5vTG9ja2luZ05lY2Vz
c2FyeSk7CiAgICAgICAgIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS0+c2V0KE5vTG9ja2lu
Z05lY2Vzc2FyeSwgaWRlbnRpZmllci5pbXBsKCksIFN5bWJvbFRhYmxlRW50cnkoVmFyT2Zmc2V0
KHNjb3BlT2Zmc2V0KSkpOwogCkBAIC0xMzgsNyArMTM5LDkgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICB1bnNpZ25lZCBtX2VudGVyUG9pbnQgeyAwIH07Ci0gICAgQnl0ZWNvZGVHcmFwaDxVbmxp
bmtlZENvZGVCbG9jaz4gbV9ncmFwaDsKKyAgICBVbmxpbmtlZENvZGVCbG9jayogbV9jb2RlQmxv
Y2s7CisgICAgVW5saW5rZWRDb2RlQmxvY2s6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBtX2luc3Ry
dWN0aW9uczsKKyAgICBCeXRlY29kZUdyYXBoIG1fZ3JhcGg7CiAgICAgVmVjdG9yPHN0ZDo6b3B0
aW9uYWw8U3RvcmFnZT4+IG1fc3RvcmFnZXM7CiAgICAgWWllbGRzIG1feWllbGRzOwogICAgIFN0
cm9uZzxTeW1ib2xUYWJsZT4gbV9nZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlOwpAQCAtMTUyLDE1
ICsxNTUsMTUgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKLSAgICB2b2lkIHJ1bigpCisgICAg
dm9pZCBydW4oVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jaywgVW5saW5rZWRDb2RlQmxvY2s6
OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCiAgICAgewogICAgICAgICAvLyBQ
ZXJmb3JtIG1vZGlmaWVkIGxpdmVuZXNzIGFuYWx5c2lzIHRvIGRldGVybWluZSB3aGljaCBsb2Nh
bHMgYXJlIGxpdmUgYXQgdGhlIG1lcmdlIHBvaW50cy4KICAgICAgICAgLy8gVGhpcyBwcm9kdWNl
cyB0aGUgY29uc2VydmF0aXZlIHJlc3VsdHMgZm9yIHRoZSBxdWVzdGlvbiwgIndoaWNoIHZhcmlh
YmxlcyBzaG91bGQgYmUgc2F2ZWQgYW5kIHJlc3VtZWQ/Ii4KIAotICAgICAgICBydW5MaXZlbmVz
c0ZpeHBvaW50KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCkpOworICAgICAgICBydW5MaXZl
bmVzc0ZpeHBvaW50KGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlv
bi5ncmFwaCgpKTsKIAogICAgICAgICBmb3IgKFlpZWxkRGF0YSYgZGF0YSA6IG1fZ2VuZXJhdG9y
aWZpY2F0aW9uLnlpZWxkcygpKQotICAgICAgICAgICAgZGF0YS5saXZlbmVzcyA9IGdldExpdmVu
ZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQobV9nZW5lcmF0b3JpZmljYXRpb24uZ3JhcGgoKSwgZGF0
YS5wb2ludCArIG9wY29kZUxlbmd0aChvcF95aWVsZCkpOworICAgICAgICAgICAgZGF0YS5saXZl
bmVzcyA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVj
dGlvbnMsIG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRhdGEucG9pbnQgKyBvcGNvZGVM
ZW5ndGgob3BfeWllbGQpKTsKICAgICB9CiAKIHByaXZhdGU6CkBAIC0xNzMsMTggKzE3NiwxNyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yaWZpY2F0aW9uOjpydW4oKQogCiAgICAgewogICAgICAg
ICBHZW5lcmF0b3JMaXZlbmVzc0FuYWx5c2lzIHBhc3MoKnRoaXMpOwotICAgICAgICBwYXNzLnJ1
bigpOworICAgICAgICBwYXNzLnJ1bihtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOwogICAg
IH0KIAotICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9j
aygpOwotICAgIEJ5dGVjb2RlUmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCk7CisgICAgQnl0ZWNv
ZGVSZXdyaXRlciByZXdyaXRlcihtX2dyYXBoLCBtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMp
OwogCiAgICAgLy8gU2V0dXAgdGhlIGdsb2JhbCBzd2l0Y2ggZm9yIHRoZSBnZW5lcmF0b3IuCiAg
ICAgewogICAgICAgICB1bnNpZ25lZCBuZXh0VG9FbnRlclBvaW50ID0gZW50ZXJQb2ludCgpICsg
b3Bjb2RlTGVuZ3RoKG9wX2VudGVyKTsKLSAgICAgICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRl
eCA9IG1fZ3JhcGguY29kZUJsb2NrKCktPm51bWJlck9mU3dpdGNoSnVtcFRhYmxlcygpOworICAg
ICAgICB1bnNpZ25lZCBzd2l0Y2hUYWJsZUluZGV4ID0gbV9jb2RlQmxvY2stPm51bWJlck9mU3dp
dGNoSnVtcFRhYmxlcygpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3RhdGUgPSB2aXJ0dWFs
UmVnaXN0ZXJGb3JBcmd1bWVudChzdGF0aWNfY2FzdDxpbnQzMl90PihKU0dlbmVyYXRvckZ1bmN0
aW9uOjpHZW5lcmF0b3JBcmd1bWVudDo6U3RhdGUpKTsKLSAgICAgICAgYXV0byYganVtcFRhYmxl
ID0gbV9ncmFwaC5jb2RlQmxvY2soKS0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CisgICAgICAgIGF1
dG8mIGp1bXBUYWJsZSA9IG1fY29kZUJsb2NrLT5hZGRTd2l0Y2hKdW1wVGFibGUoKTsKICAgICAg
ICAganVtcFRhYmxlLm1pbiA9IDA7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRzLnJl
c2l6ZShtX3lpZWxkcy5zaXplKCkgKyAxKTsKICAgICAgICAganVtcFRhYmxlLmJyYW5jaE9mZnNl
dHMuZmlsbCgwKTsKQEAgLTIyNyw3ICsyMjksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yaWZp
Y2F0aW9uOjpydW4oKQogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvcGVyYW5kID0g
dmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwoaW5kZXgpOwogICAgICAgICAgICAgICAgIFN0b3JhZ2Ug
c3RvcmFnZSA9IHN0b3JhZ2VGb3JHZW5lcmF0b3JMb2NhbChpbmRleCk7CiAKLSAgICAgICAgICAg
ICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gY29kZUJsb2NrLT5hZGRWYWx1ZVBy
b2ZpbGUoKTsKKyAgICAgICAgICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0g
bV9jb2RlQmxvY2stPmFkZFZhbHVlUHJvZmlsZSgpOwogICAgICAgICAgICAgICAgIGZyYWdtZW50
LmFwcGVuZEluc3RydWN0aW9uKAogICAgICAgICAgICAgICAgICAgICBvcF9nZXRfZnJvbV9zY29w
ZSwKICAgICAgICAgICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSwgLy8gZHN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdyYXBoLmgJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdy
YXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDIyICszNSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgQnl0ZWNvZGVCYXNpY0Jsb2NrOwogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4K
IGNsYXNzIEJ5dGVjb2RlR3JhcGggewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEJ5dGVjb2RlR3JhcGgpOwogcHVibGljOgotICAgIHR5cGVk
ZWYgQmxvY2sgQ29kZUJsb2NrOwotICAgIHR5cGVkZWYgdHlwZW5hbWUgQmxvY2s6Okluc3RydWN0
aW9uIEluc3RydWN0aW9uOwogICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCeXRl
Y29kZUJhc2ljQmxvY2s+PiBCYXNpY0Jsb2Nrc1ZlY3RvcjsKIAotICAgIHR5cGVkZWYgV1RGOjpJ
bmRleGVkQ29udGFpbmVySXRlcmF0b3I8Qnl0ZWNvZGVHcmFwaDxCbG9jaz4+IGl0ZXJhdG9yOwor
ICAgIHR5cGVkZWYgV1RGOjpJbmRleGVkQ29udGFpbmVySXRlcmF0b3I8Qnl0ZWNvZGVHcmFwaD4g
aXRlcmF0b3I7CiAKLSAgICBpbmxpbmUgQnl0ZWNvZGVHcmFwaChCbG9jayosIHR5cGVuYW1lIEJs
b2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYpOwotCi0gICAgQmxvY2sqIGNvZGVCbG9jaygpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZUJsb2NrOyB9Ci0KLSAgICB0eXBlbmFtZSBCbG9jazo6VW5wYWNr
ZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucygpIHsgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zOyB9
CisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIENvZGVCbG9ja1R5cGU+CisgICAgaW5saW5lIEJ5dGVj
b2RlR3JhcGgoQ29kZUJsb2NrVHlwZSosIHR5cGVuYW1lIENvZGVCbG9ja1R5cGU6OlVucGFja2Vk
SW5zdHJ1Y3Rpb25zJik7CiAKICAgICBXVEY6Okl0ZXJhdG9yUmFuZ2U8QmFzaWNCbG9ja3NWZWN0
b3I6OnJldmVyc2VfaXRlcmF0b3I+IGJhc2ljQmxvY2tzSW5SZXZlcnNlT3JkZXIoKQogICAgIHsK
QEAgLTEwNiwxOSArMTAwLDE0IEBAIHB1YmxpYzoKICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGxh
c3QoKSB7IHJldHVybiBhdChzaXplKCkgLSAxKTsgfQogCiBwcml2YXRlOgotICAgIEJsb2NrKiBt
X2NvZGVCbG9jazsKICAgICBCYXNpY0Jsb2Nrc1ZlY3RvciBtX2Jhc2ljQmxvY2tzOwotICAgIHR5
cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVjdGlvbnM7CiB9Owog
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEJsb2NrPgotQnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVj
b2RlR3JhcGgoQmxvY2sqIGNvZGVCbG9jaywgdHlwZW5hbWUgQmxvY2s6OlVucGFja2VkSW5zdHJ1
Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCi0gICAgOiBtX2NvZGVCbG9jayhjb2RlQmxvY2spCi0gICAg
LCBtX2luc3RydWN0aW9ucyhpbnN0cnVjdGlvbnMpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlPgorQnl0ZWNvZGVHcmFwaDo6Qnl0ZWNvZGVHcmFwaChDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIHR5cGVuYW1lIENvZGVCbG9ja1R5cGU6OlVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0
cnVjdGlvbnMpCiB7Ci0gICAgQVNTRVJUKG1fY29kZUJsb2NrKTsKLSAgICBCeXRlY29kZUJhc2lj
QmxvY2s6OmNvbXB1dGUobV9jb2RlQmxvY2ssIGluc3RydWN0aW9ucy5iZWdpbigpLCBpbnN0cnVj
dGlvbnMuc2l6ZSgpLCBtX2Jhc2ljQmxvY2tzKTsKKyAgICBCeXRlY29kZUJhc2ljQmxvY2s6OmNv
bXB1dGUoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rpb25zLnNpemUo
KSwgbV9iYXNpY0Jsb2Nrcyk7CiAgICAgQVNTRVJUKG1fYmFzaWNCbG9ja3Muc2l6ZSgpKTsKIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MCw0MCArNDAsMzMgQEAgbmFtZXNwYWNlIEpTQyB7CiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNv
ZGVCbG9jaykKICAgICA6IG1fZ3JhcGgoY29kZUJsb2NrLCBjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpKQogewotICAgIGNvbXB1dGUoKTsKKyAgICBydW5MaXZlbmVzc0ZpeHBvaW50KGNvZGVCbG9j
aywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCk7CisKKyAgICBpZiAoT3B0aW9u
czo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCisgICAgICAgIGR1bXBSZXN1bHRzKGNv
ZGVCbG9jayk7CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sqIGNvZGVCbG9jaywgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBCeXRlY29kZUJhc2ljQmxv
Y2sqIGJsb2NrID0gbV9ncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0KTsKICAgICBBU1NFUlQoYmxvY2spOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50
cnlCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0V4aXRCbG9jaygpKTsKICAgICByZXN1
bHQucmVzaXplKGJsb2NrLT5vdXQoKS5udW1CaXRzKCkpOwotICAgIGNvbXB1dGVMb2NhbExpdmVu
ZXNzRm9yQnl0ZWNvZGVPZmZzZXQobV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCByZXN1
bHQpOworICAgIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2Nr
LCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLCBtX2dyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZz
ZXQsIHJlc3VsdCk7CiB9CiAKLWJvb2wgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5k
SXNMaXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCi17Ci0gICAgaWYgKG9wZXJhbmRJc0Fsd2F5c0xpdmUob3BlcmFuZCkpCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIEZhc3RCaXRWZWN0b3IgcmVzdWx0OwotICAgIGdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQsIHJlc3VsdCk7Ci0gICAgcmV0dXJuIG9w
ZXJhbmRUaGF0SXNOb3RBbHdheXNMaXZlSXNMaXZlKHJlc3VsdCwgb3BlcmFuZCk7Ci19Ci0KLUZh
c3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQorRmFzdEJpdFZlY3RvciBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29k
ZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEZhc3RC
aXRWZWN0b3Igb3V0OwotICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2Rl
QmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgIHJldHVybiBvdXQ7CiB9CiAKLXZvaWQg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0
ZUZ1bGxMaXZlbmVzcyhDb2RlQmxvY2sqIGNvZGVCbG9jaywgRnVsbEJ5dGVjb2RlTGl2ZW5lc3Mm
IHJlc3VsdCkKIHsKICAgICBGYXN0Qml0VmVjdG9yIG91dDsKLSAgICBDb2RlQmxvY2sqIGNvZGVC
bG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7Ci0gICAgCisKICAgICByZXN1bHQubV9tYXAucmVz
aXplKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKICAgICAKICAgICBmb3IgKHN0
ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+JiBibG9jayA6IG1fZ3JhcGguYmFzaWNC
bG9ja3NJblJldmVyc2VPcmRlcigpKSB7CkBAIC04NCw3ICs3Nyw3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVzdWx0
Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KQEAgLTkyLDQw
ICs4NSw0MCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1CiAKIHZv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMoQnl0ZWNvZGVLaWxscyYg
cmVzdWx0KQogewotICAgIEZhc3RCaXRWZWN0b3Igb3V0OwotICAgIAotICAgIENvZGVCbG9jayog
Y29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKLSAgICByZXN1bHQubV9jb2RlQmxvY2sg
PSBjb2RlQmxvY2s7Ci0gICAgcmVzdWx0Lm1fa2lsbFNldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5
dGVjb2RlS2lsbHM6OktpbGxTZXRbXT4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkp
OwotICAgIAotICAgIGZvciAoc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlQmFzaWNCbG9jaz4mIGJs
b2NrIDogbV9ncmFwaC5iYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkpIHsKLSAgICAgICAgaWYg
KGJsb2NrLT5pc0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgb3V0ID0gYmxvY2stPm91dCgpOwotICAg
ICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm9mZnNldHMoKS5zaXplKCk7
IGktLTspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPm9m
ZnNldHMoKVtpXTsKLSAgICAgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oCi0gICAgICAgICAg
ICAgICAgbV9ncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgICAgICAgICAgWyZdICh1bnNp
Z25lZCBpbmRleCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgot
ICAgICAgICAgICAgICAgICAgICBpZiAob3V0W2luZGV4XSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0Lm1fa2lsbFNldHNbYnl0ZWNv
ZGVPZmZzZXRdLmFkZChpbmRleCk7Ci0gICAgICAgICAgICAgICAgICAgIG91dFtpbmRleF0gPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0sCi0gICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBp
bmRleCkgewotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciBkZWZzLgotICAgICAg
ICAgICAgICAgICAgICBvdXRbaW5kZXhdID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgfSk7Ci0g
ICAgICAgIH0KLSAgICB9CisgICAgVU5VU0VEX1BBUkFNKHJlc3VsdCk7CisgICAgLy9GYXN0Qml0
VmVjdG9yIG91dDsKKyAgICAvLworICAgIC8vQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBo
LmNvZGVCbG9jaygpOworICAgIC8vcmVzdWx0Lm1fY29kZUJsb2NrID0gY29kZUJsb2NrOworICAg
IC8vcmVzdWx0Lm1fa2lsbFNldHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlS2lsbHM6Oktp
bGxTZXRbXT4oY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOworICAgIC8vCisgICAg
Ly9mb3IgKHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUJhc2ljQmxvY2s+JiBibG9jayA6IG1fZ3Jh
cGguYmFzaWNCbG9ja3NJblJldmVyc2VPcmRlcigpKSB7CisgICAgLy8gICAgaWYgKGJsb2NrLT5p
c0VudHJ5QmxvY2soKSB8fCBibG9jay0+aXNFeGl0QmxvY2soKSkKKyAgICAvLyAgICAgICAgY29u
dGludWU7CisgICAgLy8gICAgCisgICAgLy8gICAgb3V0ID0gYmxvY2stPm91dCgpOworICAgIC8v
ICAgIAorICAgIC8vICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgp
OyBpLS07KSB7CisgICAgLy8gICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2st
Pm9mZnNldHMoKVtpXTsKKyAgICAvLyAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKKyAgICAv
LyAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgIC8vICAgICAgICAgICAg
WyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgIC8vICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMg
Zm9yIHVzZXMuCisgICAgLy8gICAgICAgICAgICAgICAgaWYgKG91dFtpbmRleF0pCisgICAgLy8g
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAvLyAgICAgICAgICAgICAgICByZXN1bHQu
bV9raWxsU2V0c1tieXRlY29kZU9mZnNldF0uYWRkKGluZGV4KTsKKyAgICAvLyAgICAgICAgICAg
ICAgICBvdXRbaW5kZXhdID0gdHJ1ZTsKKyAgICAvLyAgICAgICAgICAgIH0sCisgICAgLy8gICAg
ICAgICAgICBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CisgICAgLy8gICAgICAgICAgICAgICAgLy8g
VGhpcyBpcyBmb3IgZGVmcy4KKyAgICAvLyAgICAgICAgICAgICAgICBvdXRbaW5kZXhdID0gZmFs
c2U7CisgICAgLy8gICAgICAgICAgICB9KTsKKyAgICAvLyAgICB9CisgICAgLy99CiB9CiAKLXZv
aWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWx0cygpCit2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCiB7Ci0g
ICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwogICAgIGRhdGFM
b2coIlxuRHVtcGluZyBieXRlY29kZSBsaXZlbmVzcyBmb3IgIiwgKmNvZGVCbG9jaywgIjpcbiIp
OwogICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYmVnaW4oKTsKICAgICB1bnNpZ25lZCBpID0gMDsKQEAgLTE3OCw3ICsxNzEsNyBA
QCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6ZHVtcFJlc3VsCiAgICAgICAgICAgICBj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJmluc3RydWN0aW9uc0JlZ2lu
W2J5dGVjb2RlT2Zmc2V0XTsKIAogICAgICAgICAgICAgZGF0YUxvZ0YoIkxpdmUgdmFyaWFibGVz
OiIpOwotICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCk7CisgICAgICAgICAgICBGYXN0Qml0
VmVjdG9yIGxpdmVCZWZvcmUgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVC
bG9jaywgYnl0ZWNvZGVPZmZzZXQpOwogICAgICAgICAgICAgZHVtcEJpdFZlY3RvcihsaXZlQmVm
b3JlKTsKICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogICAgICAgICAgICAgY29kZUJsb2Nr
LT5kdW1wQnl0ZWNvZGUoV1RGOjpkYXRhRmlsZSgpLCBpbnN0cnVjdGlvbnNCZWdpbiwgY3VycmVu
dEluc3RydWN0aW9uKTsKQEAgLTE5NSwxMiArMTg4LDQgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmR1bXBSZXN1bAogICAgIH0KIH0KIAotdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmNvbXB1dGUoKQotewotICAgIHJ1bkxpdmVuZXNzRml4cG9pbnQobV9ncmFwaCk7Ci0K
LSAgICBpZiAoT3B0aW9uczo6ZHVtcEJ5dGVjb2RlTGl2ZW5lc3NSZXN1bHRzKCkpCi0gICAgICAg
IGR1bXBSZXN1bHRzKCk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaAkocmV2aXNpb24gMjIzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyAr
MzcsMTcgQEAgY2xhc3MgRnVsbEJ5dGVjb2RlTGl2ZW5lc3M7CiAKIGNsYXNzIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbiB7CiBwcm90ZWN0ZWQ6Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3Jh
cGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3RlcE92
ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VG
dW5jdG9yJiwgY29uc3QgRGVmRnVuY3RvciYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucywgdHlwZW5hbWUgVXNlRnVuY3RvciwgdHlw
ZW5hbWUgRGVmRnVuY3Rvcj4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIGNvbnN0IFVzZUZ1bmN0b3ImLCBjb25zdCBEZWZGdW5jdG9yJik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBHcmFwaD4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKEdyYXBoJiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiB2b2lkIHN0ZXBP
dmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVj
b2RlR3JhcGgmLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3RvciYgb3V0KTsK
IAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPiBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQnl0ZWNvZGVPZmZzZXQoR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2sqLCB1bnNpZ25lZCB0
YXJnZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0
aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29kZUJhc2ljQmxvY2sqLCB1bnNpZ25lZCB0YXJn
ZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBHcmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiwgQnl0ZWNv
ZGVCYXNpY0Jsb2NrKik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlw
ZW5hbWUgSW5zdHJ1Y3Rpb25zPiBib29sIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2soQ29k
ZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgmLCBCeXRlY29k
ZUJhc2ljQmxvY2sqKTsKIAotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPiBGYXN0Qml0VmVj
dG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoR3JhcGgmLCB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5h
bWUgSW5zdHJ1Y3Rpb25zPiBGYXN0Qml0VmVjdG9yIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3JhcGgm
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBHcmFw
aD4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KEdyYXBoJik7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPiB2b2lkIHJ1bkxpdmVuZXNz
Rml4cG9pbnQoQ29kZUJsb2NrVHlwZSosIGNvbnN0IEluc3RydWN0aW9ucyYsIEJ5dGVjb2RlR3Jh
cGgmKTsKIH07CiAKIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyA6IHByaXZhdGUgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uIHsKQEAgLTU3LDE5ICs1NywxNyBAQCBwdWJsaWM6CiAg
ICAgZnJpZW5kIGNsYXNzIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjsKICAgICBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKik7CiAgICAgCi0gICAgYm9vbCBvcGVyYW5kSXNM
aXZlQXRCeXRlY29kZU9mZnNldChpbnQgb3BlcmFuZCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwotICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNp
Z25lZCBieXRlY29kZU9mZnNldCk7CisgICAgRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAKLSAgICB2b2lkIGNvbXB1dGVGdWxsTGl2ZW5lc3MoRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIHJl
c3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNzKENvZGVCbG9jayosIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzJiByZXN1bHQpOwogICAgIHZvaWQgY29tcHV0ZUtpbGxzKEJ5dGVjb2RlS2ls
bHMmIHJlc3VsdCk7CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBk
dW1wUmVzdWx0cygpOworICAgIHZvaWQgZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2
b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVP
ZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3Im
KTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2Rl
R3JhcGggbV9ncmFwaDsKIH07CiAKIGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50
IG9wZXJhbmQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lv
biAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlu
bGluZSBib29sIGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBp
bnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNlL2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0
IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNsdWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRo
ZSB1c2VzLgotdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5
cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9m
ZnNldCwgY29uc3QgVXNlRnVuY3RvciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVu
YW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSog
Y29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFw
aCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2Us
IGNvbnN0IERlZkZ1bmN0b3ImIGRlZikKIHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0
ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJz
dCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAgLy8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9n
aWNhbCBvcmRlcmluZyBpcyBuZWNlc3NhcnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRl
ZiB0aGUgc2FtZQpAQCAtNzksMjEgKzc5LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjoKICAgICAvLyB1c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3Bl
cmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVhciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdl
J2QKICAgICAvLyBmaXJzdCBhZGQgaXQgdG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhl
biB3ZSdkIHJlbW92ZSBpdCAodGhlIGRlZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFw
aC5jb2RlQmxvY2soKTsKLSAgICBhdXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CisgICAgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVj
dGlvbnMuYmVnaW4oKTsKICAgICBhdXRvKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdp
bltieXRlY29kZU9mZnNldF07CiAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6
Z2V0T3Bjb2RlSUQoKmluc3RydWN0aW9uKTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAg
ICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1
Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tU
eXBlKiwgY29uc3QgdHlwZW5hbWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bj
b2RlSUQsIGludCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9y
TGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgZGVmKFZpcnR1YWxSZWdpc3Rlcihv
cGVyYW5kKS50b0xvY2FsKCkpOwogICAgICAgICB9KTsKIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0
ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAot
ICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6
SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2Rl
QmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBl
KiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lz
dGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAgICAgICAgICAgICAgdXNlKFZpcnR1YWxSZWdp
c3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOwogICAgICAgICB9KTsKQEAgLTEwNywxMSArMTA2LDEx
IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICB9CiB9CiAK
LXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpzdGVwT3Zlckluc3RydWN0aW9uKEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVC
bG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2Rl
QmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBn
cmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKAotICAgICAgICBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisg
ICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCiAg
ICAgICAgIFsmXSAodW5zaWduZWQgYml0SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMg
dGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBzZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJ
bmRleF0gPSB0cnVlOwpAQCAtMTIyLDggKzEyMSw4IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdy
YXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jaywgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+
CitpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExp
dmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJ
bnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2Rl
QmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYg
cmVzdWx0KQogewogICAgIEFTU0VSVCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VS
VCghYmxvY2stPmlzRW50cnlCbG9jaygpKTsKQEAgLTEzNCwyMiArMTMzLDIyIEBAIGlubGluZSBi
b29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0
ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3RlcE92ZXJJ
bnN0cnVjdGlvbihncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgIHN0ZXBPdmVy
SW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNl
dCwgb3V0KTsKICAgICB9CiAKICAgICByZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CiB9
CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVz
c1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiBncmFwaCwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5
cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiBj
b2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBo
JiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaykKIHsKICAgICBpZiAoYmxvY2stPmlz
RXhpdEJsb2NrKCkgfHwgYmxvY2stPmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoZ3Jh
cGgsIGJsb2NrLCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKKyAgICByZXR1
cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3Ry
dWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigp
KTsKIH0KIAotdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBC
eXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZz
ZXQoR3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK3RlbXBsYXRlPHR5cGVu
YW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBGYXN0Qml0
VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldChDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYg
aW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Js
b2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChibG9jayk7
CkBAIC0xNTcsMTQgKzE1NiwxMyBAQCBpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVu
ZXNzUHJvCiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZl
Y3RvciBvdXQ7CiAgICAgb3V0LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNl
dChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwg
b3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlu
bGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6cnVuTGl2ZW5lc3NGaXhwb2lu
dChHcmFwaCYgZ3JhcGgpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFt
ZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnJ1bkxpdmVuZXNzRml4cG9pbnQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgYXV0
byogY29kZUJsb2NrID0gZ3JhcGguY29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZW
YXJpYWJsZXMgPSBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpOwogICAgIGZvciAoQnl0ZWNv
ZGVCYXNpY0Jsb2NrKiBibG9jayA6IGdyYXBoKSB7CiAgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6
ZShudW1iZXJPZlZhcmlhYmxlcyk7CkBAIC0xODYsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOgogICAgICAgICAgICAgZm9yIChCeXRlY29kZUJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCiAgICAgICAgICAgICAgICAg
bmV3T3V0IHw9IHN1Y2Nlc3Nvci0+aW4oKTsKICAgICAgICAgICAgIGJsb2NrLT5vdXQoKSA9IG5l
d091dDsKLSAgICAgICAgICAgIGNoYW5nZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9j
ayhncmFwaCwgYmxvY2suZ2V0KCkpOworICAgICAgICAgICAgY2hhbmdlZCB8PSBjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJsb2NrKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2su
Z2V0KCkpOwogICAgICAgICB9CiAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3Bw
CShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0
ZWNvZGVSZXdyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCB2b2lk
IEJ5dGVjb2RlUmV3cml0ZXI6OmFwcGx5TW9kaWZpY2F0aW9uCiAgICAgZm9yIChzaXplX3QgaW5z
ZXJ0aW9uSW5kZXggPSBtX2luc2VydGlvbnMuc2l6ZSgpOyBpbnNlcnRpb25JbmRleC0tOykgewog
ICAgICAgICBJbnNlcnRpb24mIGluc2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbnNlcnRpb25JbmRl
eF07CiAgICAgICAgIGlmIChpbnNlcnRpb24udHlwZSA9PSBJbnNlcnRpb246OlR5cGU6OlJlbW92
ZSkKLSAgICAgICAgICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKCkucmVtb3ZlKGluc2VydGlvbi5p
bmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1f
aW5zdHJ1Y3Rpb25zLnJlbW92ZShpbnNlcnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2Vy
dGlvbi5sZW5ndGgoKSk7CiAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGluc2VydGlv
bi5pbmNsdWRlQnJhbmNoID09IEluY2x1ZGVCcmFuY2g6OlllcykgewogICAgICAgICAgICAgICAg
IGludCBmaW5hbE9mZnNldCA9IGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCArIGNhbGN1
bGF0ZURpZmZlcmVuY2UobV9pbnNlcnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5iZWdpbigp
ICsgaW5zZXJ0aW9uSW5kZXgpOwogICAgICAgICAgICAgICAgIGFkanVzdEp1bXBUYXJnZXRzSW5G
cmFnbWVudChmaW5hbE9mZnNldCwgaW5zZXJ0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuaW5zZXJ0VmVjdG9yKGluc2VydGlvbi5pbmRleC5i
eXRlY29kZU9mZnNldCwgaW5zZXJ0aW9uLmluc3RydWN0aW9ucyk7CisgICAgICAgICAgICBtX2lu
c3RydWN0aW9ucy5pbnNlcnRWZWN0b3IoaW5zZXJ0aW9uLmluZGV4LmJ5dGVjb2RlT2Zmc2V0LCBp
bnNlcnRpb24uaW5zdHJ1Y3Rpb25zKTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2luc2VydGlv
bnMuY2xlYXIoKTsKQEAgLTU2LDggKzU2LDcgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjpleGVj
dXRlKCkKICAgICAgICAgcmV0dXJuIGxocy5pbmRleCA8IHJocy5pbmRleDsKICAgICB9KTsKIAot
ICAgIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwot
ICAgIGNvZGVCbG9jay0+YXBwbHlNb2RpZmljYXRpb24oKnRoaXMpOworICAgIG1fY29kZUJsb2Nr
LT5hcHBseU1vZGlmaWNhdGlvbigqdGhpcywgbV9pbnN0cnVjdGlvbnMpOwogfQogCiB2b2lkIEJ5
dGVjb2RlUmV3cml0ZXI6OmFkanVzdEp1bXBUYXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5h
bE9mZnNldCwgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCkBAIC02OSw4ICs2OCw3IEBAIHZvaWQgQnl0
ZWNvZGVSZXdyaXRlcjo6YWRqdXN0SnVtcFRhcmdldHMKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBpbnN0cnVjdGlvbi51Lm9wY29kZTsKICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlE
KSkgewogICAgICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBmaW5hbE9mZnNldCAr
IGZyYWdtZW50T2Zmc2V0OwotICAgICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9j
ayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7Ci0gICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRh
cmdldHNGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFn
bWVudE9mZnNldCwgWyZdKGludDMyX3QmIGxhYmVsKSB7CisgICAgICAgICAgICBleHRyYWN0U3Rv
cmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChtX2NvZGVCbG9jaywgaW5zdHJ1Y3Rpb25z
QmVnaW4sIGZyYWdtZW50T2Zmc2V0LCBbJl0oaW50MzJfdCYgbGFiZWwpIHsKICAgICAgICAgICAg
ICAgICBpbnQgYWJzb2x1dGVPZmZzZXQgPSBhZGp1c3RBYnNvbHV0ZU9mZnNldChsYWJlbCk7CiAg
ICAgICAgICAgICAgICAgbGFiZWwgPSBhYnNvbHV0ZU9mZnNldCAtIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGVPZmZzZXQpOwogICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJKHJldmlzaW9uIDIyMzk1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE2MSw4ICsxNjEsMTAgQEAgcHVibGljOgogICAgICAgICBJbmNs
dWRlQnJhbmNoJiBtX2luY2x1ZGVCcmFuY2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0
ZXIoQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoKQorICAgIEJ5dGVjb2Rl
UmV3cml0ZXIoQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25z
KQogICAgICAgICA6IG1fZ3JhcGgoZ3JhcGgpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJs
b2NrKQorICAgICAgICAsIG1faW5zdHJ1Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICB7CiAgICAg
fQogCkBAIC0xODgsMTIgKzE5MCwxMiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUJ5dGVj
b2RlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9pbnNlcnRpb25z
LmFwcGVuZChJbnNlcnRpb24geyBJbnNlcnRpb25Qb2ludChieXRlY29kZU9mZnNldCwgUG9zaXRp
b246Ok9yaWdpbmFsQnl0ZWNvZGVQb2ludCksIEluc2VydGlvbjo6VHlwZTo6UmVtb3ZlLCBJbmNs
dWRlQnJhbmNoOjpObywgb3Bjb2RlTGVuZ3RoKG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9IH0pOworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5k
KEluc2VydGlvbiB7IEluc2VydGlvblBvaW50KGJ5dGVjb2RlT2Zmc2V0LCBQb3NpdGlvbjo6T3Jp
Z2luYWxCeXRlY29kZVBvaW50KSwgSW5zZXJ0aW9uOjpUeXBlOjpSZW1vdmUsIEluY2x1ZGVCcmFu
Y2g6Ok5vLCBvcGNvZGVMZW5ndGgobV9pbnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdLnUub3Bj
b2RlKSwgeyB9IH0pOwogICAgIH0KIAogICAgIHZvaWQgZXhlY3V0ZSgpOwogCi0gICAgQnl0ZWNv
ZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQor
ICAgIEJ5dGVjb2RlR3JhcGgmIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQogCiAgICAgaW50
IGFkanVzdEFic29sdXRlT2Zmc2V0KGludCBhYnNvbHV0ZU9mZnNldCkKICAgICB7CkBAIC0yMTUs
NyArMjE3LDkgQEAgcHJpdmF0ZToKICAgICBpbnQgYWRqdXN0SnVtcFRhcmdldChJbnNlcnRpb25Q
b2ludCBzdGFydFBvaW50LCBJbnNlcnRpb25Qb2ludCBqdW1wVGFyZ2V0UG9pbnQpOwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9yPiBpbnQgY2FsY3VsYXRlRGlmZmVyZW5jZShJdGVyYXRv
ciBiZWdpbiwgSXRlcmF0b3IgZW5kKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2Rl
QmxvY2s+JiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGgmIG1fZ3JhcGg7CisgICAgVW5saW5r
ZWRDb2RlQmxvY2sqIG1fY29kZUJsb2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tl
ZEluc3RydWN0aW9ucyYgbV9pbnN0cnVjdGlvbnM7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4g
bV9pbnNlcnRpb25zOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzE5LDcgKzE3
MTksNyBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tCiAgICAgLy8g
aXMgYmVjYXVzZSB0aGUgdmFyaWFibGVzIHRoYXQgdGhlIG9wX2NhdGNoIGRlZmluZXMgbWlnaHQg
YmUgZGVhZCwgYW5kCiAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRy
YWN0aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCi0g
ICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9j
YXRjaCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3Mu
Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCArIE9Q
Q09ERV9MRU5HVEgob3BfY2F0Y2gpKTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBsaXZl
T3BlcmFuZHM7CiAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGl2ZUxv
Y2Fscy5iaXRDb3VudCgpKTsKICAgICBsaXZlTG9jYWxzLmZvckVhY2hTZXRCaXQoWyZdICh1bnNp
Z25lZCBsaXZlTG9jYWwpIHsKQEAgLTI4NTIsNyArMjg1Miw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2
YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMp
OyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBD
b2RlQmxvY2sgZm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9
IGxpdmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoMCk7CisgICAgRmFzdEJp
dFZlY3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9m
ZnNldCh0aGlzLCAwKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3Rh
dGljX2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsKICAgICAgICAgYmVnaW5WYWxp
ZGF0aW9uRGlkRmFpbCgpOwpAQCAtMzIyNiwxNyArMzIyNiw2IEBAIHZvaWQgQ29kZUJsb2NrOjpk
dW1wTWF0aElDU3RhdHMoKQogI2VuZGlmCiB9CiAKLUJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYg
Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50
SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmICghbV9saXZlbmVzc0FuYWx5c2lz
KQotICAgICAgICAgICAgbV9saXZlbmVzc0FuYWx5c2lzID0gV1RGTW92ZShhbmFseXNpcyk7Ci0g
ICAgICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOwotICAgIH0KLX0KLQogdm9pZCBzZXRQ
cmludGVyKFByaW50ZXI6OlByaW50UmVjb3JkJiByZWNvcmQsIENvZGVCbG9jayogY29kZUJsb2Nr
KQogewogICAgIFByaW50ZXI6OnNldFByaW50ZXIocmVjb3JkLCB0b0NTdHJpbmcoY29kZUJsb2Nr
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsOSBAQCBjbGFzcyBDb2RlQmxvY2sg
OiBwdWJsaWMgSlNDZWxsIHsKICAgICB9OwogCiBwdWJsaWM6CisKKyAgICB1c2luZyBJbnN0cnVj
dGlvblR5cGUgPSBJbnN0cnVjdGlvbjsKKwogICAgIGVudW0gQ29weVBhcnNlZEJsb2NrVGFnIHsg
Q29weVBhcnNlZEJsb2NrIH07CiAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJl
RmxhZ3MgPSBCYXNlOjpTdHJ1Y3R1cmVGbGFncyB8IFN0cnVjdHVyZUlzSW1tb3J0YWw7CkBAIC02
MDAsMTIgKzYwMyw3IEBAIHB1YmxpYzoKIAogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYg
bGl2ZW5lc3NBbmFseXNpcygpCiAgICAgewotICAgICAgICB7Ci0gICAgICAgICAgICBDb25jdXJy
ZW50SlNMb2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgICAgICBpZiAoISFtX2xpdmVuZXNz
QW5hbHlzaXMpCi0gICAgICAgICAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGxpdmVuZXNzQW5hbHlzaXNTbG93KCk7CisgICAgICAg
IHJldHVybiBtX3VubGlua2VkQ29kZS0+bGl2ZW5lc3NBbmFseXNpcyh0aGlzKTsKICAgICB9CiAg
ICAgCiAgICAgdm9pZCB2YWxpZGF0ZSgpOwpAQCAtMTA2MSw4ICsxMDU5LDYgQEAgcHJpdmF0ZToK
IAogICAgIHN0ZDo6Y2hyb25vOjpzdGVhZHlfY2xvY2s6OnRpbWVfcG9pbnQgbV9jcmVhdGlvblRp
bWU7CiAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xp
dmVuZXNzQW5hbHlzaXM7Ci0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmFyZURhdGE+IG1fcmFyZURh
dGE7CiAKICAgICBVbmNvbmRpdGlvbmFsRmluYWxpemVyIG1fdW5jb25kaXRpb25hbEZpbmFsaXpl
cjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlu
a2VkQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMjIzOTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
NiArMjgsNyBAQAogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAKICNpbmNsdWRlICJC
eXRlY29kZUdlbmVyYXRvci5oIgorI2luY2x1ZGUgIkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5o
IgogI2luY2x1ZGUgIkJ5dGVjb2RlUmV3cml0ZXIuaCIKICNpbmNsdWRlICJDbGFzc0luZm8uaCIK
ICNpbmNsdWRlICJDb2RlQ2FjaGUuaCIKQEAgLTM0MCwxNSArMzQxLDE0IEBAIFVubGlua2VkSGFu
ZGxlckluZm8qIFVubGlua2VkQ29kZUJsb2NrOjoKICAgICByZXR1cm4gVW5saW5rZWRIYW5kbGVy
SW5mbzo6aGFuZGxlckZvckluZGV4KG1fcmFyZURhdGEtPm1fZXhjZXB0aW9uSGFuZGxlcnMsIGlu
ZGV4LCByZXF1aXJlZEhhbmRsZXIpOwogfQogCi12b2lkIFVubGlua2VkQ29kZUJsb2NrOjphcHBs
eU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiByZXdyaXRlcikKK3ZvaWQgVW5saW5rZWRD
b2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3JpdGVyLCBV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogewogICAgIC8vIEJlZm9yZSBhcHBs
eWluZyB0aGUgY2hhbmdlcywgd2UgYWRqdXN0IHRoZSBqdW1wcyBiYXNlZCBvbiB0aGUgb3JpZ2lu
YWwgYnl0ZWNvZGUgb2Zmc2V0LCB0aGUgb2Zmc2V0IHRvIHRoZSBqdW1wIHRhcmdldCwgYW5kCiAg
ICAgLy8gdGhlIGluc2VydGlvbiBpbmZvcm1hdGlvbi4KIAotICAgIEJ5dGVjb2RlR3JhcGg8VW5s
aW5rZWRDb2RlQmxvY2s+JiBncmFwaCA9IHJld3JpdGVyLmdyYXBoKCk7Ci0gICAgVW5saW5rZWRJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdp
bigpOworICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gaW5zdHJ1
Y3Rpb25zLmJlZ2luKCk7IC8vIE9PUFM6IG1ha2UgdGhpcyBhbiBhY2Nlc3NvciBvbiByZXdyaXRl
ci4KIAotICAgIGZvciAoaW50IGJ5dGVjb2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25Db3VudCA9
IGdyYXBoLmluc3RydWN0aW9ucygpLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVjdGlv
bkNvdW50OykgeworICAgIGZvciAoaW50IGJ5dGVjb2RlT2Zmc2V0ID0gMCwgaW5zdHJ1Y3Rpb25D
b3VudCA9IGluc3RydWN0aW9ucy5zaXplKCk7IGJ5dGVjb2RlT2Zmc2V0IDwgaW5zdHJ1Y3Rpb25D
b3VudDspIHsKICAgICAgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogY3VycmVudCA9IGluc3RydWN0
aW9uc0JlZ2luICsgYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0g
Y3VycmVudFswXS51Lm9wY29kZTsKICAgICAgICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9y
Qnl0ZWNvZGVPZmZzZXQodGhpcywgaW5zdHJ1Y3Rpb25zQmVnaW4sIGJ5dGVjb2RlT2Zmc2V0LCBb
Jl0oaW50MzJfdCYgcmVsYXRpdmVPZmZzZXQpIHsKQEAgLTM4Nyw3ICszODcsNyBAQCB2b2lkIFVu
bGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvCiAKICAgICAvLyBBbmQgcmVjb21wdXRl
IHRoZSBqdW1wIHRhcmdldCBiYXNlZCBvbiB0aGUgbW9kaWZpZWQgdW5saW5rZWQgaW5zdHJ1Y3Rp
b25zLgogICAgIG1fanVtcFRhcmdldHMuY2xlYXIoKTsKLSAgICByZWNvbXB1dGVQcmVjaXNlSnVt
cFRhcmdldHModGhpcywgZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSwgZ3JhcGguaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpLCBtX2p1bXBUYXJnZXRzKTsKKyAgICByZWNvbXB1dGVQcmVjaXNlSnVt
cFRhcmdldHModGhpcywgaW5zdHJ1Y3Rpb25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXplKCks
IG1fanVtcFRhcmdldHMpOwogfQogCiB2b2lkIFVubGlua2VkQ29kZUJsb2NrOjpzaHJpbmtUb0Zp
dCgpCkBAIC00MTksNCArNDE5LDE2IEBAIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmR1bXAoUHJp
bnRTdHJlYW0KIHsKIH0KIAorQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBVbmxpbmtlZENvZGVC
bG9jazo6bGl2ZW5lc3NBbmFseXNpc1Nsb3coQ29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAg
UkVMRUFTRV9BU1NFUlQoY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpID09IHRoaXMpOwor
CisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgICAg
IG1fbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4o
Y29kZUJsb2NrKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuICptX2xpdmVuZXNzOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDYsNyArNDYsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOwogY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKK2NsYXNzIENvZGVCbG9j
azsKIGNsYXNzIERlYnVnZ2VyOwogY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogY2xhc3MgUGFy
c2VyRXJyb3I7CkBAIC0xMTUsNiArMTE3LDggQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0
IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKKyAgICB1c2luZyBJbnN0cnVjdGlvblR5
cGUgPSBVbmxpbmtlZEluc3RydWN0aW9uOworCiAgICAgZW51bSB7IENhbGxGdW5jdGlvbiwgQXBw
bHlGdW5jdGlvbiB9OwogCiAgICAgdHlwZWRlZiBVbmxpbmtlZEluc3RydWN0aW9uIEluc3RydWN0
aW9uOwpAQCAtMzk3LDYgKzQwMSwxMyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKIAorICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NB
bmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7CisgICAgICAgIGlmIChtX2xpdmVu
ZXNzKQorICAgICAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzOworICAgICAgICByZXR1cm4gbGl2
ZW5lc3NBbmFseXNpc1Nsb3coY29kZUJsb2NrKTsKKyAgICB9CisKIHByb3RlY3RlZDoKICAgICBV
bmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVUeXBlLCBjb25zdCBFeGVjdXRh
YmxlSW5mbyYsIERlYnVnZ2VyTW9kZSk7CiAgICAgflVubGlua2VkQ29kZUJsb2NrKCk7CkBAIC00
MDgsNyArNDE5LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBC
eXRlY29kZVJld3JpdGVyOwotICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdy
aXRlciYpOworICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYsIFVu
cGFja2VkSW5zdHJ1Y3Rpb25zJik7CiAKICAgICB2b2lkIGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3Nh
cnkoKQogICAgIHsKQEAgLTQxOSwxMCArNDMwLDEyIEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAg
dm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25SYW5nZUluZm8mLCB1bnNpZ25l
ZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisgICAgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sqKTsKIAogICAgIGludCBtX251
bVBhcmFtZXRlcnM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbT4gbV91bmxpbmtlZEluc3RydWN0aW9uczsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIG1f
dGhpc1JlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Njb3BlUmVnaXN0ZXI7CkBAIC00
NDgsNiArNDYxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2xpbmVDb3VudDsKICAgICB1
bnNpZ25lZCBtX2VuZENvbHVtbjsKIAorICAgIExvY2sgbV9sb2NrOwogICAgIFRyaVN0YXRlIG1f
ZGlkT3B0aW1pemU7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFyc2VNb2RlOwogICAgIENvZGVG
ZWF0dXJlcyBtX2ZlYXR1cmVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdH
cmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcgKzEwODYsNyBAQCBGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yCiAgICAgICAgIHJldHVybiAqaXRlci0+dmFs
dWU7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRlY29kZUxpdmVuZXNzPiBsaXZl
bmVzcyA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2RlTGl2ZW5lc3M+KCk7Ci0gICAgY29k
ZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1bGxMaXZlbmVzcygqbGl2ZW5lc3Mp
OworICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNvbXB1dGVGdWxsTGl2ZW5lc3Mo
Y29kZUJsb2NrLCAqbGl2ZW5lc3MpOwogICAgIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQg
PSAqbGl2ZW5lc3M7CiAgICAgbV9ieXRlY29kZUxpdmVuZXNzLmFkZChjb2RlQmxvY2ssIFdURk1v
dmUobGl2ZW5lc3MpKTsKICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTcsNyArNjk3LDggQEAg
dm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5lY2VzcwogICAgIGlmICghbXVzdEhh
bmRsZVZhbHVlcy5udW1iZXJPZkxvY2FscygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAg
RmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+bGl2ZW5l
c3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQob3NyRW50cnlCeXRl
Y29kZUluZGV4KTsKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRl
cm5hdGl2ZSgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2
ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRp
dmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBsb2Nh
bCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAg
ICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVNYWluUGFzcygpCiAgICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1p
bmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKICAgICAgICAgICAg
IC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCiAKLSAg
ICAgICAgICAgIEJ5dGVjb2RlR3JhcGg8Q29kZUJsb2NrPiBncmFwaChtX2NvZGVCbG9jaywgbV9p
bnN0cnVjdGlvbnMpOworICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9j
aywgbV9pbnN0cnVjdGlvbnMpOwogICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9j
ayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29wT1NSRW50cnlC
eXRlY29kZU9mZnNldCk7CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325212</attachid>
            <date>2017-10-27 16:00:41 -0700</date>
            <delta_ts>2017-10-27 16:09:04 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>42201</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBA
CisyMDE3LTEwLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJ5dGVjb2RlIGxpdmVuZXNzIHNob3VsZCBsaXZlIG9uIFVubGlua2VkQ29kZUJsb2NrIHNvIGl0
IGNhbiBiZSBzaGFyZWQgYW1vbmdzdCBDb2RlQmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3JlcyBCeXRlY29kZUxpdmVu
ZXNzIG9uIFVubGlua2VkQ29kZUJsb2NrIGluc3RlYWQgb2YgQ29kZUJsb2NrCisgICAgICAgIHNv
IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2ZW5lc3MgZm9yIHRoZSBzYW1lIFVu
bGlua2VkQ29kZUJsb2NrCisgICAgICAgIG1vcmUgdGhhbiBvbmNlLiBUbyBkbyB0aGlzLCB0aGlz
IHBhdGNoIHNvbGlkaWZpZXMgdGhlIGludmFyaWFudCB0aGF0IENvZGVCbG9jaworICAgICAgICBs
aW5raW5nIGNhbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgb2Yg
bGl2ZW5lc3MuIEZvciBleGFtcGxlLAorICAgICAgICBpdCBjYW4ndCBpbnRyb2R1Y2UgbmV3IGxv
Y2Fscy4gVGhpcyBpbnZhcmlhbnQgd2FzIG1ldCBteSBKU0MgYmVmb3JlLCBiZWNhdXNlIHdlCisg
ICAgICAgIGRpZG4ndCBkbyBhbnl0aGluZyBpbiBieXRlY29kZSBsaW5raW5nIHRoYXQgd291bGQg
Y2hhbmdlIGxpdmVuZXNzLiBIb3dldmVyLCBpdCBpcworICAgICAgICBub3cgYSBjb3JyZWN0bmVz
cyByZXF1aXJlbWVudCB0aGF0IHdlIGRvbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdl
IHRoZQorICAgICAgICByZXN1bHQgb2YgcnVubmluZyBsaXZlbmVzcy4gVG8gc3VwcG9ydCB0aGlz
IGNoYW5nZSwgSSd2ZSByZWZhY3RvcmVkIEJ5dGVjb2RlR3JhcGgKKyAgICAgICAgdG8gbm90IGJl
IHRpZWQgdG8gYSBDb2RlQmxvY2tUeXBlKi4gVGhpbmdzIHRoYXQgcGVyZm9ybSBsaXZlbmVzcyB3
aWxsIHBhc3MgaW4KKyAgICAgICAgQ29kZUJsb2NrVHlwZSogYW5kIHRoZSBpbnN0cnVjdGlvbiBz
dHJlYW0gYXMgbmVlZGVkLiBUaGlzIG1lYW5zIHRoYXQgd2UgbWF5CisgICAgICAgIGNvbXB1dGUg
bGl2ZW5lc3Mgd2l0aCBvbmUgQ29kZUJsb2NrKidzIGluc3RydWN0aW9uIHN0cmVhbSwgYW5kIHRo
ZW4gcGVyZm9ybQorICAgICAgICBxdWVyaWVzIG9uIHRoYXQgYW5hbHlzaXMgd2l0aCBhIGRpZmZl
cmVudCBDb2RlQmxvY2sqJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Z3JhcGgpOgorICAgICAgICAoSlND
OjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdlbmVyYXRvckxvY2FsKToK
KyAgICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246OnJ1bik6CisgICAgICAgICogYnl0ZWNv
ZGUvQnl0ZWNvZGVHcmFwaC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdyYXBoOjpCeXRlY29k
ZUdyYXBoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6Y29kZUJsb2NrIGNvbnN0KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6aW5zdHJ1Y3Rpb25zKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVjb2RlR3JhcGgp
OiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5j
cHA6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpn
ZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMpOgorICAgICAgICAoSlNDOjpCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZSk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6Cisg
ICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rp
b24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnJ1bkxpdmVuZXNzRml4cG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0
ZXIuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZVJld3JpdGVyOjphcHBseU1vZGlmaWNhdGlv
bik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZVJld3JpdGVyOjphZGp1c3RKdW1wVGFyZ2V0c0luRnJhZ21lbnQpOgorICAg
ICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVSZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3
cml0ZXI6OnJlbW92ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVSZXdyaXRlcjo6
Z3JhcGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6
OkNvZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVu
c3VyZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAgICAg
ICAgKEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
bGl2ZW5lc3NBbmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXMpOgorICAg
ICAgICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5s
aW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGl2
ZW5lc3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpHcmFwaDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpr
aWxsc0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlBsYW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBqaXQv
SklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKwog
MjAxNy0xMC0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAg
V2ViQXNzZW1ibHk6IHVwZGF0ZSBhcmJpdHJhcnkgbGltaXRzIHRvIHdoYXQgYnJvd3NlcnMgdXNl
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3Jp
ZmljYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdHlwZWRl
ZiBWZWN0b3I8WWllbGREYXRhPiBZaWVsZHM7CiAKICAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNh
dGlvbihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9jazo6VW5w
YWNrZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZy
YW1lU3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCi0gICAg
ICAgIDogbV9ncmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucykKKyAgICAgICAgOiBtX2NvZGVC
bG9jayhjb2RlQmxvY2spCisgICAgICAgICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQor
ICAgICAgICAsIG1fZ3JhcGgobV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKQogICAgICAgICAs
IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSgqY29kZUJsb2NrLT52bSgpLCBnZW5lcmF0b3JG
cmFtZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUlu
ZGV4KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAgICB7CiAgICAgICAgIGZvciAo
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsKICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgOiBibG9jay0+b2Zmc2V0cygpKSB7Ci0gICAgICAgICAg
ICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSAmbV9ncmFwaC5pbnN0cnVjdGlv
bnMoKVtieXRlY29kZU9mZnNldF07CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRJbnN0
cnVjdGlvbiogcGMgPSAmaW5zdHJ1Y3Rpb25zW2J5dGVjb2RlT2Zmc2V0XTsKICAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHBjLT51Lm9wY29kZSkgewogICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW50
ZXI6IHsKICAgICAgICAgICAgICAgICAgICAgbV9lbnRlclBvaW50ID0gYnl0ZWNvZGVPZmZzZXQ7
CkBAIC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCk7CiAKLSAgICBCeXRl
Y29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9
CisgICAgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAKICAgICBj
b25zdCBZaWVsZHMmIHlpZWxkcygpIGNvbnN0CiAgICAgewpAQCAtMTIxLDEwICsxMjMsOSBAQCBw
cml2YXRlOgogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxTdG9yYWdlPiBzdG9yYWdlID0gbV9z
dG9yYWdlc1tpbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2U7CiAKLSAgICAgICAg
VW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7CiAgICAg
ICAgIElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5h
bWUoKSk7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IGNvZGVCbG9jay0+bnVt
YmVyT2ZJZGVudGlmaWVycygpOwotICAgICAgICBjb2RlQmxvY2stPmFkZElkZW50aWZpZXIoaWRl
bnRpZmllcik7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IG1fY29kZUJsb2Nr
LT5udW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlm
aWVyKGlkZW50aWZpZXIpOwogICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCA9IG1fZ2Vu
ZXJhdG9yRnJhbWVTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNl
c3NhcnkpOwogICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUtPnNldChOb0xvY2tp
bmdOZWNlc3NhcnksIGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNl
dChzY29wZU9mZnNldCkpKTsKIApAQCAtMTM4LDcgKzEzOSw5IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgdW5zaWduZWQgbV9lbnRlclBvaW50IHsgMCB9OwotICAgIEJ5dGVjb2RlR3JhcGg8VW5s
aW5rZWRDb2RlQmxvY2s+IG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0
cnVjdGlvbnM7CisgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxzdGQ6Om9w
dGlvbmFsPFN0b3JhZ2U+PiBtX3N0b3JhZ2VzOwogICAgIFlpZWxkcyBtX3lpZWxkczsKICAgICBT
dHJvbmc8U3ltYm9sVGFibGU+IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZTsKQEAgLTE1Miwx
NSArMTU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBydW4oKQorICAg
IHZvaWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2Nr
OjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgIHsKICAgICAgICAgLy8g
UGVyZm9ybSBtb2RpZmllZCBsaXZlbmVzcyBhbmFseXNpcyB0byBkZXRlcm1pbmUgd2hpY2ggbG9j
YWxzIGFyZSBsaXZlIGF0IHRoZSBtZXJnZSBwb2ludHMuCiAgICAgICAgIC8vIFRoaXMgcHJvZHVj
ZXMgdGhlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGZvciB0aGUgcXVlc3Rpb24sICJ3aGljaCB2YXJp
YWJsZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCByZXN1bWVkPyIuCiAKLSAgICAgICAgcnVuTGl2ZW5l
c3NGaXhwb2ludChtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpKTsKKyAgICAgICAgcnVuTGl2
ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRp
b24uZ3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRv
cmlmaWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZl
bmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRh
dGEucG9pbnQgKyBvcGNvZGVMZW5ndGgob3BfeWllbGQpKTsKKyAgICAgICAgICAgIGRhdGEubGl2
ZW5lc3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBkYXRhLnBvaW50ICsgb3Bjb2Rl
TGVuZ3RoKG9wX3lpZWxkKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTczLDE4ICsxNzYsMTcg
QEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6cnVuKCkKIAogICAgIHsKICAgICAg
ICAgR2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpcyBwYXNzKCp0aGlzKTsKLSAgICAgICAgcGFzcy5y
dW4oKTsKKyAgICAgICAgcGFzcy5ydW4obV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsKICAg
ICB9CiAKLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxv
Y2soKTsKLSAgICBCeXRlY29kZVJld3JpdGVyIHJld3JpdGVyKG1fZ3JhcGgpOworICAgIEJ5dGVj
b2RlUmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCwgbV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25z
KTsKIAogICAgIC8vIFNldHVwIHRoZSBnbG9iYWwgc3dpdGNoIGZvciB0aGUgZ2VuZXJhdG9yLgog
ICAgIHsKICAgICAgICAgdW5zaWduZWQgbmV4dFRvRW50ZXJQb2ludCA9IGVudGVyUG9pbnQoKSAr
IG9wY29kZUxlbmd0aChvcF9lbnRlcik7Ci0gICAgICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5k
ZXggPSBtX2dyYXBoLmNvZGVCbG9jaygpLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKKyAg
ICAgICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3
aXRjaEp1bXBUYWJsZXMoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVh
bFJlZ2lzdGVyRm9yQXJndW1lbnQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3JGdW5j
dGlvbjo6R2VuZXJhdG9yQXJndW1lbnQ6OlN0YXRlKSk7Ci0gICAgICAgIGF1dG8mIGp1bXBUYWJs
ZSA9IG1fZ3JhcGguY29kZUJsb2NrKCktPmFkZFN3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBh
dXRvJiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAg
ICAgIGp1bXBUYWJsZS5taW4gPSAwOwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5y
ZXNpemUobV95aWVsZHMuc2l6ZSgpICsgMSk7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZz
ZXRzLmZpbGwoMCk7CkBAIC0yMjcsNyArMjI5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlm
aWNhdGlvbjo6cnVuKCkKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9
IHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KTsKICAgICAgICAgICAgICAgICBTdG9yYWdl
IHN0b3JhZ2UgPSBzdG9yYWdlRm9yR2VuZXJhdG9yTG9jYWwoaW5kZXgpOwogCi0gICAgICAgICAg
ICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGNvZGVCbG9jay0+YWRkVmFsdWVQ
cm9maWxlKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IG1fY29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoKTsKICAgICAgICAgICAgICAgICBmcmFnbWVu
dC5hcHBlbmRJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgb3BfZ2V0X2Zyb21fc2Nv
cGUsCiAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCksIC8vIGRzdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZp
c2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVH
cmFwaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKIGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+
CiBjbGFzcyBCeXRlY29kZUdyYXBoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdyYXBoKTsKIHB1YmxpYzoKLSAgICB0eXBl
ZGVmIEJsb2NrIENvZGVCbG9jazsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJsb2NrOjpJbnN0cnVj
dGlvbiBJbnN0cnVjdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0
ZWNvZGVCYXNpY0Jsb2NrPj4gQmFzaWNCbG9ja3NWZWN0b3I7CiAKLSAgICB0eXBlZGVmIFdURjo6
SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg8QmxvY2s+PiBpdGVyYXRvcjsK
KyAgICB0eXBlZGVmIFdURjo6SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg+
IGl0ZXJhdG9yOwogCi0gICAgaW5saW5lIEJ5dGVjb2RlR3JhcGgoQmxvY2sqLCB0eXBlbmFtZSBC
bG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmKTsKLQotICAgIEJsb2NrKiBjb2RlQmxvY2soKSBj
b25zdCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotCi0gICAgdHlwZW5hbWUgQmxvY2s6OlVucGFj
a2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsg
fQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIGlubGluZSBCeXRl
Y29kZUdyYXBoKENvZGVCbG9ja1R5cGUqLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tl
ZEluc3RydWN0aW9ucyYpOwogCiAgICAgV1RGOjpJdGVyYXRvclJhbmdlPEJhc2ljQmxvY2tzVmVj
dG9yOjpyZXZlcnNlX2l0ZXJhdG9yPiBiYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkKICAgICB7
CkBAIC0xMDYsMTkgKzEwMCwxNCBAQCBwdWJsaWM6CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBs
YXN0KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KIAogcHJpdmF0ZToKLSAgICBCbG9jayog
bV9jb2RlQmxvY2s7CiAgICAgQmFzaWNCbG9ja3NWZWN0b3IgbV9iYXNpY0Jsb2NrczsKLSAgICB0
eXBlbmFtZSBCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmIG1faW5zdHJ1Y3Rpb25zOwogfTsK
IAogCi10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLUJ5dGVjb2RlR3JhcGg8QmxvY2s+OjpCeXRl
Y29kZUdyYXBoKEJsb2NrKiBjb2RlQmxvY2ssIHR5cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3Ry
dWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAg
ICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJs
b2NrVHlwZT4KK0J5dGVjb2RlR3JhcGg6OkJ5dGVjb2RlR3JhcGgoQ29kZUJsb2NrVHlwZSogY29k
ZUJsb2NrLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5z
dHJ1Y3Rpb25zKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrOjpjb21wdXRlKG1fY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1
Y3Rpb25zLnNpemUoKSwgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpj
b21wdXRlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXpl
KCksIG1fYmFzaWNCbG9ja3MpOwogICAgIEFTU0VSVChtX2Jhc2ljQmxvY2tzLnNpemUoKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDAsNDAgKzQwLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiAgICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKSkKIHsKLSAgICBjb21wdXRlKCk7CisgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxv
Y2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgpOworCisgICAgaWYgKE9wdGlv
bnM6OmR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQorICAgICAgICBkdW1wUmVzdWx0cyhj
b2RlQmxvY2spOwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZl
Y3RvciYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNz
SW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRl
Y29kZU9mZnNldCk7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0Vu
dHJ5QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgcmVz
dWx0LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVz
dWx0KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9j
aywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zm
c2V0LCByZXN1bHQpOwogfQogCi1ib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFu
ZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQotewotICAgIGlmIChvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKLSAgICBnZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiBv
cGVyYW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShyZXN1bHQsIG9wZXJhbmQpOwotfQotCi1G
YXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENv
ZGVCbG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBGYXN0
Qml0VmVjdG9yIG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVj
b2RlT2Zmc2V0LCBvdXQpOworICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29k
ZUJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi12b2lk
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNv
ZGVMaXZlbmVzcyYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1
dGVGdWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNz
JiByZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIAorCiAgICAgcmVzdWx0Lm1fbWFwLnJl
c2l6ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCiAgICAgZm9yIChz
dGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiYgYmxvY2sgOiBtX2dyYXBoLmJhc2lj
QmxvY2tzSW5SZXZlcnNlT3JkZXIoKSkgewpAQCAtODQsMTcgKzc3LDE3IEBAIHZvaWQgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAg
ICBzdGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAg
ICAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVz
dWx0Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KIH0KIAot
dm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyhCeXRlY29kZUtpbGxz
JiByZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUtpbGxzKENv
ZGVCbG9jayogY29kZUJsb2NrLCBCeXRlY29kZUtpbGxzJiByZXN1bHQpCiB7CisgICAgVU5VU0VE
X1BBUkFNKHJlc3VsdCk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgCi0gICAgQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOworCiAgICAgcmVzdWx0Lm1fY29k
ZUJsb2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC5tX2tpbGxTZXRzID0gc3RkOjptYWtlX3Vu
aXF1ZTxCeXRlY29kZUtpbGxzOjpLaWxsU2V0W10+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCku
c2l6ZSgpKTsKICAgICAKQEAgLTEwNyw3ICsxMDAsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6Y29tcHV0ZUtpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZz
ZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNl
dCA9IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9u
KAotICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAg
ICAgIGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNv
ZGVPZmZzZXQsCiAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgogICAgICAgICAgICAgICAgICAgICBp
ZiAob3V0W2luZGV4XSkKQEAgLTEyMyw5ICsxMTYsOCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpczo6Y29tcHV0ZUtpCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6ZHVtcFJlc3VsdHMoKQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBS
ZXN1bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICBkYXRhTG9nKCJcbkR1bXBpbmcgYnl0ZWNvZGUg
bGl2ZW5lc3MgZm9yICIsICpjb2RlQmxvY2ssICI6XG4iKTsKICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAg
dW5zaWduZWQgaSA9IDA7CkBAIC0xNzgsNyArMTcwLDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM6OmR1bXBSZXN1bAogICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAKICAg
ICAgICAgICAgIGRhdGFMb2dGKCJMaXZlIHZhcmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RC
aXRWZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsK
ICAgICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRh
TG9nRigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0
YUZpbGUoKSwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xOTUs
MTIgKzE4Nyw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWwKICAg
ICB9CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKLXsKLSAg
ICBydW5MaXZlbmVzc0ZpeHBvaW50KG1fZ3JhcGgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBC
eXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQotICAgICAgICBkdW1wUmVzdWx0cygpOwotfQotCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDIyMzk1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIGNsYXNzIEZ1bGxCeXRl
Y29kZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHJv
dGVjdGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoLCB0eXBlbmFtZSBVc2VGdW5jdG9y
LCB0eXBlbmFtZSBEZWZGdW5jdG9yPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmLCB1
bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0
b3ImKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0
cnVjdGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQg
c3RlcE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwg
Qnl0ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9y
JiwgY29uc3QgRGVmRnVuY3RvciYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZv
aWQgc3RlcE92ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBG
YXN0Qml0VmVjdG9yJiBvdXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUs
IHR5cGVuYW1lIEluc3RydWN0aW9ucz4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9j
a1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0
ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBHcmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBo
JiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVj
dG9yJiByZXN1bHQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVu
YW1lIEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9y
JiByZXN1bHQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IGJvb2wgY29tcHV0ZUxv
Y2FsTGl2ZW5lc3NGb3JCbG9jayhHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayopOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9v
bCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0
cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4gRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KEdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gRmFzdEJp
dFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZz
ZXQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQgcnVuTGl2ZW5lc3NGaXhw
b2ludChHcmFwaCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVu
YW1lIEluc3RydWN0aW9ucz4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUq
LCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJik7CiB9OwogCiBjbGFzcyBCeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMgOiBwcml2YXRlIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlv
biB7CkBAIC01NywxOSArNTcsMTcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVC
bG9jayopOwogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50
IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBGYXN0Qml0VmVjdG9yIGdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOwor
ICAgIEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxv
Y2sqLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgCi0gICAgdm9pZCBjb21wdXRlRnVs
bExpdmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwotICAgIHZvaWQgY29tcHV0
ZUtpbGxzKEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVu
ZXNzKENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOworICAgIHZvaWQg
Y29tcHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CiAKIHByaXZh
dGU6Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBkdW1wUmVzdWx0cygpOworICAgIHZv
aWQgZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsK
KyAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKIAotICAgIEJ5dGVjb2RlR3Jh
cGg8Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAK
IGlubGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdp
c3RlckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUg
dXNlL2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBp
bmNsdWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgotdGVtcGxhdGU8dHlw
ZW5hbWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1p
bmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rp
b24oR3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3Rv
ciYgdXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxv
Y2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVu
YW1lIERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
OnN0ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0
cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRl
ZikKIHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4g
cmV2ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAg
ICAgLy8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNl
c3NhcnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQpAQCAtNzksMjEg
Kzc5LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAv
LyB1c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFw
cGVhciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdlJ2QKICAgICAvLyBmaXJzdCBhZGQg
aXQgdG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhl
IGRlZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFwaC5jb2RlQmxvY2soKTsKLSAgICBh
dXRvKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7Cisg
ICAgYXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKICAgICBh
dXRvKiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoKmluc3RydWN0
aW9uKTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVC
bG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBo
OjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50
IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUg
Q29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7
CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAg
ICAgICAgICAgICAgICAgZGVmKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOwog
ICAgICAgICB9KTsKIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAg
IGNvZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1l
IEdyYXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJ
RCwgaW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlw
ZW5hbWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVy
YW5kKSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFu
ZCkpCiAgICAgICAgICAgICAgICAgdXNlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2Fs
KCkpOwogICAgICAgICB9KTsKQEAgLTEwNywxMSArMTA2LDExIEBAIGlubGluZSB2b2lkIEJ5dGVj
b2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdy
YXBoPgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlcklu
c3RydWN0aW9uKEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRW
ZWN0b3ImIG91dCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIElu
c3RydWN0aW9ucz4KK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVwT3Zlckluc3RydWN0aW9u
KAotICAgICAgICBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIGNvZGVCbG9jaywgaW5z
dHJ1Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCiAgICAgICAgIFsmXSAodW5zaWduZWQg
Yml0SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3
ZSBzZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwpAQCAtMTIy
LDggKzEyMSw4IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAg
ICAgICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIGJvb2wgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2Rl
T2Zmc2V0KEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQg
dGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUgYm9vbCBCeXRlY29k
ZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZz
ZXQoQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0
aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIHVu
c2lnbmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VS
VCghYmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9j
aygpKTsKQEAgLTEzNCwyMiArMTMzLDIyIEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjoKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zm
c2V0cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihncmFwaCwgYnl0
ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICB9CiAKICAg
ICByZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1l
IEdyYXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRl
TG9jYWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBi
bG9jaykKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0
aW9ucz4KK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxv
Y2FsTGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3Ry
dWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jaykKIHsKICAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkgfHwgYmxvY2st
PmlzRW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbXB1
dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVh
ZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKKyAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2Nr
LCBibG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKIH0KIAotdGVtcGxhdGU8dHlw
ZW5hbWUgR3JhcGg+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoR3JhcGgmIGdyYXBoLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5
cGVuYW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tU
eXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29k
ZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQnl0ZWNvZGVC
YXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChibG9jayk7CkBAIC0xNTcsMTQgKzE1NiwxMyBA
QCBpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvCiAgICAgQVNTRVJUKCFi
bG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7CiAgICAgb3V0LnJl
c2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0Zv
ckJ5dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAg
Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0
aW9ucywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0
OwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2
ZW5lc3NQcm9wYWdhdGlvbjo6cnVuTGl2ZW5lc3NGaXhwb2ludChHcmFwaCYgZ3JhcGgpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Citpbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1bkxpdmVuZXNzRml4cG9pbnQo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgYXV0byogY29kZUJsb2NrID0gZ3JhcGgu
Y29kZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMgPSBjb2RlQmxvY2st
Pm51bUNhbGxlZUxvY2FscygpOwogICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6
IGdyYXBoKSB7CiAgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7
CkBAIC0xODYsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0
aW9uOgogICAgICAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JzKCkpCiAgICAgICAgICAgICAgICAgbmV3T3V0IHw9IHN1Y2Nlc3Nvci0+
aW4oKTsKICAgICAgICAgICAgIGJsb2NrLT5vdXQoKSA9IG5ld091dDsKLSAgICAgICAgICAgIGNo
YW5nZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhncmFwaCwgYmxvY2suZ2V0KCkp
OworICAgICAgICAgICAgY2hhbmdlZCB8PSBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKGNv
ZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2suZ2V0KCkpOwogICAgICAgICB9CiAg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFw
cGx5TW9kaWZpY2F0aW9uCiAgICAgZm9yIChzaXplX3QgaW5zZXJ0aW9uSW5kZXggPSBtX2luc2Vy
dGlvbnMuc2l6ZSgpOyBpbnNlcnRpb25JbmRleC0tOykgewogICAgICAgICBJbnNlcnRpb24mIGlu
c2VydGlvbiA9IG1faW5zZXJ0aW9uc1tpbnNlcnRpb25JbmRleF07CiAgICAgICAgIGlmIChpbnNl
cnRpb24udHlwZSA9PSBJbnNlcnRpb246OlR5cGU6OlJlbW92ZSkKLSAgICAgICAgICAgIG1fZ3Jh
cGguaW5zdHJ1Y3Rpb25zKCkucmVtb3ZlKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwg
aW5zZXJ0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1faW5zdHJ1Y3Rpb25zLnJlbW92ZShp
bnNlcnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2VydGlvbi5sZW5ndGgoKSk7CiAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgaWYgKGluc2VydGlvbi5pbmNsdWRlQnJhbmNoID09IElu
Y2x1ZGVCcmFuY2g6OlllcykgewogICAgICAgICAgICAgICAgIGludCBmaW5hbE9mZnNldCA9IGlu
c2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCArIGNhbGN1bGF0ZURpZmZlcmVuY2UobV9pbnNl
cnRpb25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5iZWdpbigpICsgaW5zZXJ0aW9uSW5kZXgpOwog
ICAgICAgICAgICAgICAgIGFkanVzdEp1bXBUYXJnZXRzSW5GcmFnbWVudChmaW5hbE9mZnNldCwg
aW5zZXJ0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZ3JhcGguaW5zdHJ1Y3Rp
b25zKCkuaW5zZXJ0VmVjdG9yKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0
aW9uLmluc3RydWN0aW9ucyk7CisgICAgICAgICAgICBtX2luc3RydWN0aW9ucy5pbnNlcnRWZWN0
b3IoaW5zZXJ0aW9uLmluZGV4LmJ5dGVjb2RlT2Zmc2V0LCBpbnNlcnRpb24uaW5zdHJ1Y3Rpb25z
KTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2luc2VydGlvbnMuY2xlYXIoKTsKQEAgLTU2LDgg
KzU2LDcgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjpleGVjdXRlKCkKICAgICAgICAgcmV0dXJu
IGxocy5pbmRleCA8IHJocy5pbmRleDsKICAgICB9KTsKIAotICAgIFVubGlua2VkQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIGNvZGVCbG9jay0+YXBwbHlN
b2RpZmljYXRpb24oKnRoaXMpOworICAgIG1fY29kZUJsb2NrLT5hcHBseU1vZGlmaWNhdGlvbigq
dGhpcywgbV9pbnN0cnVjdGlvbnMpOwogfQogCiB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFkanVz
dEp1bXBUYXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5hbE9mZnNldCwgSW5zZXJ0aW9uJiBp
bnNlcnRpb24pCkBAIC02OSw4ICs2OCw3IEBAIHZvaWQgQnl0ZWNvZGVSZXdyaXRlcjo6YWRqdXN0
SnVtcFRhcmdldHMKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi51Lm9w
Y29kZTsKICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlEKSkgewogICAgICAgICAgICAgdW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBmaW5hbE9mZnNldCArIGZyYWdtZW50T2Zmc2V0OwotICAg
ICAgICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2Nr
KCk7Ci0gICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNl
dChjb2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFnbWVudE9mZnNldCwgWyZdKGludDMy
X3QmIGxhYmVsKSB7CisgICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRl
Y29kZU9mZnNldChtX2NvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zQmVnaW4sIGZyYWdtZW50T2Zmc2V0
LCBbJl0oaW50MzJfdCYgbGFiZWwpIHsKICAgICAgICAgICAgICAgICBpbnQgYWJzb2x1dGVPZmZz
ZXQgPSBhZGp1c3RBYnNvbHV0ZU9mZnNldChsYWJlbCk7CiAgICAgICAgICAgICAgICAgbGFiZWwg
PSBhYnNvbHV0ZU9mZnNldCAtIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGVPZmZzZXQpOwogICAg
ICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNv
ZGVSZXdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZVJld3JpdGVyLmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2
MSw4ICsxNjEsMTAgQEAgcHVibGljOgogICAgICAgICBJbmNsdWRlQnJhbmNoJiBtX2luY2x1ZGVC
cmFuY2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFwaDxVbmxp
bmtlZENvZGVCbG9jaz4mIGdyYXBoKQorICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFw
aCYgZ3JhcGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2Nr
OjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgICAgICA6IG1fZ3JhcGgo
Z3JhcGgpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1faW5z
dHJ1Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICB7CiAgICAgfQogCkBAIC0xODgsMTIgKzE5MCwx
MiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUJ5dGVjb2RlKHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0KQogICAgIHsKLSAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChJbnNlcnRpb24geyBJ
bnNlcnRpb25Qb2ludChieXRlY29kZU9mZnNldCwgUG9zaXRpb246Ok9yaWdpbmFsQnl0ZWNvZGVQ
b2ludCksIEluc2VydGlvbjo6VHlwZTo6UmVtb3ZlLCBJbmNsdWRlQnJhbmNoOjpObywgb3Bjb2Rl
TGVuZ3RoKG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwg
eyB9IH0pOworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKEluc2VydGlvbiB7IEluc2VydGlv
blBvaW50KGJ5dGVjb2RlT2Zmc2V0LCBQb3NpdGlvbjo6T3JpZ2luYWxCeXRlY29kZVBvaW50KSwg
SW5zZXJ0aW9uOjpUeXBlOjpSZW1vdmUsIEluY2x1ZGVCcmFuY2g6Ok5vLCBvcGNvZGVMZW5ndGgo
bV9pbnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9IH0pOwogICAgIH0K
IAogICAgIHZvaWQgZXhlY3V0ZSgpOwogCi0gICAgQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVC
bG9jaz4mIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIEJ5dGVjb2RlR3JhcGgmIGdy
YXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQogCiAgICAgaW50IGFkanVzdEFic29sdXRlT2Zmc2V0
KGludCBhYnNvbHV0ZU9mZnNldCkKICAgICB7CkBAIC0yMTUsNyArMjE3LDkgQEAgcHJpdmF0ZToK
ICAgICBpbnQgYWRqdXN0SnVtcFRhcmdldChJbnNlcnRpb25Qb2ludCBzdGFydFBvaW50LCBJbnNl
cnRpb25Qb2ludCBqdW1wVGFyZ2V0UG9pbnQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJh
dG9yPiBpbnQgY2FsY3VsYXRlRGlmZmVyZW5jZShJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5k
KTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBtX2dyYXBoOworICAg
IEJ5dGVjb2RlR3JhcGgmIG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJs
b2NrOworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0
cnVjdGlvbnM7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsMTAgKzM5OCwxOSBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtl
ZENvZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIH0KIAorLy8gVGhlIG1haW4gcHVycG9zZSBv
ZiB0aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIGxpbmtlZCBieXRlY29kZSBmcm9tIHVubGlu
a2VkIGJ5dGVjb2RlLiBUaGUgcHJvY2VzcworLy8gb2YgbGlua2luZyBpcyB0YWtpbmcgYW4gYWJz
dHJhY3QgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgYW5kIHR5aW5nIGl0IHRvIGEgR2xvYmFs
T2JqZWN0IGFuZCBzY29wZQorLy8gY2hhaW4uIEZvciBleGFtcGxlLCB0aGlzIHByb2Nlc3MgYWxs
b3dzIHVzIHRvIGNhY2hlIHRoZSBkZXB0aCBvZiBsZXhpY2FsIGVudmlyb25tZW50IHJlYWRzIHRo
YXQgcmVhY2gKKy8vIG91dHNpZGUgb2YgdGhpcyBDb2RlQmxvY2sncyBjb21waWxhdGlvbiB1bml0
LiBJdCBhbHNvIGFsbG93cyB1cyB0byBnZW5lcmF0ZSBwYXJ0aWN1bGFyIGNvbnN0YW50cyB0aGF0
CisvLyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlv
bi4gVGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKKy8vIGZs
b3cgb3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVs
eSBvbiBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKKy8vIGFsbCB0aGUgQ29k
ZUJsb2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkg
Y2FjaGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9j
ay4KIGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFi
bGUqIG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
LAogICAgIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsK
KwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAg
aWYgKHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKQEAgLTE3
MTksNyArMTcyOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb20K
ICAgICAvLyBpcyBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgdGhhdCB0aGUgb3BfY2F0Y2ggZGVmaW5l
cyBtaWdodCBiZSBkZWFkLCBhbmQKICAgICAvLyB3ZSBjYW4gYXZvaWQgcHJvZmlsaW5nIHRoZW0g
YW5kIGV4dHJhY3RpbmcgdGhlbSB3aGVuIGRvaW5nIE9TUiBlbnRyeQogICAgIC8vIGludG8gdGhl
IERGRy4KLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVuZXNzLmdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVO
R1RIKG9wX2NhdGNoKSk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVM
aXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHRoaXMsIGJ5dGVjb2RlT2Zm
c2V0ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0
ZXI+IGxpdmVPcGVyYW5kczsKICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShsaXZlTG9jYWxzLmJpdENvdW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJpdChb
Jl0gKHVuc2lnbmVkIGxpdmVMb2NhbCkgewpAQCAtMjg1Miw3ICsyODYxLDcgQEAgdm9pZCBDb2Rl
QmxvY2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5l
c3ModGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3Qg
ZWZmZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZl
QXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKKyAg
ICBGYXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5
dGVjb2RlT2Zmc2V0KHRoaXMsIDApOwogICAgIAogICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMo
KSAhPSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewogICAgICAgICBi
ZWdpblZhbGlkYXRpb25EaWRGYWlsKCk7CkBAIC0zMjI2LDE3ICszMjM1LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OmR1bXBNYXRoSUNTdGF0cygpCiAjZW5kaWYKIH0KIAotQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KCkKLXsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBhbmFseXNpcyA9IHN0ZDo6bWFrZV91
bmlxdWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPih0aGlzKTsKLSAgICB7Ci0gICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2xpdmVuZXNz
QW5hbHlzaXMpCi0gICAgICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMgPSBXVEZNb3ZlKGFuYWx5
c2lzKTsKLSAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Ci0gICAgfQotfQotCiB2
b2lkIHNldFByaW50ZXIoUHJpbnRlcjo6UHJpbnRSZWNvcmQmIHJlY29yZCwgQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB7CiAgICAgUHJpbnRlcjo6c2V0UHJpbnRlcihyZWNvcmQsIHRvQ1N0cmluZyhj
b2RlQmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw5IEBAIGNsYXNzIENv
ZGVCbG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIH07CiAKIHB1YmxpYzoKKworICAgIHVzaW5n
IEluc3RydWN0aW9uVHlwZSA9IEluc3RydWN0aW9uOworCiAgICAgZW51bSBDb3B5UGFyc2VkQmxv
Y2tUYWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBT
dHJ1Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRh
bDsKQEAgLTYwMCwxMiArNjAzLDcgQEAgcHVibGljOgogCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKICAgICB7Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgIGlmICghIW1f
bGl2ZW5lc3NBbmFseXNpcykKLSAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFs
eXNpczsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsK
KyAgICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5saXZlbmVzc0FuYWx5c2lzKHRoaXMpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIHZhbGlkYXRlKCk7CkBAIC0xMDYxLDggKzEwNTksNiBAQCBw
cml2YXRlOgogCiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2Ny
ZWF0aW9uVGltZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXM+IG1fbGl2ZW5lc3NBbmFseXNpczsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4g
bV9yYXJlRGF0YTsKIAogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFs
RmluYWxpemVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2Vk
Q29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAogI2lu
Y2x1ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0Fu
YWx5c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVSZXdyaXRlci5oIgogI2luY2x1ZGUgIkNsYXNz
SW5mby5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMzQwLDE1ICszNDEsMTQgQEAgVW5s
aW5rZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OgogICAgIHJldHVybiBVbmxpbmtl
ZEhhbmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5k
bGVycywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxv
Y2s6OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3JpdGVyKQordm9pZCBV
bmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3
cml0ZXIsIFVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCiB7CiAgICAgLy8gQmVm
b3JlIGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3ZSBhZGp1c3QgdGhlIGp1bXBzIGJhc2VkIG9uIHRo
ZSBvcmlnaW5hbCBieXRlY29kZSBvZmZzZXQsIHRoZSBvZmZzZXQgdG8gdGhlIGp1bXAgdGFyZ2V0
LCBhbmQKICAgICAvLyB0aGUgaW5zZXJ0aW9uIGluZm9ybWF0aW9uLgogCi0gICAgQnl0ZWNvZGVH
cmFwaDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoID0gcmV3cml0ZXIuZ3JhcGgoKTsKLSAgICBV
bmxpbmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9u
cygpLmJlZ2luKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4g
PSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsgLy8gT09QUzogbWFrZSB0aGlzIGFuIGFjY2Vzc29yIG9u
IHJld3JpdGVyLgogCi0gICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVjdGlv
bkNvdW50ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBieXRlY29kZU9mZnNldCA8IGlu
c3RydWN0aW9uQ291bnQ7KSB7CisgICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0
cnVjdGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25zLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0
cnVjdGlvbkNvdW50OykgewogICAgICAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBjdXJyZW50ID0g
aW5zdHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKICAgICAgICAgT3Bjb2RlSUQgb3Bj
b2RlSUQgPSBjdXJyZW50WzBdLnUub3Bjb2RlOwogICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRh
cmdldHNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVP
ZmZzZXQsIFsmXShpbnQzMl90JiByZWxhdGl2ZU9mZnNldCkgewpAQCAtMzg3LDcgKzM4Nyw3IEBA
IHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW8KIAogICAgIC8vIEFuZCBy
ZWNvbXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJhc2VkIG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBp
bnN0cnVjdGlvbnMuCiAgICAgbV9qdW1wVGFyZ2V0cy5jbGVhcigpOwotICAgIHJlY29tcHV0ZVBy
ZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBncmFw
aC5pbnN0cnVjdGlvbnMoKS5zaXplKCksIG1fanVtcFRhcmdldHMpOworICAgIHJlY29tcHV0ZVBy
ZWNpc2VKdW1wVGFyZ2V0cyh0aGlzLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rpb25z
LnNpemUoKSwgbV9qdW1wVGFyZ2V0cyk7CiB9CiAKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNo
cmlua1RvRml0KCkKQEAgLTQxOSw0ICs0MTksMTcgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6
ZHVtcChQcmludFN0cmVhbQogewogfQogCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIFVubGlu
a2VkQ29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sqIGNvZGVCbG9jaykK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkgPT0g
dGhpcyk7CisKKworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2sp
OworICAgICAgICBtX2xpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXM+KGNvZGVCbG9jayk7CisgICAgfQorICAgIAorICAgIHJldHVybiAqbV9saXZlbmVz
czsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjIzOTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CitjbGFz
cyBDb2RlQmxvY2s7CiBjbGFzcyBEZWJ1Z2dlcjsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsK
IGNsYXNzIFBhcnNlckVycm9yOwpAQCAtMTE1LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIHN0
YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCisgICAgdXNpbmcgSW5z
dHJ1Y3Rpb25UeXBlID0gVW5saW5rZWRJbnN0cnVjdGlvbjsKKwogICAgIGVudW0geyBDYWxsRnVu
Y3Rpb24sIEFwcGx5RnVuY3Rpb24gfTsKIAogICAgIHR5cGVkZWYgVW5saW5rZWRJbnN0cnVjdGlv
biBJbnN0cnVjdGlvbjsKQEAgLTM5Nyw2ICs0MDEsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMm
IGxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBp
ZiAobV9saXZlbmVzcykKKyAgICAgICAgICAgIHJldHVybiAqbV9saXZlbmVzczsKKyAgICAgICAg
cmV0dXJuIGxpdmVuZXNzQW5hbHlzaXNTbG93KGNvZGVCbG9jayk7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29u
c3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOwogICAgIH5VbmxpbmtlZENvZGVCbG9j
aygpOwpAQCAtNDA4LDcgKzQxOSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKLSAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5
dGVjb2RlUmV3cml0ZXImKTsKKyAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3
cml0ZXImLCBVbnBhY2tlZEluc3RydWN0aW9ucyYpOwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0
YUlmTmVjZXNzYXJ5KCkKICAgICB7CkBAIC00MTksMTAgKzQzMCwxMiBAQCBwcml2YXRlOgogICAg
IH0KIAogICAgIHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZv
JiwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworICAgIEJ5dGVjb2Rl
TGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coQ29kZUJsb2NrKik7CiAKICAg
ICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5z
dHJ1Y3Rpb25TdHJlYW0+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAogICAgIFZpcnR1YWxS
ZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lz
dGVyOwpAQCAtNDQ4LDYgKzQ2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291
bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKKyAgICBMb2NrIG1fbG9jazsKICAgICBU
cmlTdGF0ZSBtX2RpZE9wdGltaXplOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsK
ICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAg
RnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcgogICAgICAgICByZXR1cm4g
Kml0ZXItPnZhbHVlOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZl
bmVzcz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bGxCeXRlY29kZUxpdmVuZXNzPigp
OwotICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNvbXB1dGVGdWxsTGl2ZW5lc3Mo
KmxpdmVuZXNzKTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVs
bExpdmVuZXNzKGNvZGVCbG9jaywgKmxpdmVuZXNzKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVz
cyYgcmVzdWx0ID0gKmxpdmVuZXNzOwogICAgIG1fYnl0ZWNvZGVMaXZlbmVzcy5hZGQoY29kZUJs
b2NrLCBXVEZNb3ZlKGxpdmVuZXNzKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMDQsNyAr
MTEwNCw3IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0ZvcihDb2RlQmxvY2sKICAgICAg
ICAgcmV0dXJuICppdGVyLT52YWx1ZTsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVLaWxscz4ga2lsbHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlS2lsbHM+KCk7Ci0gICAg
Y29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtpbGxzKCpraWxscyk7CisgICAg
Y29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtpbGxzKGNvZGVCbG9jaywgKmtp
bGxzKTsKICAgICBCeXRlY29kZUtpbGxzJiByZXN1bHQgPSAqa2lsbHM7CiAgICAgbV9ieXRlY29k
ZUtpbGxzLmFkZChjb2RlQmxvY2ssIFdURk1vdmUoa2lsbHMpKTsKICAgICByZXR1cm4gcmVzdWx0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMjM5
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OTcsNyArNjk3LDggQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJ
Zk5lY2VzcwogICAgIGlmICghbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJPZkxvY2FscygpKQogICAg
ICAgICByZXR1cm47CiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGNvZGVCbG9j
ay0+YWx0ZXJuYXRpdmUoKS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBDb2RlQmxvY2sqIGFsdGVy
bmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2
ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0
Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAg
CiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2Nh
bHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBA
QCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICAvLyBJbnN0
ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVh
Y2hhYmxlLCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNv
ZGUgb2Zmc2V0IG9ud2FyZHMuCiAKLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGg8Q29kZUJsb2Nr
PiBncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOworICAgICAgICAgICAgQnl0ZWNv
ZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOwogICAgICAgICAgICAg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNv
ZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVChibG9jayk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325213</attachid>
            <date>2017-10-27 16:09:04 -0700</date>
            <delta_ts>2017-10-27 16:16:10 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>42255</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTEwLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJ5dGVjb2RlIGxpdmVuZXNzIHNob3VsZCBsaXZlIG9uIFVubGlua2VkQ29kZUJsb2NrIHNvIGl0
IGNhbiBiZSBzaGFyZWQgYW1vbmdzdCBDb2RlQmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3JlcyBCeXRlY29kZUxpdmVu
ZXNzIG9uIFVubGlua2VkQ29kZUJsb2NrIGluc3RlYWQgb2YgQ29kZUJsb2NrCisgICAgICAgIHNv
IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2ZW5lc3MgZm9yIHRoZSBzYW1lIFVu
bGlua2VkQ29kZUJsb2NrCisgICAgICAgIG1vcmUgdGhhbiBvbmNlLiBUbyBkbyB0aGlzLCB0aGlz
IHBhdGNoIHNvbGlkaWZpZXMgdGhlIGludmFyaWFudCB0aGF0IENvZGVCbG9jaworICAgICAgICBs
aW5raW5nIGNhbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgb2Yg
bGl2ZW5lc3MuIEZvciBleGFtcGxlLAorICAgICAgICBpdCBjYW4ndCBpbnRyb2R1Y2UgbmV3IGxv
Y2Fscy4gVGhpcyBpbnZhcmlhbnQgd2FzIG1ldCBteSBKU0MgYmVmb3JlLCBiZWNhdXNlIHdlCisg
ICAgICAgIGRpZG4ndCBkbyBhbnl0aGluZyBpbiBieXRlY29kZSBsaW5raW5nIHRoYXQgd291bGQg
Y2hhbmdlIGxpdmVuZXNzLiBIb3dldmVyLCBpdCBpcworICAgICAgICBub3cgYSBjb3JyZWN0bmVz
cyByZXF1aXJlbWVudCB0aGF0IHdlIGRvbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdl
IHRoZQorICAgICAgICByZXN1bHQgb2YgcnVubmluZyBsaXZlbmVzcy4gVG8gc3VwcG9ydCB0aGlz
IGNoYW5nZSwgSSd2ZSByZWZhY3RvcmVkIEJ5dGVjb2RlR3JhcGgKKyAgICAgICAgdG8gbm90IGJl
IHRpZWQgdG8gYSBDb2RlQmxvY2tUeXBlKi4gVGhpbmdzIHRoYXQgcGVyZm9ybSBsaXZlbmVzcyB3
aWxsIHBhc3MgaW4KKyAgICAgICAgQ29kZUJsb2NrVHlwZSogYW5kIHRoZSBpbnN0cnVjdGlvbiBz
dHJlYW0gYXMgbmVlZGVkLiBUaGlzIG1lYW5zIHRoYXQgd2UgbWF5CisgICAgICAgIGNvbXB1dGUg
bGl2ZW5lc3Mgd2l0aCBvbmUgQ29kZUJsb2NrKidzIGluc3RydWN0aW9uIHN0cmVhbSwgYW5kIHRo
ZW4gcGVyZm9ybQorICAgICAgICBxdWVyaWVzIG9uIHRoYXQgYW5hbHlzaXMgd2l0aCBhIGRpZmZl
cmVudCBDb2RlQmxvY2sqJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCisgICAgICAgIFRoaXMgc2Vl
bXMgdG8gYmUgYSAyJSBKU0JlbmNoIHByb2dyZXNzaW9uLgorCisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Z3JhcGgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdlbmVyYXRvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHcmFwaC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdyYXBoOjpCeXRlY29kZUdy
YXBoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6Y29kZUJsb2NrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6aW5zdHJ1Y3Rpb25zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVjb2RlR3JhcGgpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1
bkxpdmVuZXNzRml4cG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZVJld3JpdGVyOjphcHBseU1vZGlmaWNhdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZVJld3JpdGVyOjphZGp1c3RKdW1wVGFyZ2V0c0luRnJhZ21lbnQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0
ZXI6OnJlbW92ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVSZXdyaXRlcjo6Z3Jh
cGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2
ZW5lc3NBbmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGl2ZW5l
c3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpraWxs
c0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKwogMjAx
Ny0xMC0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IHVwZGF0ZSBhcmJpdHJhcnkgbGltaXRzIHRvIHdoYXQgYnJvd3NlcnMgdXNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmlj
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBW
ZWN0b3I8WWllbGREYXRhPiBZaWVsZHM7CiAKICAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9jazo6VW5wYWNr
ZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1l
U3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCi0gICAgICAg
IDogbV9ncmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucykKKyAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQorICAg
ICAgICAsIG1fZ3JhcGgobV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKQogICAgICAgICAsIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSgqY29kZUJsb2NrLT52bSgpLCBnZW5lcmF0b3JGcmFt
ZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4
KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAgICB7CiAgICAgICAgIGZvciAoQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgOiBibG9jay0+b2Zmc2V0cygpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSAmbV9ncmFwaC5pbnN0cnVjdGlvbnMo
KVtieXRlY29kZU9mZnNldF07CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVj
dGlvbiogcGMgPSAmaW5zdHJ1Y3Rpb25zW2J5dGVjb2RlT2Zmc2V0XTsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHBjLT51Lm9wY29kZSkgewogICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW50ZXI6
IHsKICAgICAgICAgICAgICAgICAgICAgbV9lbnRlclBvaW50ID0gYnl0ZWNvZGVPZmZzZXQ7CkBA
IC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCk7CiAKLSAgICBCeXRlY29k
ZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9Cisg
ICAgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAKICAgICBjb25z
dCBZaWVsZHMmIHlpZWxkcygpIGNvbnN0CiAgICAgewpAQCAtMTIxLDEwICsxMjMsOSBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxTdG9yYWdlPiBzdG9yYWdlID0gbV9zdG9y
YWdlc1tpbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2U7CiAKLSAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IGNvZGVCbG9jay0+bnVtYmVy
T2ZJZGVudGlmaWVycygpOwotICAgICAgICBjb2RlQmxvY2stPmFkZElkZW50aWZpZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVy
KGlkZW50aWZpZXIpOwogICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCA9IG1fZ2VuZXJh
dG9yRnJhbWVTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nh
cnkpOwogICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdO
ZWNlc3NhcnksIGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChz
Y29wZU9mZnNldCkpKTsKIApAQCAtMTM4LDcgKzEzOSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgbV9lbnRlclBvaW50IHsgMCB9OwotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5r
ZWRDb2RlQmxvY2s+IG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVj
dGlvbnM7CisgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxzdGQ6Om9wdGlv
bmFsPFN0b3JhZ2U+PiBtX3N0b3JhZ2VzOwogICAgIFlpZWxkcyBtX3lpZWxkczsKICAgICBTdHJv
bmc8U3ltYm9sVGFibGU+IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZTsKQEAgLTE1MiwxNSAr
MTU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBydW4oKQorICAgIHZv
aWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgIHsKICAgICAgICAgLy8gUGVy
Zm9ybSBtb2RpZmllZCBsaXZlbmVzcyBhbmFseXNpcyB0byBkZXRlcm1pbmUgd2hpY2ggbG9jYWxz
IGFyZSBsaXZlIGF0IHRoZSBtZXJnZSBwb2ludHMuCiAgICAgICAgIC8vIFRoaXMgcHJvZHVjZXMg
dGhlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGZvciB0aGUgcXVlc3Rpb24sICJ3aGljaCB2YXJpYWJs
ZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCByZXN1bWVkPyIuCiAKLSAgICAgICAgcnVuTGl2ZW5lc3NG
aXhwb2ludChtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpKTsKKyAgICAgICAgcnVuTGl2ZW5l
c3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24u
Z3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlm
aWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRhdGEu
cG9pbnQgKyBvcGNvZGVMZW5ndGgob3BfeWllbGQpKTsKKyAgICAgICAgICAgIGRhdGEubGl2ZW5l
c3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBkYXRhLnBvaW50ICsgb3Bjb2RlTGVu
Z3RoKG9wX3lpZWxkKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTczLDE4ICsxNzYsMTcgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6cnVuKCkKIAogICAgIHsKICAgICAgICAg
R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpcyBwYXNzKCp0aGlzKTsKLSAgICAgICAgcGFzcy5ydW4o
KTsKKyAgICAgICAgcGFzcy5ydW4obV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsKICAgICB9
CiAKLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2so
KTsKLSAgICBCeXRlY29kZVJld3JpdGVyIHJld3JpdGVyKG1fZ3JhcGgpOworICAgIEJ5dGVjb2Rl
UmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCwgbV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsK
IAogICAgIC8vIFNldHVwIHRoZSBnbG9iYWwgc3dpdGNoIGZvciB0aGUgZ2VuZXJhdG9yLgogICAg
IHsKICAgICAgICAgdW5zaWduZWQgbmV4dFRvRW50ZXJQb2ludCA9IGVudGVyUG9pbnQoKSArIG9w
Y29kZUxlbmd0aChvcF9lbnRlcik7Ci0gICAgICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXgg
PSBtX2dyYXBoLmNvZGVCbG9jaygpLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKKyAgICAg
ICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3aXRj
aEp1bXBUYWJsZXMoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3JGdW5jdGlv
bjo6R2VuZXJhdG9yQXJndW1lbnQ6OlN0YXRlKSk7Ci0gICAgICAgIGF1dG8mIGp1bXBUYWJsZSA9
IG1fZ3JhcGguY29kZUJsb2NrKCktPmFkZFN3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBhdXRv
JiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAg
IGp1bXBUYWJsZS5taW4gPSAwOwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emUobV95aWVsZHMuc2l6ZSgpICsgMSk7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRz
LmZpbGwoMCk7CkBAIC0yMjcsNyArMjI5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNh
dGlvbjo6cnVuKCkKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlIHN0
b3JhZ2UgPSBzdG9yYWdlRm9yR2VuZXJhdG9yTG9jYWwoaW5kZXgpOwogCi0gICAgICAgICAgICAg
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGNvZGVCbG9jay0+YWRkVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IG1f
Y29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoKTsKICAgICAgICAgICAgICAgICBmcmFnbWVudC5h
cHBlbmRJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgb3BfZ2V0X2Zyb21fc2NvcGUs
CiAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCksIC8vIGRzdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZpc2lv
biAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+CiBj
bGFzcyBCeXRlY29kZUdyYXBoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdyYXBoKTsKIHB1YmxpYzoKLSAgICB0eXBlZGVm
IEJsb2NrIENvZGVCbG9jazsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJsb2NrOjpJbnN0cnVjdGlv
biBJbnN0cnVjdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPj4gQmFzaWNCbG9ja3NWZWN0b3I7CiAKLSAgICB0eXBlZGVmIFdURjo6SW5k
ZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg8QmxvY2s+PiBpdGVyYXRvcjsKKyAg
ICB0eXBlZGVmIFdURjo6SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg+IGl0
ZXJhdG9yOwogCi0gICAgaW5saW5lIEJ5dGVjb2RlR3JhcGgoQmxvY2sqLCB0eXBlbmFtZSBCbG9j
azo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmKTsKLQotICAgIEJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotCi0gICAgdHlwZW5hbWUgQmxvY2s6OlVucGFja2Vk
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIGlubGluZSBCeXRlY29k
ZUdyYXBoKENvZGVCbG9ja1R5cGUqLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZElu
c3RydWN0aW9ucyYpOwogCiAgICAgV1RGOjpJdGVyYXRvclJhbmdlPEJhc2ljQmxvY2tzVmVjdG9y
OjpyZXZlcnNlX2l0ZXJhdG9yPiBiYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkKICAgICB7CkBA
IC0xMDYsMTkgKzEwMCwxNCBAQCBwdWJsaWM6CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBsYXN0
KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KIAogcHJpdmF0ZToKLSAgICBCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQmFzaWNCbG9ja3NWZWN0b3IgbV9iYXNpY0Jsb2NrczsKLSAgICB0eXBl
bmFtZSBCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmIG1faW5zdHJ1Y3Rpb25zOwogfTsKIAog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLUJ5dGVjb2RlR3JhcGg8QmxvY2s+OjpCeXRlY29k
ZUdyYXBoKEJsb2NrKiBjb2RlQmxvY2ssIHR5cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwg
bV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK0J5dGVjb2RlR3JhcGg6OkJ5dGVjb2RlR3JhcGgoQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1
Y3Rpb25zKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgQnl0ZWNvZGVCYXNpY0Js
b2NrOjpjb21wdXRlKG1fY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rp
b25zLnNpemUoKSwgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21w
dXRlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXplKCks
IG1fYmFzaWNCbG9ja3MpOwogICAgIEFTU0VSVChtX2Jhc2ljQmxvY2tzLnNpemUoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNDAgKzQwLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSkKIHsKLSAgICBjb21wdXRlKCk7CisgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ss
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgpOworCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQorICAgICAgICBkdW1wUmVzdWx0cyhjb2Rl
QmxvY2spOwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3Rv
ciYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5
QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgcmVzdWx0
LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVz
c0ZvckJ5dGVjb2RlT2Zmc2V0KG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVzdWx0
KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCByZXN1bHQpOwogfQogCi1ib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFuZElz
TGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQotewotICAgIGlmIChvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKLSAgICBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShyZXN1bHQsIG9wZXJhbmQpOwotfQotCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVC
bG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBGYXN0Qml0
VmVjdG9yIG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0LCBvdXQpOworICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJs
b2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi12b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVG
dWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBy
ZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIAorCiAgICAgcmVzdWx0Lm1fbWFwLnJlc2l6
ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCiAgICAgZm9yIChzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiYgYmxvY2sgOiBtX2dyYXBoLmJhc2ljQmxv
Y2tzSW5SZXZlcnNlT3JkZXIoKSkgewpAQCAtODQsMTcgKzc3LDE3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVzdWx0
Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyhCeXRlY29kZUtpbGxzJiBy
ZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUtpbGxzKENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUtpbGxzJiByZXN1bHQpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHJlc3VsdCk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOworCiAgICAgcmVzdWx0Lm1fY29kZUJs
b2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC5tX2tpbGxTZXRzID0gc3RkOjptYWtlX3VuaXF1
ZTxCeXRlY29kZUtpbGxzOjpLaWxsU2V0W10+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKICAgICAKQEAgLTEwNyw3ICsxMDAsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVP
ZmZzZXQsCiAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgogICAgICAgICAgICAgICAgICAgICBpZiAo
b3V0W2luZGV4XSkKQEAgLTEyMyw5ICsxMTYsOCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoKQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICBkYXRhTG9nKCJcbkR1bXBpbmcgYnl0ZWNvZGUgbGl2
ZW5lc3MgZm9yICIsICpjb2RlQmxvY2ssICI6XG4iKTsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5z
aWduZWQgaSA9IDA7CkBAIC0xNzgsNyArMTcwLDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmR1bXBSZXN1bAogICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAKICAgICAg
ICAgICAgIGRhdGFMb2dGKCJMaXZlIHZhcmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRW
ZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xOTUsMTIg
KzE4Nyw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWwKICAgICB9
CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKLXsKLSAgICBy
dW5MaXZlbmVzc0ZpeHBvaW50KG1fZ3JhcGgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBCeXRl
Y29kZUxpdmVuZXNzUmVzdWx0cygpKQotICAgICAgICBkdW1wUmVzdWx0cygpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDIyMzk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIGNsYXNzIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHJvdGVj
dGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVj
dGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0
ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiwg
Y29uc3QgRGVmRnVuY3RvciYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQg
c3RlcE92ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiBvdXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5
cGVuYW1lIEluc3RydWN0aW9ucz4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBH
cmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9y
JiByZXN1bHQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBy
ZXN1bHQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IGJvb2wgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCbG9jayhHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayopOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBHcmFwaD4gRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KEdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gRmFzdEJpdFZl
Y3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2lu
dChHcmFwaCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJik7CiB9OwogCiBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMgOiBwcml2YXRlIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7
CkBAIC01NywxOSArNTcsMTcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9j
ayopOwogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9w
ZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBGYXN0Qml0VmVjdG9yIGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgCi0gICAgdm9pZCBjb21wdXRlRnVsbExp
dmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwotICAgIHZvaWQgY29tcHV0ZUtp
bGxzKEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNz
KENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOworICAgIHZvaWQgY29t
cHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CiAKIHByaXZhdGU6
Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBkdW1wUmVzdWx0cygpOworICAgIHZvaWQg
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAg
ICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8
Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKIGlu
bGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNl
L2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNs
dWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgotdGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
R3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYg
dXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1l
IERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0
ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikK
IHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2
ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAg
Ly8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3Nh
cnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQpAQCAtNzksMjEgKzc5
LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAvLyB1
c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVh
ciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdlJ2QKICAgICAvLyBmaXJzdCBhZGQgaXQg
dG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhlIGRl
ZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFwaC5jb2RlQmxvY2soKTsKLSAgICBhdXRv
KiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKICAgICBhdXRv
KiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoKmluc3RydWN0aW9u
KTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVCbG9j
aywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpD
b2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9w
ZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAg
ICAgICAgICAgICAgZGVmKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOwogICAg
ICAgICB9KTsKIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNv
ZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdy
YXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwg
aW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5h
bWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5k
KSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkp
CiAgICAgICAgICAgICAgICAgdXNlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkp
OwogICAgICAgICB9KTsKQEAgLTEwNywxMSArMTA2LDExIEBAIGlubGluZSB2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBo
PgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uKEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0
b3ImIG91dCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3Ry
dWN0aW9ucz4KK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
cyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAot
ICAgICAgICBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCiAgICAgICAgIFsmXSAodW5zaWduZWQgYml0
SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBz
ZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwpAQCAtMTIyLDgg
KzEyMSw4IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFy
Z2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUgYm9vbCBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIHVuc2ln
bmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCgh
YmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKQEAgLTEzNCwyMiArMTMzLDIyIEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjoKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0
cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihncmFwaCwgYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdy
YXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9j
aykKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9u
cz4KK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jaykKIHsKICAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkgfHwgYmxvY2stPmlz
RW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVhZGVy
T2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKKyAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBi
bG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGg+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoR3JhcGgmIGdyYXBoLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVu
YW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdy
YXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChibG9jayk7CkBAIC0xNTcsMTQgKzE1NiwxMyBAQCBp
bmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvCiAgICAgQVNTRVJUKCFibG9j
ay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7CiAgICAgb3V0LnJlc2l6
ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5
dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgY29t
cHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6cnVuTGl2ZW5lc3NGaXhwb2ludChHcmFwaCYgZ3JhcGgpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUg
dm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1bkxpdmVuZXNzRml4cG9pbnQoQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgYXV0byogY29kZUJsb2NrID0gZ3JhcGguY29k
ZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOwogICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IGdy
YXBoKSB7CiAgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7CkBA
IC0xODYsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OgogICAgICAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JzKCkpCiAgICAgICAgICAgICAgICAgbmV3T3V0IHw9IHN1Y2Nlc3Nvci0+aW4o
KTsKICAgICAgICAgICAgIGJsb2NrLT5vdXQoKSA9IG5ld091dDsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhncmFwaCwgYmxvY2suZ2V0KCkpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2suZ2V0KCkpOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAoY2hhbmdlZCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFwcGx5
TW9kaWZpY2F0aW9uCiAgICAgZm9yIChzaXplX3QgaW5zZXJ0aW9uSW5kZXggPSBtX2luc2VydGlv
bnMuc2l6ZSgpOyBpbnNlcnRpb25JbmRleC0tOykgewogICAgICAgICBJbnNlcnRpb24mIGluc2Vy
dGlvbiA9IG1faW5zZXJ0aW9uc1tpbnNlcnRpb25JbmRleF07CiAgICAgICAgIGlmIChpbnNlcnRp
b24udHlwZSA9PSBJbnNlcnRpb246OlR5cGU6OlJlbW92ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgu
aW5zdHJ1Y3Rpb25zKCkucmVtb3ZlKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5z
ZXJ0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1faW5zdHJ1Y3Rpb25zLnJlbW92ZShpbnNl
cnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2VydGlvbi5sZW5ndGgoKSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgaWYgKGluc2VydGlvbi5pbmNsdWRlQnJhbmNoID09IEluY2x1
ZGVCcmFuY2g6OlllcykgewogICAgICAgICAgICAgICAgIGludCBmaW5hbE9mZnNldCA9IGluc2Vy
dGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCArIGNhbGN1bGF0ZURpZmZlcmVuY2UobV9pbnNlcnRp
b25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5iZWdpbigpICsgaW5zZXJ0aW9uSW5kZXgpOwogICAg
ICAgICAgICAgICAgIGFkanVzdEp1bXBUYXJnZXRzSW5GcmFnbWVudChmaW5hbE9mZnNldCwgaW5z
ZXJ0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25z
KCkuaW5zZXJ0VmVjdG9yKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0aW9u
Lmluc3RydWN0aW9ucyk7CisgICAgICAgICAgICBtX2luc3RydWN0aW9ucy5pbnNlcnRWZWN0b3Io
aW5zZXJ0aW9uLmluZGV4LmJ5dGVjb2RlT2Zmc2V0LCBpbnNlcnRpb24uaW5zdHJ1Y3Rpb25zKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBtX2luc2VydGlvbnMuY2xlYXIoKTsKQEAgLTU2LDggKzU2
LDcgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjpleGVjdXRlKCkKICAgICAgICAgcmV0dXJuIGxo
cy5pbmRleCA8IHJocy5pbmRleDsKICAgICB9KTsKIAotICAgIFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIGNvZGVCbG9jay0+YXBwbHlNb2Rp
ZmljYXRpb24oKnRoaXMpOworICAgIG1fY29kZUJsb2NrLT5hcHBseU1vZGlmaWNhdGlvbigqdGhp
cywgbV9pbnN0cnVjdGlvbnMpOwogfQogCiB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFkanVzdEp1
bXBUYXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5hbE9mZnNldCwgSW5zZXJ0aW9uJiBpbnNl
cnRpb24pCkBAIC02OSw4ICs2OCw3IEBAIHZvaWQgQnl0ZWNvZGVSZXdyaXRlcjo6YWRqdXN0SnVt
cFRhcmdldHMKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi51Lm9wY29k
ZTsKICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlEKSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBmaW5hbE9mZnNldCArIGZyYWdtZW50T2Zmc2V0OwotICAgICAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7
Ci0gICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChj
b2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFnbWVudE9mZnNldCwgWyZdKGludDMyX3Qm
IGxhYmVsKSB7CisgICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29k
ZU9mZnNldChtX2NvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zQmVnaW4sIGZyYWdtZW50T2Zmc2V0LCBb
Jl0oaW50MzJfdCYgbGFiZWwpIHsKICAgICAgICAgICAgICAgICBpbnQgYWJzb2x1dGVPZmZzZXQg
PSBhZGp1c3RBYnNvbHV0ZU9mZnNldChsYWJlbCk7CiAgICAgICAgICAgICAgICAgbGFiZWwgPSBh
YnNvbHV0ZU9mZnNldCAtIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVS
ZXdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVJld3JpdGVyLmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw4
ICsxNjEsMTAgQEAgcHVibGljOgogICAgICAgICBJbmNsdWRlQnJhbmNoJiBtX2luY2x1ZGVCcmFu
Y2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFwaDxVbmxpbmtl
ZENvZGVCbG9jaz4mIGdyYXBoKQorICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFwaCYg
Z3JhcGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgICAgICA6IG1fZ3JhcGgoZ3Jh
cGgpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1faW5zdHJ1
Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICB7CiAgICAgfQogCkBAIC0xODgsMTIgKzE5MCwxMiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUJ5dGVjb2RlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQogICAgIHsKLSAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChJbnNlcnRpb24geyBJbnNl
cnRpb25Qb2ludChieXRlY29kZU9mZnNldCwgUG9zaXRpb246Ok9yaWdpbmFsQnl0ZWNvZGVQb2lu
dCksIEluc2VydGlvbjo6VHlwZTo6UmVtb3ZlLCBJbmNsdWRlQnJhbmNoOjpObywgb3Bjb2RlTGVu
Z3RoKG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9
IH0pOworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKEluc2VydGlvbiB7IEluc2VydGlvblBv
aW50KGJ5dGVjb2RlT2Zmc2V0LCBQb3NpdGlvbjo6T3JpZ2luYWxCeXRlY29kZVBvaW50KSwgSW5z
ZXJ0aW9uOjpUeXBlOjpSZW1vdmUsIEluY2x1ZGVCcmFuY2g6Ok5vLCBvcGNvZGVMZW5ndGgobV9p
bnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9IH0pOwogICAgIH0KIAog
ICAgIHZvaWQgZXhlY3V0ZSgpOwogCi0gICAgQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9j
az4mIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIEJ5dGVjb2RlR3JhcGgmIGdyYXBo
KCkgeyByZXR1cm4gbV9ncmFwaDsgfQogCiAgICAgaW50IGFkanVzdEFic29sdXRlT2Zmc2V0KGlu
dCBhYnNvbHV0ZU9mZnNldCkKICAgICB7CkBAIC0yMTUsNyArMjE3LDkgQEAgcHJpdmF0ZToKICAg
ICBpbnQgYWRqdXN0SnVtcFRhcmdldChJbnNlcnRpb25Qb2ludCBzdGFydFBvaW50LCBJbnNlcnRp
b25Qb2ludCBqdW1wVGFyZ2V0UG9pbnQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PiBpbnQgY2FsY3VsYXRlRGlmZmVyZW5jZShJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKTsK
IAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBtX2dyYXBoOworICAgIEJ5
dGVjb2RlR3JhcGgmIG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVj
dGlvbnM7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsMTAgKzM5OCwxOSBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIH0KIAorLy8gVGhlIG1haW4gcHVycG9zZSBvZiB0
aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIGxpbmtlZCBieXRlY29kZSBmcm9tIHVubGlua2Vk
IGJ5dGVjb2RlLiBUaGUgcHJvY2VzcworLy8gb2YgbGlua2luZyBpcyB0YWtpbmcgYW4gYWJzdHJh
Y3QgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgYW5kIHR5aW5nIGl0IHRvIGEgR2xvYmFsT2Jq
ZWN0IGFuZCBzY29wZQorLy8gY2hhaW4uIEZvciBleGFtcGxlLCB0aGlzIHByb2Nlc3MgYWxsb3dz
IHVzIHRvIGNhY2hlIHRoZSBkZXB0aCBvZiBsZXhpY2FsIGVudmlyb25tZW50IHJlYWRzIHRoYXQg
cmVhY2gKKy8vIG91dHNpZGUgb2YgdGhpcyBDb2RlQmxvY2sncyBjb21waWxhdGlvbiB1bml0LiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBnZW5lcmF0ZSBwYXJ0aWN1bGFyIGNvbnN0YW50cyB0aGF0Cisv
LyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4g
VGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKKy8vIGZsb3cg
b3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBv
biBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKKy8vIGFsbCB0aGUgQ29kZUJs
b2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2Fj
aGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4K
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAog
ICAgIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYg
KHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKQEAgLTE3MTks
NyArMTcyOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb20KICAg
ICAvLyBpcyBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgdGhhdCB0aGUgb3BfY2F0Y2ggZGVmaW5lcyBt
aWdodCBiZSBkZWFkLCBhbmQKICAgICAvLyB3ZSBjYW4gYXZvaWQgcHJvZmlsaW5nIHRoZW0gYW5k
IGV4dHJhY3RpbmcgdGhlbSB3aGVuIGRvaW5nIE9TUiBlbnRyeQogICAgIC8vIGludG8gdGhlIERG
Ry4KLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVuZXNzLmdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RI
KG9wX2NhdGNoKSk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZl
bmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHRoaXMsIGJ5dGVjb2RlT2Zmc2V0
ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IGxpdmVPcGVyYW5kczsKICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
aXZlTG9jYWxzLmJpdENvdW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJpdChbJl0g
KHVuc2lnbmVkIGxpdmVMb2NhbCkgewpAQCAtMjg1Miw3ICsyODYxLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3Mo
dGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZm
ZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRI
ZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKKyAgICBG
YXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KHRoaXMsIDApOwogICAgIAogICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewogICAgICAgICBiZWdp
blZhbGlkYXRpb25EaWRGYWlsKCk7CkBAIC0zMjI2LDE3ICszMjM1LDYgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAjZW5kaWYKIH0KIAotQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KCkKLXsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBhbmFseXNpcyA9IHN0ZDo6bWFrZV91bmlx
dWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPih0aGlzKTsKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2xpdmVuZXNzQW5h
bHlzaXMpCi0gICAgICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMgPSBXVEZNb3ZlKGFuYWx5c2lz
KTsKLSAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Ci0gICAgfQotfQotCiB2b2lk
IHNldFByaW50ZXIoUHJpbnRlcjo6UHJpbnRSZWNvcmQmIHJlY29yZCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgUHJpbnRlcjo6c2V0UHJpbnRlcihyZWNvcmQsIHRvQ1N0cmluZyhjb2Rl
QmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw5IEBAIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIH07CiAKIHB1YmxpYzoKKworICAgIHVzaW5nIElu
c3RydWN0aW9uVHlwZSA9IEluc3RydWN0aW9uOworCiAgICAgZW51bSBDb3B5UGFyc2VkQmxvY2tU
YWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
QEAgLTYwMCwxMiArNjAzLDcgQEAgcHVibGljOgogCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKICAgICB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgIGlmICghIW1fbGl2
ZW5lc3NBbmFseXNpcykKLSAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNp
czsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAg
ICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5saXZlbmVzc0FuYWx5c2lzKHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2b2lkIHZhbGlkYXRlKCk7CkBAIC0xMDYxLDggKzEwNTksNiBAQCBwcml2
YXRlOgogCiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2NyZWF0
aW9uVGltZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+
IG1fbGl2ZW5lc3NBbmFseXNpczsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKIAogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVSZXdyaXRlci5oIgogI2luY2x1ZGUgIkNsYXNzSW5m
by5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMzQwLDE1ICszNDEsMTQgQEAgVW5saW5r
ZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OgogICAgIHJldHVybiBVbmxpbmtlZEhh
bmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6
OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3JpdGVyKQordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3cml0
ZXIsIFVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCiB7CiAgICAgLy8gQmVmb3Jl
IGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3ZSBhZGp1c3QgdGhlIGp1bXBzIGJhc2VkIG9uIHRoZSBv
cmlnaW5hbCBieXRlY29kZSBvZmZzZXQsIHRoZSBvZmZzZXQgdG8gdGhlIGp1bXAgdGFyZ2V0LCBh
bmQKICAgICAvLyB0aGUgaW5zZXJ0aW9uIGluZm9ybWF0aW9uLgogCi0gICAgQnl0ZWNvZGVHcmFw
aDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoID0gcmV3cml0ZXIuZ3JhcGgoKTsKLSAgICBVbmxp
bmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygp
LmJlZ2luKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBp
bnN0cnVjdGlvbnMuYmVnaW4oKTsgLy8gT09QUzogbWFrZSB0aGlzIGFuIGFjY2Vzc29yIG9uIHJl
d3JpdGVyLgogCi0gICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVjdGlvbkNv
dW50ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBieXRlY29kZU9mZnNldCA8IGluc3Ry
dWN0aW9uQ291bnQ7KSB7CisgICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25zLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVj
dGlvbkNvdW50OykgewogICAgICAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5z
dHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBjdXJyZW50WzBdLnUub3Bjb2RlOwogICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdl
dHNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZz
ZXQsIFsmXShpbnQzMl90JiByZWxhdGl2ZU9mZnNldCkgewpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW8KIAogICAgIC8vIEFuZCByZWNv
bXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJhc2VkIG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBpbnN0
cnVjdGlvbnMuCiAgICAgbV9qdW1wVGFyZ2V0cy5jbGVhcigpOwotICAgIHJlY29tcHV0ZVByZWNp
c2VKdW1wVGFyZ2V0cyh0aGlzLCBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBncmFwaC5p
bnN0cnVjdGlvbnMoKS5zaXplKCksIG1fanVtcFRhcmdldHMpOworICAgIHJlY29tcHV0ZVByZWNp
c2VKdW1wVGFyZ2V0cyh0aGlzLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rpb25zLnNp
emUoKSwgbV9qdW1wVGFyZ2V0cyk7CiB9CiAKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNocmlu
a1RvRml0KCkKQEAgLTQxOSw0ICs0MTksMTcgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVt
cChQcmludFN0cmVhbQogewogfQogCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIFVubGlua2Vk
Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkgPT0gdGhp
cyk7CisKKworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgICAgICBtX2xpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM+KGNvZGVCbG9jayk7CisgICAgfQorICAgIAorICAgIHJldHVybiAqbV9saXZlbmVzczsK
K30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAkocmV2aXNpb24gMjIzOTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTQ2LDcgKzQ2LDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczsKIGNsYXNzIEJ5dGVjb2RlUmV3cml0ZXI7CitjbGFzcyBD
b2RlQmxvY2s7CiBjbGFzcyBEZWJ1Z2dlcjsKIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKIGNs
YXNzIFBhcnNlckVycm9yOwpAQCAtMTE1LDYgKzExNyw4IEBAIHB1YmxpYzoKIAogICAgIHN0YXRp
YyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOwogCisgICAgdXNpbmcgSW5zdHJ1
Y3Rpb25UeXBlID0gVW5saW5rZWRJbnN0cnVjdGlvbjsKKwogICAgIGVudW0geyBDYWxsRnVuY3Rp
b24sIEFwcGx5RnVuY3Rpb24gfTsKIAogICAgIHR5cGVkZWYgVW5saW5rZWRJbnN0cnVjdGlvbiBJ
bnN0cnVjdGlvbjsKQEAgLTM5Nyw2ICs0MDEsMTMgQEAgcHVibGljOgogCiAgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIGxp
dmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2spCisgICAgeworICAgICAgICBpZiAo
bV9saXZlbmVzcykKKyAgICAgICAgICAgIHJldHVybiAqbV9saXZlbmVzczsKKyAgICAgICAgcmV0
dXJuIGxpdmVuZXNzQW5hbHlzaXNTbG93KGNvZGVCbG9jayk7CisgICAgfQorCiBwcm90ZWN0ZWQ6
CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1cmUqLCBDb2RlVHlwZSwgY29uc3Qg
RXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOwogICAgIH5VbmxpbmtlZENvZGVCbG9jaygp
OwpAQCAtNDA4LDcgKzQxOSw3IEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQg
Y2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKLSAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVj
b2RlUmV3cml0ZXImKTsKKyAgICB2b2lkIGFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0
ZXImLCBVbnBhY2tlZEluc3RydWN0aW9ucyYpOwogCiAgICAgdm9pZCBjcmVhdGVSYXJlRGF0YUlm
TmVjZXNzYXJ5KCkKICAgICB7CkBAIC00MTksMTAgKzQzMCwxMiBAQCBwcml2YXRlOgogICAgIH0K
IAogICAgIHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBFeHByZXNzaW9uUmFuZ2VJbmZvJiwg
dW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNvbnN0OworICAgIEJ5dGVjb2RlTGl2
ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3coQ29kZUJsb2NrKik7CiAKICAgICBp
bnQgbV9udW1QYXJhbWV0ZXJzOwogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVzczsKIAogICAgIFZpcnR1YWxSZWdp
c3RlciBtX3RoaXNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgbV9zY29wZVJlZ2lzdGVy
OwpAQCAtNDQ4LDYgKzQ2MSw3IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9saW5lQ291bnQ7
CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKKyAgICBMb2NrIG1fbG9jazsKICAgICBUcmlT
dGF0ZSBtX2RpZE9wdGltaXplOwogICAgIFNvdXJjZVBhcnNlTW9kZSBtX3BhcnNlTW9kZTsKICAg
ICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4Niw3ICsxMDg2LDcgQEAgRnVs
bEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0ZvcgogICAgICAgICByZXR1cm4gKml0
ZXItPnZhbHVlOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0cjxGdWxsQnl0ZWNvZGVMaXZlbmVz
cz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bGxCeXRlY29kZUxpdmVuZXNzPigpOwot
ICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNvbXB1dGVGdWxsTGl2ZW5lc3MoKmxp
dmVuZXNzKTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlRnVsbExp
dmVuZXNzKGNvZGVCbG9jaywgKmxpdmVuZXNzKTsKICAgICBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYg
cmVzdWx0ID0gKmxpdmVuZXNzOwogICAgIG1fYnl0ZWNvZGVMaXZlbmVzcy5hZGQoY29kZUJsb2Nr
LCBXVEZNb3ZlKGxpdmVuZXNzKSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTExMDQsNyArMTEw
NCw3IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0ZvcihDb2RlQmxvY2sKICAgICAgICAg
cmV0dXJuICppdGVyLT52YWx1ZTsKICAgICAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVL
aWxscz4ga2lsbHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlS2lsbHM+KCk7Ci0gICAgY29k
ZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtpbGxzKCpraWxscyk7CisgICAgY29k
ZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtpbGxzKGNvZGVCbG9jaywgKmtpbGxz
KTsKICAgICBCeXRlY29kZUtpbGxzJiByZXN1bHQgPSAqa2lsbHM7CiAgICAgbV9ieXRlY29kZUtp
bGxzLmFkZChjb2RlQmxvY2ssIFdURk1vdmUoa2lsbHMpKTsKICAgICByZXR1cm4gcmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCShyZXZpc2lvbiAyMjM5NTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC02OTcsNyArNjk3LDggQEAgdm9pZCBQbGFuOjpjbGVhbk11c3RIYW5kbGVWYWx1ZXNJZk5l
Y2VzcwogICAgIGlmICghbXVzdEhhbmRsZVZhbHVlcy5udW1iZXJPZkxvY2FscygpKQogICAgICAg
ICByZXR1cm47CiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlbmVzcyA9IGNvZGVCbG9jay0+
YWx0ZXJuYXRpdmUoKS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAgICBDb2RlQmxvY2sqIGFsdGVybmF0
aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZW5l
c3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygpLmdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0ZWNvZGVJbmRleCk7CiAgICAgCiAg
ICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVWYWx1ZXMubnVtYmVyT2ZMb2NhbHMo
KTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVzc1tsb2NhbF0pCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgICAgICAvLyBJbnN0ZWFk
LCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUgb2Zmc2V0IHRoYXQgaXMgcmVhY2hh
YmxlLCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBpbGUgY29kZSBmcm9tIHRoYXQgYnl0ZWNvZGUg
b2Zmc2V0IG9ud2FyZHMuCiAKLSAgICAgICAgICAgIEJ5dGVjb2RlR3JhcGg8Q29kZUJsb2NrPiBn
cmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOworICAgICAgICAgICAgQnl0ZWNvZGVH
cmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOwogICAgICAgICAgICAgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVP
ZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7CiAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChibG9jayk7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325214</attachid>
            <date>2017-10-27 16:16:10 -0700</date>
            <delta_ts>2017-10-27 16:55:14 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>42437</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTEwLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJ5dGVjb2RlIGxpdmVuZXNzIHNob3VsZCBsaXZlIG9uIFVubGlua2VkQ29kZUJsb2NrIHNvIGl0
IGNhbiBiZSBzaGFyZWQgYW1vbmdzdCBDb2RlQmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3JlcyBCeXRlY29kZUxpdmVu
ZXNzIG9uIFVubGlua2VkQ29kZUJsb2NrIGluc3RlYWQgb2YgQ29kZUJsb2NrCisgICAgICAgIHNv
IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2ZW5lc3MgZm9yIHRoZSBzYW1lIFVu
bGlua2VkQ29kZUJsb2NrCisgICAgICAgIG1vcmUgdGhhbiBvbmNlLiBUbyBkbyB0aGlzLCB0aGlz
IHBhdGNoIHNvbGlkaWZpZXMgdGhlIGludmFyaWFudCB0aGF0IENvZGVCbG9jaworICAgICAgICBs
aW5raW5nIGNhbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgb2Yg
bGl2ZW5lc3MuIEZvciBleGFtcGxlLAorICAgICAgICBpdCBjYW4ndCBpbnRyb2R1Y2UgbmV3IGxv
Y2Fscy4gVGhpcyBpbnZhcmlhbnQgd2FzIG1ldCBteSBKU0MgYmVmb3JlLCBiZWNhdXNlIHdlCisg
ICAgICAgIGRpZG4ndCBkbyBhbnl0aGluZyBpbiBieXRlY29kZSBsaW5raW5nIHRoYXQgd291bGQg
Y2hhbmdlIGxpdmVuZXNzLiBIb3dldmVyLCBpdCBpcworICAgICAgICBub3cgYSBjb3JyZWN0bmVz
cyByZXF1aXJlbWVudCB0aGF0IHdlIGRvbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdl
IHRoZQorICAgICAgICByZXN1bHQgb2YgcnVubmluZyBsaXZlbmVzcy4gVG8gc3VwcG9ydCB0aGlz
IGNoYW5nZSwgSSd2ZSByZWZhY3RvcmVkIEJ5dGVjb2RlR3JhcGgKKyAgICAgICAgdG8gbm90IGJl
IHRpZWQgdG8gYSBDb2RlQmxvY2tUeXBlKi4gVGhpbmdzIHRoYXQgcGVyZm9ybSBsaXZlbmVzcyB3
aWxsIHBhc3MgaW4KKyAgICAgICAgQ29kZUJsb2NrVHlwZSogYW5kIHRoZSBpbnN0cnVjdGlvbiBz
dHJlYW0gYXMgbmVlZGVkLiBUaGlzIG1lYW5zIHRoYXQgd2UgbWF5CisgICAgICAgIGNvbXB1dGUg
bGl2ZW5lc3Mgd2l0aCBvbmUgQ29kZUJsb2NrKidzIGluc3RydWN0aW9uIHN0cmVhbSwgYW5kIHRo
ZW4gcGVyZm9ybQorICAgICAgICBxdWVyaWVzIG9uIHRoYXQgYW5hbHlzaXMgd2l0aCBhIGRpZmZl
cmVudCBDb2RlQmxvY2sqJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCisgICAgICAgIFRoaXMgc2Vl
bXMgdG8gYmUgYSAyJSBKU0JlbmNoIHByb2dyZXNzaW9uLgorCisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Z3JhcGgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdlbmVyYXRvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHcmFwaC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdyYXBoOjpCeXRlY29kZUdy
YXBoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6Y29kZUJsb2NrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6aW5zdHJ1Y3Rpb25zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVjb2RlR3JhcGgpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1
bkxpdmVuZXNzRml4cG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZVJld3JpdGVyOjphcHBseU1vZGlmaWNhdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZVJld3JpdGVyOjphZGp1c3RKdW1wVGFyZ2V0c0luRnJhZ21lbnQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0
ZXI6OnJlbW92ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVSZXdyaXRlcjo6Z3Jh
cGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2
ZW5lc3NBbmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGl2ZW5l
c3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpraWxs
c0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKwogMjAx
Ny0xMC0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IHVwZGF0ZSBhcmJpdHJhcnkgbGltaXRzIHRvIHdoYXQgYnJvd3NlcnMgdXNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmlj
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBW
ZWN0b3I8WWllbGREYXRhPiBZaWVsZHM7CiAKICAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9jazo6VW5wYWNr
ZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1l
U3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCi0gICAgICAg
IDogbV9ncmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucykKKyAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQorICAg
ICAgICAsIG1fZ3JhcGgobV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKQogICAgICAgICAsIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSgqY29kZUJsb2NrLT52bSgpLCBnZW5lcmF0b3JGcmFt
ZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4
KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAgICB7CiAgICAgICAgIGZvciAoQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgOiBibG9jay0+b2Zmc2V0cygpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSAmbV9ncmFwaC5pbnN0cnVjdGlvbnMo
KVtieXRlY29kZU9mZnNldF07CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVj
dGlvbiogcGMgPSAmaW5zdHJ1Y3Rpb25zW2J5dGVjb2RlT2Zmc2V0XTsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHBjLT51Lm9wY29kZSkgewogICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW50ZXI6
IHsKICAgICAgICAgICAgICAgICAgICAgbV9lbnRlclBvaW50ID0gYnl0ZWNvZGVPZmZzZXQ7CkBA
IC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCk7CiAKLSAgICBCeXRlY29k
ZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9Cisg
ICAgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAKICAgICBjb25z
dCBZaWVsZHMmIHlpZWxkcygpIGNvbnN0CiAgICAgewpAQCAtMTIxLDEwICsxMjMsOSBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxTdG9yYWdlPiBzdG9yYWdlID0gbV9zdG9y
YWdlc1tpbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2U7CiAKLSAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IGNvZGVCbG9jay0+bnVtYmVy
T2ZJZGVudGlmaWVycygpOwotICAgICAgICBjb2RlQmxvY2stPmFkZElkZW50aWZpZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVy
KGlkZW50aWZpZXIpOwogICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCA9IG1fZ2VuZXJh
dG9yRnJhbWVTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nh
cnkpOwogICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdO
ZWNlc3NhcnksIGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChz
Y29wZU9mZnNldCkpKTsKIApAQCAtMTM4LDcgKzEzOSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgbV9lbnRlclBvaW50IHsgMCB9OwotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5r
ZWRDb2RlQmxvY2s+IG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVj
dGlvbnM7CisgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxzdGQ6Om9wdGlv
bmFsPFN0b3JhZ2U+PiBtX3N0b3JhZ2VzOwogICAgIFlpZWxkcyBtX3lpZWxkczsKICAgICBTdHJv
bmc8U3ltYm9sVGFibGU+IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZTsKQEAgLTE1MiwxNSAr
MTU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBydW4oKQorICAgIHZv
aWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgIHsKICAgICAgICAgLy8gUGVy
Zm9ybSBtb2RpZmllZCBsaXZlbmVzcyBhbmFseXNpcyB0byBkZXRlcm1pbmUgd2hpY2ggbG9jYWxz
IGFyZSBsaXZlIGF0IHRoZSBtZXJnZSBwb2ludHMuCiAgICAgICAgIC8vIFRoaXMgcHJvZHVjZXMg
dGhlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGZvciB0aGUgcXVlc3Rpb24sICJ3aGljaCB2YXJpYWJs
ZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCByZXN1bWVkPyIuCiAKLSAgICAgICAgcnVuTGl2ZW5lc3NG
aXhwb2ludChtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpKTsKKyAgICAgICAgcnVuTGl2ZW5l
c3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24u
Z3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlm
aWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRhdGEu
cG9pbnQgKyBvcGNvZGVMZW5ndGgob3BfeWllbGQpKTsKKyAgICAgICAgICAgIGRhdGEubGl2ZW5l
c3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBkYXRhLnBvaW50ICsgb3Bjb2RlTGVu
Z3RoKG9wX3lpZWxkKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTczLDE4ICsxNzYsMTcgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6cnVuKCkKIAogICAgIHsKICAgICAgICAg
R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpcyBwYXNzKCp0aGlzKTsKLSAgICAgICAgcGFzcy5ydW4o
KTsKKyAgICAgICAgcGFzcy5ydW4obV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsKICAgICB9
CiAKLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2so
KTsKLSAgICBCeXRlY29kZVJld3JpdGVyIHJld3JpdGVyKG1fZ3JhcGgpOworICAgIEJ5dGVjb2Rl
UmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCwgbV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsK
IAogICAgIC8vIFNldHVwIHRoZSBnbG9iYWwgc3dpdGNoIGZvciB0aGUgZ2VuZXJhdG9yLgogICAg
IHsKICAgICAgICAgdW5zaWduZWQgbmV4dFRvRW50ZXJQb2ludCA9IGVudGVyUG9pbnQoKSArIG9w
Y29kZUxlbmd0aChvcF9lbnRlcik7Ci0gICAgICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXgg
PSBtX2dyYXBoLmNvZGVCbG9jaygpLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKKyAgICAg
ICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3aXRj
aEp1bXBUYWJsZXMoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3JGdW5jdGlv
bjo6R2VuZXJhdG9yQXJndW1lbnQ6OlN0YXRlKSk7Ci0gICAgICAgIGF1dG8mIGp1bXBUYWJsZSA9
IG1fZ3JhcGguY29kZUJsb2NrKCktPmFkZFN3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBhdXRv
JiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAg
IGp1bXBUYWJsZS5taW4gPSAwOwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emUobV95aWVsZHMuc2l6ZSgpICsgMSk7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRz
LmZpbGwoMCk7CkBAIC0yMjcsNyArMjI5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNh
dGlvbjo6cnVuKCkKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlIHN0
b3JhZ2UgPSBzdG9yYWdlRm9yR2VuZXJhdG9yTG9jYWwoaW5kZXgpOwogCi0gICAgICAgICAgICAg
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGNvZGVCbG9jay0+YWRkVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IG1f
Y29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoKTsKICAgICAgICAgICAgICAgICBmcmFnbWVudC5h
cHBlbmRJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgb3BfZ2V0X2Zyb21fc2NvcGUs
CiAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCksIC8vIGRzdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZpc2lv
biAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+CiBj
bGFzcyBCeXRlY29kZUdyYXBoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdyYXBoKTsKIHB1YmxpYzoKLSAgICB0eXBlZGVm
IEJsb2NrIENvZGVCbG9jazsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJsb2NrOjpJbnN0cnVjdGlv
biBJbnN0cnVjdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPj4gQmFzaWNCbG9ja3NWZWN0b3I7CiAKLSAgICB0eXBlZGVmIFdURjo6SW5k
ZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg8QmxvY2s+PiBpdGVyYXRvcjsKKyAg
ICB0eXBlZGVmIFdURjo6SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg+IGl0
ZXJhdG9yOwogCi0gICAgaW5saW5lIEJ5dGVjb2RlR3JhcGgoQmxvY2sqLCB0eXBlbmFtZSBCbG9j
azo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmKTsKLQotICAgIEJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotCi0gICAgdHlwZW5hbWUgQmxvY2s6OlVucGFja2Vk
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIGlubGluZSBCeXRlY29k
ZUdyYXBoKENvZGVCbG9ja1R5cGUqLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZElu
c3RydWN0aW9ucyYpOwogCiAgICAgV1RGOjpJdGVyYXRvclJhbmdlPEJhc2ljQmxvY2tzVmVjdG9y
OjpyZXZlcnNlX2l0ZXJhdG9yPiBiYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkKICAgICB7CkBA
IC0xMDYsMTkgKzEwMCwxNCBAQCBwdWJsaWM6CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBsYXN0
KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KIAogcHJpdmF0ZToKLSAgICBCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQmFzaWNCbG9ja3NWZWN0b3IgbV9iYXNpY0Jsb2NrczsKLSAgICB0eXBl
bmFtZSBCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmIG1faW5zdHJ1Y3Rpb25zOwogfTsKIAog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLUJ5dGVjb2RlR3JhcGg8QmxvY2s+OjpCeXRlY29k
ZUdyYXBoKEJsb2NrKiBjb2RlQmxvY2ssIHR5cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwg
bV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK0J5dGVjb2RlR3JhcGg6OkJ5dGVjb2RlR3JhcGgoQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1
Y3Rpb25zKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgQnl0ZWNvZGVCYXNpY0Js
b2NrOjpjb21wdXRlKG1fY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rp
b25zLnNpemUoKSwgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21w
dXRlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXplKCks
IG1fYmFzaWNCbG9ja3MpOwogICAgIEFTU0VSVChtX2Jhc2ljQmxvY2tzLnNpemUoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNDAgKzQwLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSkKIHsKLSAgICBjb21wdXRlKCk7CisgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ss
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgpOworCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQorICAgICAgICBkdW1wUmVzdWx0cyhjb2Rl
QmxvY2spOwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3Rv
ciYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5
QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgcmVzdWx0
LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVz
c0ZvckJ5dGVjb2RlT2Zmc2V0KG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVzdWx0
KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCByZXN1bHQpOwogfQogCi1ib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFuZElz
TGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQotewotICAgIGlmIChvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKLSAgICBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShyZXN1bHQsIG9wZXJhbmQpOwotfQotCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVC
bG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBGYXN0Qml0
VmVjdG9yIG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0LCBvdXQpOworICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJs
b2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi12b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVG
dWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBy
ZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIAorCiAgICAgcmVzdWx0Lm1fbWFwLnJlc2l6
ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCiAgICAgZm9yIChzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiYgYmxvY2sgOiBtX2dyYXBoLmJhc2ljQmxv
Y2tzSW5SZXZlcnNlT3JkZXIoKSkgewpAQCAtODQsMTcgKzc3LDE3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVzdWx0
Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyhCeXRlY29kZUtpbGxzJiBy
ZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUtpbGxzKENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUtpbGxzJiByZXN1bHQpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHJlc3VsdCk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOworCiAgICAgcmVzdWx0Lm1fY29kZUJs
b2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC5tX2tpbGxTZXRzID0gc3RkOjptYWtlX3VuaXF1
ZTxCeXRlY29kZUtpbGxzOjpLaWxsU2V0W10+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKICAgICAKQEAgLTEwNyw3ICsxMDAsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVP
ZmZzZXQsCiAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgogICAgICAgICAgICAgICAgICAgICBpZiAo
b3V0W2luZGV4XSkKQEAgLTEyMyw5ICsxMTYsOCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoKQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICBkYXRhTG9nKCJcbkR1bXBpbmcgYnl0ZWNvZGUgbGl2
ZW5lc3MgZm9yICIsICpjb2RlQmxvY2ssICI6XG4iKTsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5z
aWduZWQgaSA9IDA7CkBAIC0xNzgsNyArMTcwLDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmR1bXBSZXN1bAogICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAKICAgICAg
ICAgICAgIGRhdGFMb2dGKCJMaXZlIHZhcmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRW
ZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xOTUsMTIg
KzE4Nyw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWwKICAgICB9
CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKLXsKLSAgICBy
dW5MaXZlbmVzc0ZpeHBvaW50KG1fZ3JhcGgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBCeXRl
Y29kZUxpdmVuZXNzUmVzdWx0cygpKQotICAgICAgICBkdW1wUmVzdWx0cygpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDIyMzk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIGNsYXNzIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHJvdGVj
dGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVj
dGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0
ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiwg
Y29uc3QgRGVmRnVuY3RvciYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQg
c3RlcE92ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiBvdXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5
cGVuYW1lIEluc3RydWN0aW9ucz4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBH
cmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9y
JiByZXN1bHQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBy
ZXN1bHQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IGJvb2wgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCbG9jayhHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayopOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBHcmFwaD4gRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KEdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gRmFzdEJpdFZl
Y3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2lu
dChHcmFwaCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJik7CiB9OwogCiBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMgOiBwcml2YXRlIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7
CkBAIC01NywxOSArNTcsMTcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9j
ayopOwogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9w
ZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBGYXN0Qml0VmVjdG9yIGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgCi0gICAgdm9pZCBjb21wdXRlRnVsbExp
dmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwotICAgIHZvaWQgY29tcHV0ZUtp
bGxzKEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNz
KENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOworICAgIHZvaWQgY29t
cHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CiAKIHByaXZhdGU6
Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBkdW1wUmVzdWx0cygpOworICAgIHZvaWQg
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAg
ICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8
Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKIGlu
bGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNl
L2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNs
dWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgotdGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
R3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYg
dXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1l
IERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0
ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikK
IHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2
ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAg
Ly8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3Nh
cnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQpAQCAtNzksMjEgKzc5
LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAvLyB1
c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVh
ciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdlJ2QKICAgICAvLyBmaXJzdCBhZGQgaXQg
dG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhlIGRl
ZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFwaC5jb2RlQmxvY2soKTsKLSAgICBhdXRv
KiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKICAgICBhdXRv
KiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoKmluc3RydWN0aW9u
KTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVCbG9j
aywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpD
b2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9w
ZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5kKSB7CiAg
ICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkpCiAgICAg
ICAgICAgICAgICAgZGVmKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkpOwogICAg
ICAgICB9KTsKIAogICAgIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNv
ZGVCbG9jaywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdy
YXBoOjpDb2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwg
aW50IG9wZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5h
bWUgQ29kZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb25UeXBlKiwgT3Bjb2RlSUQsIGludCBvcGVyYW5k
KSB7CiAgICAgICAgICAgICBpZiAoaXNWYWxpZFJlZ2lzdGVyRm9yTGl2ZW5lc3Mob3BlcmFuZCkp
CiAgICAgICAgICAgICAgICAgdXNlKFZpcnR1YWxSZWdpc3RlcihvcGVyYW5kKS50b0xvY2FsKCkp
OwogICAgICAgICB9KTsKQEAgLTEwNywxMSArMTA2LDExIEBAIGlubGluZSB2b2lkIEJ5dGVjb2Rl
TGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICB9CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBo
PgotaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpzdGVwT3Zlckluc3Ry
dWN0aW9uKEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0
b3ImIG91dCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3Ry
dWN0aW9ucz4KK2lubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92
ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9u
cyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVP
ZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCkKIHsKICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAot
ICAgICAgICBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCisgICAgICAgIGNvZGVCbG9jaywgaW5zdHJ1
Y3Rpb25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsCiAgICAgICAgIFsmXSAodW5zaWduZWQgYml0
SW5kZXgpIHsKICAgICAgICAgICAgIC8vIFRoaXMgaXMgdGhlIHVzZSBmdW5jdG9yLCBzbyB3ZSBz
ZXQgdGhlIGJpdC4KICAgICAgICAgICAgIG91dFtiaXRJbmRleF0gPSB0cnVlOwpAQCAtMTIyLDgg
KzEyMSw4IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAg
ICAgfSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoPgotaW5saW5lIGJvb2wgQnl0ZWNv
ZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zm
c2V0KEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgdGFy
Z2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2Rl
QmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUgYm9vbCBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQo
Q29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9u
cywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIHVuc2ln
bmVkIHRhcmdldE9mZnNldCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQogewogICAgIEFTU0VSVCgh
YmxvY2stPmlzRXhpdEJsb2NrKCkpOwogICAgIEFTU0VSVCghYmxvY2stPmlzRW50cnlCbG9jaygp
KTsKQEAgLTEzNCwyMiArMTMzLDIyIEBAIGlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9w
YWdhdGlvbjoKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQgPSBibG9jay0+b2Zmc2V0
cygpW2ldOwogICAgICAgICBpZiAodGFyZ2V0T2Zmc2V0ID4gYnl0ZWNvZGVPZmZzZXQpCiAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihncmFwaCwgYnl0ZWNv
ZGVPZmZzZXQsIG91dCk7CisgICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oY29kZUJsb2NrLCBp
bnN0cnVjdGlvbnMsIGdyYXBoLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICB9CiAKICAgICBy
ZXR1cm4gcmVzdWx0LnNldEFuZENoZWNrKG91dCk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdy
YXBoPgotaW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpjb21wdXRlTG9j
YWxMaXZlbmVzc0ZvckJsb2NrKEdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9j
aykKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9u
cz4KK2lubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCbG9jayhDb2RlQmxvY2tUeXBlKiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdyYXBoJiBncmFwaCwgQnl0ZWNvZGVCYXNpY0Js
b2NrKiBibG9jaykKIHsKICAgICBpZiAoYmxvY2stPmlzRXhpdEJsb2NrKCkgfHwgYmxvY2stPmlz
RW50cnlCbG9jaygpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGNvbXB1dGVM
b2NhbExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoZ3JhcGgsIGJsb2NrLCBibG9jay0+bGVhZGVy
T2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKKyAgICByZXR1cm4gY29tcHV0ZUxvY2FsTGl2ZW5lc3NG
b3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLCBi
bG9jay0+bGVhZGVyT2Zmc2V0KCksIGJsb2NrLT5pbigpKTsKIH0KIAotdGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGg+Ci1pbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoR3JhcGgmIGdyYXBoLCB1bnNpZ25l
ZCBieXRlY29kZU9mZnNldCkKK3RlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVu
YW1lIEluc3RydWN0aW9ucz4KK2lubGluZSBGYXN0Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NQ
cm9wYWdhdGlvbjo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2tUeXBl
KiBjb2RlQmxvY2ssIGNvbnN0IEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zLCBCeXRlY29kZUdy
YXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpCiB7CiAgICAgQnl0ZWNvZGVCYXNp
Y0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRCYXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQoYnl0
ZWNvZGVPZmZzZXQpOwogICAgIEFTU0VSVChibG9jayk7CkBAIC0xNTcsMTQgKzE1NiwxMyBAQCBp
bmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvCiAgICAgQVNTRVJUKCFibG9j
ay0+aXNFeGl0QmxvY2soKSk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7CiAgICAgb3V0LnJlc2l6
ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5
dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CisgICAgY29t
cHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGluc3RydWN0aW9u
cywgZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0Owog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6cnVuTGl2ZW5lc3NGaXhwb2ludChHcmFwaCYgZ3JhcGgpCit0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+CitpbmxpbmUg
dm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1bkxpdmVuZXNzRml4cG9pbnQoQ29k
ZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywg
Qnl0ZWNvZGVHcmFwaCYgZ3JhcGgpCiB7Ci0gICAgYXV0byogY29kZUJsb2NrID0gZ3JhcGguY29k
ZUJsb2NrKCk7CiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYXJpYWJsZXMgPSBjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpOwogICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IGdy
YXBoKSB7CiAgICAgICAgIGJsb2NrLT5pbigpLnJlc2l6ZShudW1iZXJPZlZhcmlhYmxlcyk7CkBA
IC0xODYsNyArMTg0LDcgQEAgaW5saW5lIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9u
OgogICAgICAgICAgICAgZm9yIChCeXRlY29kZUJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JzKCkpCiAgICAgICAgICAgICAgICAgbmV3T3V0IHw9IHN1Y2Nlc3Nvci0+aW4o
KTsKICAgICAgICAgICAgIGJsb2NrLT5vdXQoKSA9IG5ld091dDsKLSAgICAgICAgICAgIGNoYW5n
ZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhncmFwaCwgYmxvY2suZ2V0KCkpOwor
ICAgICAgICAgICAgY2hhbmdlZCB8PSBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKGNvZGVC
bG9jaywgaW5zdHJ1Y3Rpb25zLCBncmFwaCwgYmxvY2suZ2V0KCkpOwogICAgICAgICB9CiAgICAg
fSB3aGlsZSAoY2hhbmdlZCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM4LDEzICszOCwxMyBAQCB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFwcGx5
TW9kaWZpY2F0aW9uCiAgICAgZm9yIChzaXplX3QgaW5zZXJ0aW9uSW5kZXggPSBtX2luc2VydGlv
bnMuc2l6ZSgpOyBpbnNlcnRpb25JbmRleC0tOykgewogICAgICAgICBJbnNlcnRpb24mIGluc2Vy
dGlvbiA9IG1faW5zZXJ0aW9uc1tpbnNlcnRpb25JbmRleF07CiAgICAgICAgIGlmIChpbnNlcnRp
b24udHlwZSA9PSBJbnNlcnRpb246OlR5cGU6OlJlbW92ZSkKLSAgICAgICAgICAgIG1fZ3JhcGgu
aW5zdHJ1Y3Rpb25zKCkucmVtb3ZlKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5z
ZXJ0aW9uLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIG1faW5zdHJ1Y3Rpb25zLnJlbW92ZShpbnNl
cnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2VydGlvbi5sZW5ndGgoKSk7CiAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgaWYgKGluc2VydGlvbi5pbmNsdWRlQnJhbmNoID09IEluY2x1
ZGVCcmFuY2g6OlllcykgewogICAgICAgICAgICAgICAgIGludCBmaW5hbE9mZnNldCA9IGluc2Vy
dGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCArIGNhbGN1bGF0ZURpZmZlcmVuY2UobV9pbnNlcnRp
b25zLmJlZ2luKCksIG1faW5zZXJ0aW9ucy5iZWdpbigpICsgaW5zZXJ0aW9uSW5kZXgpOwogICAg
ICAgICAgICAgICAgIGFkanVzdEp1bXBUYXJnZXRzSW5GcmFnbWVudChmaW5hbE9mZnNldCwgaW5z
ZXJ0aW9uKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1fZ3JhcGguaW5zdHJ1Y3Rpb25z
KCkuaW5zZXJ0VmVjdG9yKGluc2VydGlvbi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0aW9u
Lmluc3RydWN0aW9ucyk7CisgICAgICAgICAgICBtX2luc3RydWN0aW9ucy5pbnNlcnRWZWN0b3Io
aW5zZXJ0aW9uLmluZGV4LmJ5dGVjb2RlT2Zmc2V0LCBpbnNlcnRpb24uaW5zdHJ1Y3Rpb25zKTsK
ICAgICAgICAgfQogICAgIH0KICAgICBtX2luc2VydGlvbnMuY2xlYXIoKTsKQEAgLTU2LDggKzU2
LDcgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjpleGVjdXRlKCkKICAgICAgICAgcmV0dXJuIGxo
cy5pbmRleCA8IHJocy5pbmRleDsKICAgICB9KTsKIAotICAgIFVubGlua2VkQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIGNvZGVCbG9jay0+YXBwbHlNb2Rp
ZmljYXRpb24oKnRoaXMpOworICAgIG1fY29kZUJsb2NrLT5hcHBseU1vZGlmaWNhdGlvbigqdGhp
cywgbV9pbnN0cnVjdGlvbnMpOwogfQogCiB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFkanVzdEp1
bXBUYXJnZXRzSW5GcmFnbWVudCh1bnNpZ25lZCBmaW5hbE9mZnNldCwgSW5zZXJ0aW9uJiBpbnNl
cnRpb24pCkBAIC02OSw4ICs2OCw3IEBAIHZvaWQgQnl0ZWNvZGVSZXdyaXRlcjo6YWRqdXN0SnVt
cFRhcmdldHMKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnN0cnVjdGlvbi51Lm9wY29k
ZTsKICAgICAgICAgaWYgKGlzQnJhbmNoKG9wY29kZUlEKSkgewogICAgICAgICAgICAgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQgPSBmaW5hbE9mZnNldCArIGZyYWdtZW50T2Zmc2V0OwotICAgICAg
ICAgICAgVW5saW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7
Ci0gICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29kZU9mZnNldChj
b2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFnbWVudE9mZnNldCwgWyZdKGludDMyX3Qm
IGxhYmVsKSB7CisgICAgICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdldHNGb3JCeXRlY29k
ZU9mZnNldChtX2NvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zQmVnaW4sIGZyYWdtZW50T2Zmc2V0LCBb
Jl0oaW50MzJfdCYgbGFiZWwpIHsKICAgICAgICAgICAgICAgICBpbnQgYWJzb2x1dGVPZmZzZXQg
PSBhZGp1c3RBYnNvbHV0ZU9mZnNldChsYWJlbCk7CiAgICAgICAgICAgICAgICAgbGFiZWwgPSBh
YnNvbHV0ZU9mZnNldCAtIHN0YXRpY19jYXN0PGludD4oYnl0ZWNvZGVPZmZzZXQpOwogICAgICAg
ICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVS
ZXdyaXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZVJld3JpdGVyLmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVJld3JpdGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2MSw4
ICsxNjEsMTAgQEAgcHVibGljOgogICAgICAgICBJbmNsdWRlQnJhbmNoJiBtX2luY2x1ZGVCcmFu
Y2g7CiAgICAgfTsKIAotICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFwaDxVbmxpbmtl
ZENvZGVCbG9jaz4mIGdyYXBoKQorICAgIEJ5dGVjb2RlUmV3cml0ZXIoQnl0ZWNvZGVHcmFwaCYg
Z3JhcGgsIFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgICAgICA6IG1fZ3JhcGgoZ3Jh
cGgpCisgICAgICAgICwgbV9jb2RlQmxvY2soY29kZUJsb2NrKQorICAgICAgICAsIG1faW5zdHJ1
Y3Rpb25zKGluc3RydWN0aW9ucykKICAgICB7CiAgICAgfQogCkBAIC0xODgsMTIgKzE5MCwxMiBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHJlbW92ZUJ5dGVjb2RlKHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KQogICAgIHsKLSAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChJbnNlcnRpb24geyBJbnNl
cnRpb25Qb2ludChieXRlY29kZU9mZnNldCwgUG9zaXRpb246Ok9yaWdpbmFsQnl0ZWNvZGVQb2lu
dCksIEluc2VydGlvbjo6VHlwZTo6UmVtb3ZlLCBJbmNsdWRlQnJhbmNoOjpObywgb3Bjb2RlTGVu
Z3RoKG1fZ3JhcGguaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9
IH0pOworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKEluc2VydGlvbiB7IEluc2VydGlvblBv
aW50KGJ5dGVjb2RlT2Zmc2V0LCBQb3NpdGlvbjo6T3JpZ2luYWxCeXRlY29kZVBvaW50KSwgSW5z
ZXJ0aW9uOjpUeXBlOjpSZW1vdmUsIEluY2x1ZGVCcmFuY2g6Ok5vLCBvcGNvZGVMZW5ndGgobV9p
bnN0cnVjdGlvbnNbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSwgeyB9IH0pOwogICAgIH0KIAog
ICAgIHZvaWQgZXhlY3V0ZSgpOwogCi0gICAgQnl0ZWNvZGVHcmFwaDxVbmxpbmtlZENvZGVCbG9j
az4mIGdyYXBoKCkgeyByZXR1cm4gbV9ncmFwaDsgfQorICAgIEJ5dGVjb2RlR3JhcGgmIGdyYXBo
KCkgeyByZXR1cm4gbV9ncmFwaDsgfQogCiAgICAgaW50IGFkanVzdEFic29sdXRlT2Zmc2V0KGlu
dCBhYnNvbHV0ZU9mZnNldCkKICAgICB7CkBAIC0yMTUsNyArMjE3LDkgQEAgcHJpdmF0ZToKICAg
ICBpbnQgYWRqdXN0SnVtcFRhcmdldChJbnNlcnRpb25Qb2ludCBzdGFydFBvaW50LCBJbnNlcnRp
b25Qb2ludCBqdW1wVGFyZ2V0UG9pbnQpOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEl0ZXJhdG9y
PiBpbnQgY2FsY3VsYXRlRGlmZmVyZW5jZShJdGVyYXRvciBiZWdpbiwgSXRlcmF0b3IgZW5kKTsK
IAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBtX2dyYXBoOworICAgIEJ5
dGVjb2RlR3JhcGgmIG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVj
dGlvbnM7CiAgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOwogfTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTgsMTAgKzM5OCwxOSBAQCBDb2RlQmxvY2s6OkNvZGVC
bG9jayhWTSogdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0TnVtUGFyYW1ldGVycyh1bmxpbmtlZENv
ZGVCbG9jay0+bnVtUGFyYW1ldGVycygpKTsKIH0KIAorLy8gVGhlIG1haW4gcHVycG9zZSBvZiB0
aGlzIGZ1bmN0aW9uIGlzIHRvIGdlbmVyYXRlIGxpbmtlZCBieXRlY29kZSBmcm9tIHVubGlua2Vk
IGJ5dGVjb2RlLiBUaGUgcHJvY2VzcworLy8gb2YgbGlua2luZyBpcyB0YWtpbmcgYW4gYWJzdHJh
Y3QgcmVwcmVzZW50YXRpb24gb2YgYnl0ZWNvZGUgYW5kIHR5aW5nIGl0IHRvIGEgR2xvYmFsT2Jq
ZWN0IGFuZCBzY29wZQorLy8gY2hhaW4uIEZvciBleGFtcGxlLCB0aGlzIHByb2Nlc3MgYWxsb3dz
IHVzIHRvIGNhY2hlIHRoZSBkZXB0aCBvZiBsZXhpY2FsIGVudmlyb25tZW50IHJlYWRzIHRoYXQg
cmVhY2gKKy8vIG91dHNpZGUgb2YgdGhpcyBDb2RlQmxvY2sncyBjb21waWxhdGlvbiB1bml0LiBJ
dCBhbHNvIGFsbG93cyB1cyB0byBnZW5lcmF0ZSBwYXJ0aWN1bGFyIGNvbnN0YW50cyB0aGF0Cisv
LyB3ZSBjYW4ndCBnZW5lcmF0ZSBkdXJpbmcgdW5saW5rZWQgYnl0ZWNvZGUgZ2VuZXJhdGlvbi4g
VGhpcyBwcm9jZXNzIGlzIG5vdCBhbGxvd2VkIHRvIGdlbmVyYXRlIGNvbnRyb2wKKy8vIGZsb3cg
b3IgaW50cm9kdWNlIG5ldyBsb2NhbHMuIFRoZSByZWFzb24gZm9yIHRoaXMgaXMgd2UgcmVseSBv
biBsaXZlbmVzcyBhbmFseXNpcyB0byBiZSB0aGUgc2FtZSBmb3IKKy8vIGFsbCB0aGUgQ29kZUJs
b2NrcyBvZiBhbiBVbmxpbmtlZENvZGVCbG9jay4gV2UgcmVseSBvbiB0aGlzIGZhY3QgYnkgY2Fj
aGluZyB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMKKy8vIGluc2lkZSBVbmxpbmtlZENvZGVCbG9jay4K
IGJvb2wgQ29kZUJsb2NrOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIFNjcmlwdEV4ZWN1dGFibGUq
IG93bmVyRXhlY3V0YWJsZSwgVW5saW5rZWRDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2NrLAog
ICAgIEpTU2NvcGUqIHNjb3BlKQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKwog
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogCiAgICAgaWYg
KHZtLnR5cGVQcm9maWxlcigpIHx8IHZtLmNvbnRyb2xGbG93UHJvZmlsZXIoKSkKQEAgLTE3MTks
NyArMTcyOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjplbnN1cmVDYXRjaExpdmVuZXNzSXNDb20KICAg
ICAvLyBpcyBiZWNhdXNlIHRoZSB2YXJpYWJsZXMgdGhhdCB0aGUgb3BfY2F0Y2ggZGVmaW5lcyBt
aWdodCBiZSBkZWFkLCBhbmQKICAgICAvLyB3ZSBjYW4gYXZvaWQgcHJvZmlsaW5nIHRoZW0gYW5k
IGV4dHJhY3RpbmcgdGhlbSB3aGVuIGRvaW5nIE9TUiBlbnRyeQogICAgIC8vIGludG8gdGhlIERG
Ry4KLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVMb2NhbHMgPSBieXRlY29kZUxpdmVuZXNzLmdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQgKyBPUENPREVfTEVOR1RI
KG9wX2NhdGNoKSk7CisgICAgRmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZl
bmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KHRoaXMsIGJ5dGVjb2RlT2Zmc2V0
ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRjaCkpOwogICAgIFZlY3RvcjxWaXJ0dWFsUmVnaXN0ZXI+
IGxpdmVPcGVyYW5kczsKICAgICBsaXZlT3BlcmFuZHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShs
aXZlTG9jYWxzLmJpdENvdW50KCkpOwogICAgIGxpdmVMb2NhbHMuZm9yRWFjaFNldEJpdChbJl0g
KHVuc2lnbmVkIGxpdmVMb2NhbCkgewpAQCAtMjg1Miw3ICsyODYxLDcgQEAgdm9pZCBDb2RlQmxv
Y2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3Mo
dGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZm
ZWN0IENvZGVCbG9jayBmb290cHJpbnQuCiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBsaXZlQXRI
ZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCgwKTsKKyAgICBG
YXN0Qml0VmVjdG9yIGxpdmVBdEhlYWQgPSBsaXZlbmVzcy5nZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KHRoaXMsIDApOwogICAgIAogICAgIGlmIChsaXZlQXRIZWFkLm51bUJpdHMoKSAh
PSBzdGF0aWNfY2FzdDxzaXplX3Q+KG1fbnVtQ2FsbGVlTG9jYWxzKSkgewogICAgICAgICBiZWdp
blZhbGlkYXRpb25EaWRGYWlsKCk7CkBAIC0zMjI2LDE3ICszMjM1LDYgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBNYXRoSUNTdGF0cygpCiAjZW5kaWYKIH0KIAotQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzJiBDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KCkKLXsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBhbmFseXNpcyA9IHN0ZDo6bWFrZV91bmlx
dWU8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPih0aGlzKTsKLSAgICB7Ci0gICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgaWYgKCFtX2xpdmVuZXNzQW5h
bHlzaXMpCi0gICAgICAgICAgICBtX2xpdmVuZXNzQW5hbHlzaXMgPSBXVEZNb3ZlKGFuYWx5c2lz
KTsKLSAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzQW5hbHlzaXM7Ci0gICAgfQotfQotCiB2b2lk
IHNldFByaW50ZXIoUHJpbnRlcjo6UHJpbnRSZWNvcmQmIHJlY29yZCwgQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiB7CiAgICAgUHJpbnRlcjo6c2V0UHJpbnRlcihyZWNvcmQsIHRvQ1N0cmluZyhjb2Rl
QmxvY2spKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDYgKzExNSw5IEBAIGNsYXNzIENvZGVC
bG9jayA6IHB1YmxpYyBKU0NlbGwgewogICAgIH07CiAKIHB1YmxpYzoKKworICAgIHVzaW5nIElu
c3RydWN0aW9uVHlwZSA9IEluc3RydWN0aW9uOworCiAgICAgZW51bSBDb3B5UGFyc2VkQmxvY2tU
YWcgeyBDb3B5UGFyc2VkQmxvY2sgfTsKIAogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1
Y3R1cmVGbGFncyA9IEJhc2U6OlN0cnVjdHVyZUZsYWdzIHwgU3RydWN0dXJlSXNJbW1vcnRhbDsK
QEAgLTYwMCwxMiArNjAzLDcgQEAgcHVibGljOgogCiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzJiBsaXZlbmVzc0FuYWx5c2lzKCkKICAgICB7Ci0gICAgICAgIHsKLSAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIobV9sb2NrKTsKLSAgICAgICAgICAgIGlmICghIW1fbGl2
ZW5lc3NBbmFseXNpcykKLSAgICAgICAgICAgICAgICByZXR1cm4gKm1fbGl2ZW5lc3NBbmFseXNp
czsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coKTsKKyAg
ICAgICAgcmV0dXJuIG1fdW5saW5rZWRDb2RlLT5saXZlbmVzc0FuYWx5c2lzKHRoaXMpOwogICAg
IH0KICAgICAKICAgICB2b2lkIHZhbGlkYXRlKCk7CkBAIC0xMDYxLDggKzEwNTksNiBAQCBwcml2
YXRlOgogCiAgICAgc3RkOjpjaHJvbm86OnN0ZWFkeV9jbG9jazo6dGltZV9wb2ludCBtX2NyZWF0
aW9uVGltZTsKIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM+
IG1fbGl2ZW5lc3NBbmFseXNpczsKLQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSYXJlRGF0YT4gbV9y
YXJlRGF0YTsKIAogICAgIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgbV91bmNvbmRpdGlvbmFsRmlu
YWxpemVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29k
ZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VW5saW5rZWRDb2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCw2ICsyOCw3IEBACiAjaW5jbHVkZSAiVW5saW5rZWRDb2RlQmxvY2suaCIKIAogI2luY2x1
ZGUgIkJ5dGVjb2RlR2VuZXJhdG9yLmgiCisjaW5jbHVkZSAiQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzLmgiCiAjaW5jbHVkZSAiQnl0ZWNvZGVSZXdyaXRlci5oIgogI2luY2x1ZGUgIkNsYXNzSW5m
by5oIgogI2luY2x1ZGUgIkNvZGVDYWNoZS5oIgpAQCAtMzQwLDE1ICszNDEsMTQgQEAgVW5saW5r
ZWRIYW5kbGVySW5mbyogVW5saW5rZWRDb2RlQmxvY2s6OgogICAgIHJldHVybiBVbmxpbmtlZEhh
bmRsZXJJbmZvOjpoYW5kbGVyRm9ySW5kZXgobV9yYXJlRGF0YS0+bV9leGNlcHRpb25IYW5kbGVy
cywgaW5kZXgsIHJlcXVpcmVkSGFuZGxlcik7CiB9CiAKLXZvaWQgVW5saW5rZWRDb2RlQmxvY2s6
OmFwcGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImIHJld3JpdGVyKQordm9pZCBVbmxp
bmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3cml0
ZXIsIFVucGFja2VkSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMpCiB7CiAgICAgLy8gQmVmb3Jl
IGFwcGx5aW5nIHRoZSBjaGFuZ2VzLCB3ZSBhZGp1c3QgdGhlIGp1bXBzIGJhc2VkIG9uIHRoZSBv
cmlnaW5hbCBieXRlY29kZSBvZmZzZXQsIHRoZSBvZmZzZXQgdG8gdGhlIGp1bXAgdGFyZ2V0LCBh
bmQKICAgICAvLyB0aGUgaW5zZXJ0aW9uIGluZm9ybWF0aW9uLgogCi0gICAgQnl0ZWNvZGVHcmFw
aDxVbmxpbmtlZENvZGVCbG9jaz4mIGdyYXBoID0gcmV3cml0ZXIuZ3JhcGgoKTsKLSAgICBVbmxp
bmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygp
LmJlZ2luKCk7CisgICAgVW5saW5rZWRJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBp
bnN0cnVjdGlvbnMuYmVnaW4oKTsgLy8gT09QUzogbWFrZSB0aGlzIGFuIGFjY2Vzc29yIG9uIHJl
d3JpdGVyLgogCi0gICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVjdGlvbkNv
dW50ID0gZ3JhcGguaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpOyBieXRlY29kZU9mZnNldCA8IGluc3Ry
dWN0aW9uQ291bnQ7KSB7CisgICAgZm9yIChpbnQgYnl0ZWNvZGVPZmZzZXQgPSAwLCBpbnN0cnVj
dGlvbkNvdW50ID0gaW5zdHJ1Y3Rpb25zLnNpemUoKTsgYnl0ZWNvZGVPZmZzZXQgPCBpbnN0cnVj
dGlvbkNvdW50OykgewogICAgICAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBjdXJyZW50ID0gaW5z
dHJ1Y3Rpb25zQmVnaW4gKyBieXRlY29kZU9mZnNldDsKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2Rl
SUQgPSBjdXJyZW50WzBdLnUub3Bjb2RlOwogICAgICAgICBleHRyYWN0U3RvcmVkSnVtcFRhcmdl
dHNGb3JCeXRlY29kZU9mZnNldCh0aGlzLCBpbnN0cnVjdGlvbnNCZWdpbiwgYnl0ZWNvZGVPZmZz
ZXQsIFsmXShpbnQzMl90JiByZWxhdGl2ZU9mZnNldCkgewpAQCAtMzg3LDcgKzM4Nyw3IEBAIHZv
aWQgVW5saW5rZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW8KIAogICAgIC8vIEFuZCByZWNv
bXB1dGUgdGhlIGp1bXAgdGFyZ2V0IGJhc2VkIG9uIHRoZSBtb2RpZmllZCB1bmxpbmtlZCBpbnN0
cnVjdGlvbnMuCiAgICAgbV9qdW1wVGFyZ2V0cy5jbGVhcigpOwotICAgIHJlY29tcHV0ZVByZWNp
c2VKdW1wVGFyZ2V0cyh0aGlzLCBncmFwaC5pbnN0cnVjdGlvbnMoKS5iZWdpbigpLCBncmFwaC5p
bnN0cnVjdGlvbnMoKS5zaXplKCksIG1fanVtcFRhcmdldHMpOworICAgIHJlY29tcHV0ZVByZWNp
c2VKdW1wVGFyZ2V0cyh0aGlzLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rpb25zLnNp
emUoKSwgbV9qdW1wVGFyZ2V0cyk7CiB9CiAKIHZvaWQgVW5saW5rZWRDb2RlQmxvY2s6OnNocmlu
a1RvRml0KCkKQEAgLTQxOSw0ICs0MTksMjEgQEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6ZHVt
cChQcmludFN0cmVhbQogewogfQogCitCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMmIFVubGlua2Vk
Q29kZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVChjb2RlQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCkgPT0gdGhp
cyk7CisKKworICAgIHsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xvY2spOwor
ICAgICAgICBpZiAoIW1fbGl2ZW5lc3MpIHsKKyAgICAgICAgICAgIC8vIFRoZXJlIGlzIGEgY2hh
bmNlIHR3byBjb21waWxlciB0aHJlYWRzIHJhY2VkIHRvIHRoZSBzbG93IHBhdGguCisgICAgICAg
ICAgICAvLyBXZSBkZWZlbmQgYWdhaW5zdCBjb21wdXRpbmcgbGl2ZW5lc3MgdHdpY2UuCisgICAg
ICAgICAgICBtX2xpdmVuZXNzID0gc3RkOjptYWtlX3VuaXF1ZTxCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM+KGNvZGVCbG9jayk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgcmV0dXJuICpt
X2xpdmVuZXNzOworfQorCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5oCShyZXZpc2lvbiAy
MjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRDb2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsK
IAorY2xhc3MgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOwogY2xhc3MgQnl0ZWNvZGVSZXdyaXRl
cjsKK2NsYXNzIENvZGVCbG9jazsKIGNsYXNzIERlYnVnZ2VyOwogY2xhc3MgRnVuY3Rpb25FeGVj
dXRhYmxlOwogY2xhc3MgUGFyc2VyRXJyb3I7CkBAIC0xMTUsNiArMTE3LDggQEAgcHVibGljOgog
CiAgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CiAKKyAgICB1
c2luZyBJbnN0cnVjdGlvblR5cGUgPSBVbmxpbmtlZEluc3RydWN0aW9uOworCiAgICAgZW51bSB7
IENhbGxGdW5jdGlvbiwgQXBwbHlGdW5jdGlvbiB9OwogCiAgICAgdHlwZWRlZiBVbmxpbmtlZElu
c3RydWN0aW9uIEluc3RydWN0aW9uOwpAQCAtMzk3LDYgKzQwMSwxMyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIEJ5dGVjb2RlTGl2ZW5lc3NB
bmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpcyhDb2RlQmxvY2sqIGNvZGVCbG9jaykKKyAgICB7Cisg
ICAgICAgIGlmIChtX2xpdmVuZXNzKQorICAgICAgICAgICAgcmV0dXJuICptX2xpdmVuZXNzOwor
ICAgICAgICByZXR1cm4gbGl2ZW5lc3NBbmFseXNpc1Nsb3coY29kZUJsb2NrKTsKKyAgICB9CisK
IHByb3RlY3RlZDoKICAgICBVbmxpbmtlZENvZGVCbG9jayhWTSosIFN0cnVjdHVyZSosIENvZGVU
eXBlLCBjb25zdCBFeGVjdXRhYmxlSW5mbyYsIERlYnVnZ2VyTW9kZSk7CiAgICAgflVubGlua2Vk
Q29kZUJsb2NrKCk7CkBAIC00MDgsNyArNDE5LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgog
ICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZVJld3JpdGVyOwotICAgIHZvaWQgYXBwbHlNb2RpZmlj
YXRpb24oQnl0ZWNvZGVSZXdyaXRlciYpOworICAgIHZvaWQgYXBwbHlNb2RpZmljYXRpb24oQnl0
ZWNvZGVSZXdyaXRlciYsIFVucGFja2VkSW5zdHJ1Y3Rpb25zJik7CiAKICAgICB2b2lkIGNyZWF0
ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKQogICAgIHsKQEAgLTQxOSwxMCArNDMwLDEyIEBAIHByaXZh
dGU6CiAgICAgfQogCiAgICAgdm9pZCBnZXRMaW5lQW5kQ29sdW1uKGNvbnN0IEV4cHJlc3Npb25S
YW5nZUluZm8mLCB1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbikgY29uc3Q7CisgICAg
Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzJiBsaXZlbmVzc0FuYWx5c2lzU2xvdyhDb2RlQmxvY2sq
KTsKIAogICAgIGludCBtX251bVBhcmFtZXRlcnM7CiAKICAgICBzdGQ6OnVuaXF1ZV9wdHI8VW5s
aW5rZWRJbnN0cnVjdGlvblN0cmVhbT4gbV91bmxpbmtlZEluc3RydWN0aW9uczsKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzPiBtX2xpdmVuZXNzOwogCiAgICAg
VmlydHVhbFJlZ2lzdGVyIG1fdGhpc1JlZ2lzdGVyOwogICAgIFZpcnR1YWxSZWdpc3RlciBtX3Nj
b3BlUmVnaXN0ZXI7CkBAIC00NDgsNiArNDYxLDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBt
X2xpbmVDb3VudDsKICAgICB1bnNpZ25lZCBtX2VuZENvbHVtbjsKIAorICAgIExvY2sgbV9sb2Nr
OwogICAgIFRyaVN0YXRlIG1fZGlkT3B0aW1pemU7CiAgICAgU291cmNlUGFyc2VNb2RlIG1fcGFy
c2VNb2RlOwogICAgIENvZGVGZWF0dXJlcyBtX2ZlYXR1cmVzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDg2LDcgKzEw
ODYsNyBAQCBGdWxsQnl0ZWNvZGVMaXZlbmVzcyYgR3JhcGg6OmxpdmVuZXNzRm9yCiAgICAgICAg
IHJldHVybiAqaXRlci0+dmFsdWU7CiAgICAgCiAgICAgc3RkOjp1bmlxdWVfcHRyPEZ1bGxCeXRl
Y29kZUxpdmVuZXNzPiBsaXZlbmVzcyA9IHN0ZDo6bWFrZV91bmlxdWU8RnVsbEJ5dGVjb2RlTGl2
ZW5lc3M+KCk7Ci0gICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUZ1bGxM
aXZlbmVzcygqbGl2ZW5lc3MpOworICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNv
bXB1dGVGdWxsTGl2ZW5lc3MoY29kZUJsb2NrLCAqbGl2ZW5lc3MpOwogICAgIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzJiByZXN1bHQgPSAqbGl2ZW5lc3M7CiAgICAgbV9ieXRlY29kZUxpdmVuZXNzLmFk
ZChjb2RlQmxvY2ssIFdURk1vdmUobGl2ZW5lc3MpKTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAt
MTEwNCw3ICsxMTA0LDcgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKENvZGVCbG9j
awogICAgICAgICByZXR1cm4gKml0ZXItPnZhbHVlOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxCeXRlY29kZUtpbGxzPiBraWxscyA9IHN0ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVLaWxscz4o
KTsKLSAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlS2lsbHMoKmtpbGxz
KTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5hbHlzaXMoKS5jb21wdXRlS2lsbHMoY29kZUJs
b2NrLCAqa2lsbHMpOwogICAgIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCA9ICpraWxsczsKICAgICBt
X2J5dGVjb2RlS2lsbHMuYWRkKGNvZGVCbG9jaywgV1RGTW92ZShraWxscykpOwogICAgIHJldHVy
biByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTY5Nyw3ICs2OTcsOCBAQCB2b2lkIFBsYW46OmNsZWFuTXVzdEhhbmRs
ZVZhbHVlc0lmTmVjZXNzCiAgICAgaWYgKCFtdXN0SGFuZGxlVmFsdWVzLm51bWJlck9mTG9jYWxz
KCkpCiAgICAgICAgIHJldHVybjsKICAgICAKLSAgICBGYXN0Qml0VmVjdG9yIGxpdmVuZXNzID0g
Y29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldChvc3JFbnRyeUJ5dGVjb2RlSW5kZXgpOworICAgIENvZGVCbG9j
ayogYWx0ZXJuYXRpdmUgPSBjb2RlQmxvY2stPmFsdGVybmF0aXZlKCk7CisgICAgRmFzdEJpdFZl
Y3RvciBsaXZlbmVzcyA9IGFsdGVybmF0aXZlLT5saXZlbmVzc0FuYWx5c2lzKCkuZ2V0TGl2ZW5l
c3NJbmZvQXRCeXRlY29kZU9mZnNldChhbHRlcm5hdGl2ZSwgb3NyRW50cnlCeXRlY29kZUluZGV4
KTsKICAgICAKICAgICBmb3IgKHVuc2lnbmVkIGxvY2FsID0gbXVzdEhhbmRsZVZhbHVlcy5udW1i
ZXJPZkxvY2FscygpOyBsb2NhbC0tOykgewogICAgICAgICBpZiAoIWxpdmVuZXNzW2xvY2FsXSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk1LDcg
KzE5NSw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgICAg
IC8vIEluc3RlYWQsIHdlIGp1c3QgZmluZCB0aGUgbWluaW11bSBieXRlY29kZSBvZmZzZXQgdGhh
dCBpcyByZWFjaGFibGUsIGFuZAogICAgICAgICAgICAgLy8gY29tcGlsZSBjb2RlIGZyb20gdGhh
dCBieXRlY29kZSBvZmZzZXQgb253YXJkcy4KIAotICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaDxD
b2RlQmxvY2s+IGdyYXBoKG1fY29kZUJsb2NrLCBtX2luc3RydWN0aW9ucyk7CisgICAgICAgICAg
ICBCeXRlY29kZUdyYXBoIGdyYXBoKG1fY29kZUJsb2NrLCBtX2luc3RydWN0aW9ucyk7CiAgICAg
ICAgICAgICBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrID0gZ3JhcGguZmluZEJhc2ljQmxvY2tG
b3JCeXRlY29kZU9mZnNldChtX2xvb3BPU1JFbnRyeUJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGJsb2NrKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>325219</attachid>
            <date>2017-10-27 16:55:14 -0700</date>
            <delta_ts>2017-10-27 18:03:25 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>42162</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI0MTM0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDE3LTEwLTI3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IEJ5dGVjb2RlIGxpdmVuZXNzIHNob3VsZCBsaXZlIG9uIFVubGlua2VkQ29kZUJsb2NrIHNvIGl0
IGNhbiBiZSBzaGFyZWQgYW1vbmdzdCBDb2RlQmxvY2tzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzg5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIHN0b3JlcyBCeXRlY29kZUxpdmVu
ZXNzIG9uIFVubGlua2VkQ29kZUJsb2NrIGluc3RlYWQgb2YgQ29kZUJsb2NrCisgICAgICAgIHNv
IHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZWNvbXB1dGUgbGl2ZW5lc3MgZm9yIHRoZSBzYW1lIFVu
bGlua2VkQ29kZUJsb2NrCisgICAgICAgIG1vcmUgdGhhbiBvbmNlLiBUbyBkbyB0aGlzLCB0aGlz
IHBhdGNoIHNvbGlkaWZpZXMgdGhlIGludmFyaWFudCB0aGF0IENvZGVCbG9jaworICAgICAgICBs
aW5raW5nIGNhbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdlIHRoZSByZXN1bHQgb2Yg
bGl2ZW5lc3MuIEZvciBleGFtcGxlLAorICAgICAgICBpdCBjYW4ndCBpbnRyb2R1Y2UgbmV3IGxv
Y2Fscy4gVGhpcyBpbnZhcmlhbnQgd2FzIG1ldCBteSBKU0MgYmVmb3JlLCBiZWNhdXNlIHdlCisg
ICAgICAgIGRpZG4ndCBkbyBhbnl0aGluZyBpbiBieXRlY29kZSBsaW5raW5nIHRoYXQgd291bGQg
Y2hhbmdlIGxpdmVuZXNzLiBIb3dldmVyLCBpdCBpcworICAgICAgICBub3cgYSBjb3JyZWN0bmVz
cyByZXF1aXJlbWVudCB0aGF0IHdlIGRvbid0IGRvIGFueXRoaW5nIHRoYXQgd291bGQgY2hhbmdl
IHRoZQorICAgICAgICByZXN1bHQgb2YgcnVubmluZyBsaXZlbmVzcy4gVG8gc3VwcG9ydCB0aGlz
IGNoYW5nZSwgSSd2ZSByZWZhY3RvcmVkIEJ5dGVjb2RlR3JhcGgKKyAgICAgICAgdG8gbm90IGJl
IHRpZWQgdG8gYSBDb2RlQmxvY2tUeXBlKi4gVGhpbmdzIHRoYXQgcGVyZm9ybSBsaXZlbmVzcyB3
aWxsIHBhc3MgaW4KKyAgICAgICAgQ29kZUJsb2NrVHlwZSogYW5kIHRoZSBpbnN0cnVjdGlvbiBz
dHJlYW0gYXMgbmVlZGVkLiBUaGlzIG1lYW5zIHRoYXQgd2UgbWF5CisgICAgICAgIGNvbXB1dGUg
bGl2ZW5lc3Mgd2l0aCBvbmUgQ29kZUJsb2NrKidzIGluc3RydWN0aW9uIHN0cmVhbSwgYW5kIHRo
ZW4gcGVyZm9ybQorICAgICAgICBxdWVyaWVzIG9uIHRoYXQgYW5hbHlzaXMgd2l0aCBhIGRpZmZl
cmVudCBDb2RlQmxvY2sqJ3MgaW5zdHJ1Y3Rpb24gc3RyZWFtLgorCisgICAgICAgIFRoaXMgc2Vl
bXMgdG8gYmUgYSAyJSBKU0JlbmNoIHByb2dyZXNzaW9uLgorCisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24uY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdl
bmVyYXRvcmlmaWNhdGlvbjo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb24pOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6Z3JhcGgpOgorICAgICAgICAoSlNDOjpC
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6c3RvcmFnZUZvckdlbmVyYXRvckxvY2FsKToKKyAg
ICAgICAgKEpTQzo6R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpczo6cnVuKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3JpZmljYXRpb246OnJ1bik6CisgICAgICAgICogYnl0ZWNvZGUv
Qnl0ZWNvZGVHcmFwaC5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdyYXBoOjpCeXRlY29kZUdy
YXBoKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6Y29kZUJsb2NrIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDo6aW5zdHJ1Y3Rpb25zKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHcmFwaDxCbG9jaz46OkJ5dGVjb2RlR3JhcGgpOiBE
ZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5jcHA6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Qnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVMaXZl
bmVzc0FuYWx5c2lzOjpjb21wdXRlRnVsbExpdmVuZXNzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlS2lsbHMpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1bHRzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpvcGVyYW5kSXNMaXZlQXRCeXRlY29kZU9mZnNldCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZSk6IERlbGV0
ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmg6CisgICAg
ICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24p
OgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVu
ZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2spOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNv
ZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnJ1
bkxpdmVuZXNzRml4cG9pbnQpOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZVJld3JpdGVyOjphcHBseU1vZGlmaWNhdGlvbik6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0ZXI6OmV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpCeXRlY29kZVJld3JpdGVyOjphZGp1c3RKdW1wVGFyZ2V0c0luRnJhZ21lbnQpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuaDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVS
ZXdyaXRlcjo6Qnl0ZWNvZGVSZXdyaXRlcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlUmV3cml0
ZXI6OnJlbW92ZUJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVSZXdyaXRlcjo6Z3Jh
cGgpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmVuc3Vy
ZUNhdGNoTGl2ZW5lc3NJc0NvbXB1dGVkRm9yQnl0ZWNvZGVPZmZzZXRTbG93KToKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjp2YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bGl2
ZW5lc3NBbmFseXNpc1Nsb3cpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6VW5saW5r
ZWRDb2RlQmxvY2s6OmFwcGx5TW9kaWZpY2F0aW9uKToKKyAgICAgICAgKEpTQzo6VW5saW5rZWRD
b2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KToKKyAgICAgICAgKiBieXRlY29kZS9Vbmxp
bmtlZENvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpVbmxpbmtlZENvZGVCbG9jazo6bGl2ZW5l
c3NBbmFseXNpcyk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6bGl2ZW5lc3NGb3IpOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpraWxs
c0Zvcik6CisgICAgICAgICogZGZnL0RGR1BsYW4uY3BwOgorICAgICAgICAoSlNDOjpERkc6OlBs
YW46OmNsZWFuTXVzdEhhbmRsZVZhbHVlc0lmTmVjZXNzYXJ5KToKKyAgICAgICAgKiBqaXQvSklU
LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKwogMjAx
Ny0xMC0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2Vi
QXNzZW1ibHk6IHVwZGF0ZSBhcmJpdHJhcnkgbGltaXRzIHRvIHdoYXQgYnJvd3NlcnMgdXNlCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHZW5lcmF0b3JpZmlj
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUzLDEzICs1MywxNSBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBW
ZWN0b3I8WWllbGREYXRhPiBZaWVsZHM7CiAKICAgICBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlv
bihVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9jazo6VW5wYWNr
ZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgU3ltYm9sVGFibGUqIGdlbmVyYXRvckZyYW1l
U3ltYm9sVGFibGUsIGludCBnZW5lcmF0b3JGcmFtZVN5bWJvbFRhYmxlSW5kZXgpCi0gICAgICAg
IDogbV9ncmFwaChjb2RlQmxvY2ssIGluc3RydWN0aW9ucykKKyAgICAgICAgOiBtX2NvZGVCbG9j
ayhjb2RlQmxvY2spCisgICAgICAgICwgbV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQorICAg
ICAgICAsIG1fZ3JhcGgobV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKQogICAgICAgICAsIG1f
Z2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZSgqY29kZUJsb2NrLT52bSgpLCBnZW5lcmF0b3JGcmFt
ZVN5bWJvbFRhYmxlKQogICAgICAgICAsIG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZUluZGV4
KGdlbmVyYXRvckZyYW1lU3ltYm9sVGFibGVJbmRleCkKICAgICB7CiAgICAgICAgIGZvciAoQnl0
ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA6IG1fZ3JhcGgpIHsKICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQgOiBibG9jay0+b2Zmc2V0cygpKSB7Ci0gICAgICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRJbnN0cnVjdGlvbiogcGMgPSAmbV9ncmFwaC5pbnN0cnVjdGlvbnMo
KVtieXRlY29kZU9mZnNldF07CisgICAgICAgICAgICAgICAgY29uc3QgVW5saW5rZWRJbnN0cnVj
dGlvbiogcGMgPSAmaW5zdHJ1Y3Rpb25zW2J5dGVjb2RlT2Zmc2V0XTsKICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHBjLT51Lm9wY29kZSkgewogICAgICAgICAgICAgICAgIGNhc2Ugb3BfZW50ZXI6
IHsKICAgICAgICAgICAgICAgICAgICAgbV9lbnRlclBvaW50ID0gYnl0ZWNvZGVPZmZzZXQ7CkBA
IC05MSw3ICs5Myw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnVuKCk7CiAKLSAgICBCeXRlY29k
ZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9Cisg
ICAgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgoKSB7IHJldHVybiBtX2dyYXBoOyB9CiAKICAgICBjb25z
dCBZaWVsZHMmIHlpZWxkcygpIGNvbnN0CiAgICAgewpAQCAtMTIxLDEwICsxMjMsOSBAQCBwcml2
YXRlOgogICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDxTdG9yYWdlPiBzdG9yYWdlID0gbV9zdG9y
YWdlc1tpbmRleF0pCiAgICAgICAgICAgICByZXR1cm4gKnN0b3JhZ2U7CiAKLSAgICAgICAgVW5s
aW5rZWRDb2RlQmxvY2sqIGNvZGVCbG9jayA9IG1fZ3JhcGguY29kZUJsb2NrKCk7CiAgICAgICAg
IElkZW50aWZpZXIgaWRlbnRpZmllciA9IElkZW50aWZpZXI6OmZyb21VaWQoUHJpdmF0ZU5hbWUo
KSk7Ci0gICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IGNvZGVCbG9jay0+bnVtYmVy
T2ZJZGVudGlmaWVycygpOwotICAgICAgICBjb2RlQmxvY2stPmFkZElkZW50aWZpZXIoaWRlbnRp
Zmllcik7CisgICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJJbmRleCA9IG1fY29kZUJsb2NrLT5u
dW1iZXJPZklkZW50aWZpZXJzKCk7CisgICAgICAgIG1fY29kZUJsb2NrLT5hZGRJZGVudGlmaWVy
KGlkZW50aWZpZXIpOwogICAgICAgICBTY29wZU9mZnNldCBzY29wZU9mZnNldCA9IG1fZ2VuZXJh
dG9yRnJhbWVTeW1ib2xUYWJsZS0+dGFrZU5leHRTY29wZU9mZnNldChOb0xvY2tpbmdOZWNlc3Nh
cnkpOwogICAgICAgICBtX2dlbmVyYXRvckZyYW1lU3ltYm9sVGFibGUtPnNldChOb0xvY2tpbmdO
ZWNlc3NhcnksIGlkZW50aWZpZXIuaW1wbCgpLCBTeW1ib2xUYWJsZUVudHJ5KFZhck9mZnNldChz
Y29wZU9mZnNldCkpKTsKIApAQCAtMTM4LDcgKzEzOSw5IEBAIHByaXZhdGU6CiAgICAgfQogCiAg
ICAgdW5zaWduZWQgbV9lbnRlclBvaW50IHsgMCB9OwotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5r
ZWRDb2RlQmxvY2s+IG1fZ3JhcGg7CisgICAgVW5saW5rZWRDb2RlQmxvY2sqIG1fY29kZUJsb2Nr
OworICAgIFVubGlua2VkQ29kZUJsb2NrOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgbV9pbnN0cnVj
dGlvbnM7CisgICAgQnl0ZWNvZGVHcmFwaCBtX2dyYXBoOwogICAgIFZlY3RvcjxzdGQ6Om9wdGlv
bmFsPFN0b3JhZ2U+PiBtX3N0b3JhZ2VzOwogICAgIFlpZWxkcyBtX3lpZWxkczsKICAgICBTdHJv
bmc8U3ltYm9sVGFibGU+IG1fZ2VuZXJhdG9yRnJhbWVTeW1ib2xUYWJsZTsKQEAgLTE1MiwxNSAr
MTU1LDE1IEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgdm9pZCBydW4oKQorICAgIHZv
aWQgcnVuKFVubGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2ssIFVubGlua2VkQ29kZUJsb2NrOjpV
bnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1Y3Rpb25zKQogICAgIHsKICAgICAgICAgLy8gUGVy
Zm9ybSBtb2RpZmllZCBsaXZlbmVzcyBhbmFseXNpcyB0byBkZXRlcm1pbmUgd2hpY2ggbG9jYWxz
IGFyZSBsaXZlIGF0IHRoZSBtZXJnZSBwb2ludHMuCiAgICAgICAgIC8vIFRoaXMgcHJvZHVjZXMg
dGhlIGNvbnNlcnZhdGl2ZSByZXN1bHRzIGZvciB0aGUgcXVlc3Rpb24sICJ3aGljaCB2YXJpYWJs
ZXMgc2hvdWxkIGJlIHNhdmVkIGFuZCByZXN1bWVkPyIuCiAKLSAgICAgICAgcnVuTGl2ZW5lc3NG
aXhwb2ludChtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpKTsKKyAgICAgICAgcnVuTGl2ZW5l
c3NGaXhwb2ludChjb2RlQmxvY2ssIGluc3RydWN0aW9ucywgbV9nZW5lcmF0b3JpZmljYXRpb24u
Z3JhcGgoKSk7CiAKICAgICAgICAgZm9yIChZaWVsZERhdGEmIGRhdGEgOiBtX2dlbmVyYXRvcmlm
aWNhdGlvbi55aWVsZHMoKSkKLSAgICAgICAgICAgIGRhdGEubGl2ZW5lc3MgPSBnZXRMaXZlbmVz
c0luZm9BdEJ5dGVjb2RlT2Zmc2V0KG1fZ2VuZXJhdG9yaWZpY2F0aW9uLmdyYXBoKCksIGRhdGEu
cG9pbnQgKyBvcGNvZGVMZW5ndGgob3BfeWllbGQpKTsKKyAgICAgICAgICAgIGRhdGEubGl2ZW5l
c3MgPSBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBtX2dlbmVyYXRvcmlmaWNhdGlvbi5ncmFwaCgpLCBkYXRhLnBvaW50ICsgb3Bjb2RlTGVu
Z3RoKG9wX3lpZWxkKSk7CiAgICAgfQogCiBwcml2YXRlOgpAQCAtMTczLDE4ICsxNzYsMTcgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNhdGlvbjo6cnVuKCkKIAogICAgIHsKICAgICAgICAg
R2VuZXJhdG9yTGl2ZW5lc3NBbmFseXNpcyBwYXNzKCp0aGlzKTsKLSAgICAgICAgcGFzcy5ydW4o
KTsKKyAgICAgICAgcGFzcy5ydW4obV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsKICAgICB9
CiAKLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrID0gbV9ncmFwaC5jb2RlQmxvY2so
KTsKLSAgICBCeXRlY29kZVJld3JpdGVyIHJld3JpdGVyKG1fZ3JhcGgpOworICAgIEJ5dGVjb2Rl
UmV3cml0ZXIgcmV3cml0ZXIobV9ncmFwaCwgbV9jb2RlQmxvY2ssIG1faW5zdHJ1Y3Rpb25zKTsK
IAogICAgIC8vIFNldHVwIHRoZSBnbG9iYWwgc3dpdGNoIGZvciB0aGUgZ2VuZXJhdG9yLgogICAg
IHsKICAgICAgICAgdW5zaWduZWQgbmV4dFRvRW50ZXJQb2ludCA9IGVudGVyUG9pbnQoKSArIG9w
Y29kZUxlbmd0aChvcF9lbnRlcik7Ci0gICAgICAgIHVuc2lnbmVkIHN3aXRjaFRhYmxlSW5kZXgg
PSBtX2dyYXBoLmNvZGVCbG9jaygpLT5udW1iZXJPZlN3aXRjaEp1bXBUYWJsZXMoKTsKKyAgICAg
ICAgdW5zaWduZWQgc3dpdGNoVGFibGVJbmRleCA9IG1fY29kZUJsb2NrLT5udW1iZXJPZlN3aXRj
aEp1bXBUYWJsZXMoKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YXRlID0gdmlydHVhbFJl
Z2lzdGVyRm9yQXJndW1lbnQoc3RhdGljX2Nhc3Q8aW50MzJfdD4oSlNHZW5lcmF0b3JGdW5jdGlv
bjo6R2VuZXJhdG9yQXJndW1lbnQ6OlN0YXRlKSk7Ci0gICAgICAgIGF1dG8mIGp1bXBUYWJsZSA9
IG1fZ3JhcGguY29kZUJsb2NrKCktPmFkZFN3aXRjaEp1bXBUYWJsZSgpOworICAgICAgICBhdXRv
JiBqdW1wVGFibGUgPSBtX2NvZGVCbG9jay0+YWRkU3dpdGNoSnVtcFRhYmxlKCk7CiAgICAgICAg
IGp1bXBUYWJsZS5taW4gPSAwOwogICAgICAgICBqdW1wVGFibGUuYnJhbmNoT2Zmc2V0cy5yZXNp
emUobV95aWVsZHMuc2l6ZSgpICsgMSk7CiAgICAgICAgIGp1bXBUYWJsZS5icmFuY2hPZmZzZXRz
LmZpbGwoMCk7CkBAIC0yMjcsNyArMjI5LDcgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcmlmaWNh
dGlvbjo6cnVuKCkKICAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZp
cnR1YWxSZWdpc3RlckZvckxvY2FsKGluZGV4KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlIHN0
b3JhZ2UgPSBzdG9yYWdlRm9yR2VuZXJhdG9yTG9jYWwoaW5kZXgpOwogCi0gICAgICAgICAgICAg
ICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGNvZGVCbG9jay0+YWRkVmFsdWVQcm9m
aWxlKCk7CisgICAgICAgICAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IG1f
Y29kZUJsb2NrLT5hZGRWYWx1ZVByb2ZpbGUoKTsKICAgICAgICAgICAgICAgICBmcmFnbWVudC5h
cHBlbmRJbnN0cnVjdGlvbigKICAgICAgICAgICAgICAgICAgICAgb3BfZ2V0X2Zyb21fc2NvcGUs
CiAgICAgICAgICAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCksIC8vIGRzdApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFwaC5oCShyZXZpc2lv
biAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVHcmFw
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwyMiArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIEJ5dGVjb2RlQmFzaWNCbG9jazsKIAotdGVtcGxhdGU8dHlwZW5hbWUgQmxvY2s+CiBj
bGFzcyBCeXRlY29kZUdyYXBoIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCeXRlY29kZUdyYXBoKTsKIHB1YmxpYzoKLSAgICB0eXBlZGVm
IEJsb2NrIENvZGVCbG9jazsKLSAgICB0eXBlZGVmIHR5cGVuYW1lIEJsb2NrOjpJbnN0cnVjdGlv
biBJbnN0cnVjdGlvbjsKICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Qnl0ZWNv
ZGVCYXNpY0Jsb2NrPj4gQmFzaWNCbG9ja3NWZWN0b3I7CiAKLSAgICB0eXBlZGVmIFdURjo6SW5k
ZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg8QmxvY2s+PiBpdGVyYXRvcjsKKyAg
ICB0eXBlZGVmIFdURjo6SW5kZXhlZENvbnRhaW5lckl0ZXJhdG9yPEJ5dGVjb2RlR3JhcGg+IGl0
ZXJhdG9yOwogCi0gICAgaW5saW5lIEJ5dGVjb2RlR3JhcGgoQmxvY2sqLCB0eXBlbmFtZSBCbG9j
azo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmKTsKLQotICAgIEJsb2NrKiBjb2RlQmxvY2soKSBjb25z
dCB7IHJldHVybiBtX2NvZGVCbG9jazsgfQotCi0gICAgdHlwZW5hbWUgQmxvY2s6OlVucGFja2Vk
SW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMoKSB7IHJldHVybiBtX2luc3RydWN0aW9uczsgfQor
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlPgorICAgIGlubGluZSBCeXRlY29k
ZUdyYXBoKENvZGVCbG9ja1R5cGUqLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZElu
c3RydWN0aW9ucyYpOwogCiAgICAgV1RGOjpJdGVyYXRvclJhbmdlPEJhc2ljQmxvY2tzVmVjdG9y
OjpyZXZlcnNlX2l0ZXJhdG9yPiBiYXNpY0Jsb2Nrc0luUmV2ZXJzZU9yZGVyKCkKICAgICB7CkBA
IC0xMDYsMTkgKzEwMCwxNCBAQCBwdWJsaWM6CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBsYXN0
KCkgeyByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7IH0KIAogcHJpdmF0ZToKLSAgICBCbG9jayogbV9j
b2RlQmxvY2s7CiAgICAgQmFzaWNCbG9ja3NWZWN0b3IgbV9iYXNpY0Jsb2NrczsKLSAgICB0eXBl
bmFtZSBCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmIG1faW5zdHJ1Y3Rpb25zOwogfTsKIAog
Ci10ZW1wbGF0ZTx0eXBlbmFtZSBCbG9jaz4KLUJ5dGVjb2RlR3JhcGg8QmxvY2s+OjpCeXRlY29k
ZUdyYXBoKEJsb2NrKiBjb2RlQmxvY2ssIHR5cGVuYW1lIEJsb2NrOjpVbnBhY2tlZEluc3RydWN0
aW9ucyYgaW5zdHJ1Y3Rpb25zKQotICAgIDogbV9jb2RlQmxvY2soY29kZUJsb2NrKQotICAgICwg
bV9pbnN0cnVjdGlvbnMoaW5zdHJ1Y3Rpb25zKQordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2Nr
VHlwZT4KK0J5dGVjb2RlR3JhcGg6OkJ5dGVjb2RlR3JhcGgoQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCB0eXBlbmFtZSBDb2RlQmxvY2tUeXBlOjpVbnBhY2tlZEluc3RydWN0aW9ucyYgaW5zdHJ1
Y3Rpb25zKQogewotICAgIEFTU0VSVChtX2NvZGVCbG9jayk7Ci0gICAgQnl0ZWNvZGVCYXNpY0Js
b2NrOjpjb21wdXRlKG1fY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMuYmVnaW4oKSwgaW5zdHJ1Y3Rp
b25zLnNpemUoKSwgbV9iYXNpY0Jsb2Nrcyk7CisgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrOjpjb21w
dXRlKGNvZGVCbG9jaywgaW5zdHJ1Y3Rpb25zLmJlZ2luKCksIGluc3RydWN0aW9ucy5zaXplKCks
IG1fYmFzaWNCbG9ja3MpOwogICAgIEFTU0VSVChtX2Jhc2ljQmxvY2tzLnNpemUoKSk7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9C
eXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDAsNDAgKzQwLDMzIEBAIG5hbWVzcGFjZSBKU0MgewogQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2Rl
QmxvY2spCiAgICAgOiBtX2dyYXBoKGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMo
KSkKIHsKLSAgICBjb21wdXRlKCk7CisgICAgcnVuTGl2ZW5lc3NGaXhwb2ludChjb2RlQmxvY2ss
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCksIG1fZ3JhcGgpOworCisgICAgaWYgKE9wdGlvbnM6
OmR1bXBCeXRlY29kZUxpdmVuZXNzUmVzdWx0cygpKQorICAgICAgICBkdW1wUmVzdWx0cyhjb2Rl
QmxvY2spOwogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJ
bmZvQXRCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgRmFzdEJpdFZlY3Rv
ciYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmdldExpdmVuZXNzSW5m
b0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiByZXN1bHQpCiB7CiAgICAgQnl0ZWNvZGVCYXNpY0Jsb2Nr
KiBibG9jayA9IG1fZ3JhcGguZmluZEJhc2ljQmxvY2tGb3JCeXRlY29kZU9mZnNldChieXRlY29k
ZU9mZnNldCk7CiAgICAgQVNTRVJUKGJsb2NrKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5
QmxvY2soKSk7CiAgICAgQVNTRVJUKCFibG9jay0+aXNFeGl0QmxvY2soKSk7CiAgICAgcmVzdWx0
LnJlc2l6ZShibG9jay0+b3V0KCkubnVtQml0cygpKTsKLSAgICBjb21wdXRlTG9jYWxMaXZlbmVz
c0ZvckJ5dGVjb2RlT2Zmc2V0KG1fZ3JhcGgsIGJsb2NrLCBieXRlY29kZU9mZnNldCwgcmVzdWx0
KTsKKyAgICBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGNvZGVCbG9jaywg
Y29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0
LCByZXN1bHQpOwogfQogCi1ib29sIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6b3BlcmFuZElz
TGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9wZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0
KQotewotICAgIGlmIChvcGVyYW5kSXNBbHdheXNMaXZlKG9wZXJhbmQpKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICBGYXN0Qml0VmVjdG9yIHJlc3VsdDsKLSAgICBnZXRMaXZlbmVzc0luZm9B
dEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0LCByZXN1bHQpOwotICAgIHJldHVybiBvcGVy
YW5kVGhhdElzTm90QWx3YXlzTGl2ZUlzTGl2ZShyZXN1bHQsIG9wZXJhbmQpOwotfQotCi1GYXN0
Qml0VmVjdG9yIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Z2V0TGl2ZW5lc3NJbmZvQXRCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKK0Zhc3RCaXRWZWN0b3IgQnl0ZWNv
ZGVMaXZlbmVzc0FuYWx5c2lzOjpnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVC
bG9jayogY29kZUJsb2NrLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKIHsKICAgICBGYXN0Qml0
VmVjdG9yIG91dDsKLSAgICBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2Rl
T2Zmc2V0LCBvdXQpOworICAgIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoY29kZUJs
b2NrLCBieXRlY29kZU9mZnNldCwgb3V0KTsKICAgICByZXR1cm4gb3V0OwogfQogCi12b2lkIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUZ1bGxMaXZlbmVzcyhGdWxsQnl0ZWNvZGVM
aXZlbmVzcyYgcmVzdWx0KQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVG
dWxsTGl2ZW5lc3MoQ29kZUJsb2NrKiBjb2RlQmxvY2ssIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiBy
ZXN1bHQpCiB7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgIAorCiAgICAgcmVzdWx0Lm1fbWFwLnJlc2l6
ZShjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CiAgICAgCiAgICAgZm9yIChzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVCYXNpY0Jsb2NrPiYgYmxvY2sgOiBtX2dyYXBoLmJhc2ljQmxv
Y2tzSW5SZXZlcnNlT3JkZXIoKSkgewpAQCAtODQsMTcgKzc3LDE3IEBAIHZvaWQgQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlRnUKICAgICAgICAgCiAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5vZmZzZXRzKCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCA9IGJsb2NrLT5vZmZzZXRzKClbaV07Ci0gICAgICAgICAgICBz
dGVwT3Zlckluc3RydWN0aW9uKG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgICAg
ICAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbihjb2RlQmxvY2ssIGNvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCksIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOwogICAgICAgICAgICAgcmVzdWx0
Lm1fbWFwW2J5dGVjb2RlT2Zmc2V0XSA9IG91dDsKICAgICAgICAgfQogICAgIH0KIH0KIAotdm9p
ZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmNvbXB1dGVLaWxscyhCeXRlY29kZUtpbGxzJiBy
ZXN1bHQpCit2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpczo6Y29tcHV0ZUtpbGxzKENvZGVC
bG9jayogY29kZUJsb2NrLCBCeXRlY29kZUtpbGxzJiByZXN1bHQpCiB7CisgICAgVU5VU0VEX1BB
UkFNKHJlc3VsdCk7CiAgICAgRmFzdEJpdFZlY3RvciBvdXQ7Ci0gICAgCi0gICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOworCiAgICAgcmVzdWx0Lm1fY29kZUJs
b2NrID0gY29kZUJsb2NrOwogICAgIHJlc3VsdC5tX2tpbGxTZXRzID0gc3RkOjptYWtlX3VuaXF1
ZTxCeXRlY29kZUtpbGxzOjpLaWxsU2V0W10+KGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKICAgICAKQEAgLTEwNyw3ICsxMDAsNyBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5vZmZzZXRz
KCkuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldCA9
IGJsb2NrLT5vZmZzZXRzKClbaV07CiAgICAgICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKAot
ICAgICAgICAgICAgICAgIG1fZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICAgICAgICAg
IGNvZGVCbG9jaywgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKSwgbV9ncmFwaCwgYnl0ZWNvZGVP
ZmZzZXQsCiAgICAgICAgICAgICAgICAgWyZdICh1bnNpZ25lZCBpbmRleCkgewogICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIGlzIGZvciB1c2VzLgogICAgICAgICAgICAgICAgICAgICBpZiAo
b3V0W2luZGV4XSkKQEAgLTEyMyw5ICsxMTYsOCBAQCB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpczo6Y29tcHV0ZUtpCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
czo6ZHVtcFJlc3VsdHMoKQordm9pZCBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM6OmR1bXBSZXN1
bHRzKENvZGVCbG9jayogY29kZUJsb2NrKQogewotICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
bV9ncmFwaC5jb2RlQmxvY2soKTsKICAgICBkYXRhTG9nKCJcbkR1bXBpbmcgYnl0ZWNvZGUgbGl2
ZW5lc3MgZm9yICIsICpjb2RlQmxvY2ssICI6XG4iKTsKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb25zQmVnaW4gPSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCk7CiAgICAgdW5z
aWduZWQgaSA9IDA7CkBAIC0xNzgsNyArMTcwLDcgQEAgdm9pZCBCeXRlY29kZUxpdmVuZXNzQW5h
bHlzaXM6OmR1bXBSZXN1bAogICAgICAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAKICAgICAg
ICAgICAgIGRhdGFMb2dGKCJMaXZlIHZhcmlhYmxlczoiKTsKLSAgICAgICAgICAgIEZhc3RCaXRW
ZWN0b3IgbGl2ZUJlZm9yZSA9IGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNv
ZGVPZmZzZXQpOworICAgICAgICAgICAgRmFzdEJpdFZlY3RvciBsaXZlQmVmb3JlID0gZ2V0TGl2
ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChjb2RlQmxvY2ssIGJ5dGVjb2RlT2Zmc2V0KTsKICAg
ICAgICAgICAgIGR1bXBCaXRWZWN0b3IobGl2ZUJlZm9yZSk7CiAgICAgICAgICAgICBkYXRhTG9n
RigiXG4iKTsKICAgICAgICAgICAgIGNvZGVCbG9jay0+ZHVtcEJ5dGVjb2RlKFdURjo6ZGF0YUZp
bGUoKSwgaW5zdHJ1Y3Rpb25zQmVnaW4sIGN1cnJlbnRJbnN0cnVjdGlvbik7CkBAIC0xOTUsMTIg
KzE4Nyw0IEBAIHZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpkdW1wUmVzdWwKICAgICB9
CiB9CiAKLXZvaWQgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzOjpjb21wdXRlKCkKLXsKLSAgICBy
dW5MaXZlbmVzc0ZpeHBvaW50KG1fZ3JhcGgpOwotCi0gICAgaWYgKE9wdGlvbnM6OmR1bXBCeXRl
Y29kZUxpdmVuZXNzUmVzdWx0cygpKQotICAgICAgICBkdW1wUmVzdWx0cygpOwotfQotCiB9IC8v
IG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRl
Y29kZUxpdmVuZXNzQW5hbHlzaXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmgJKHJldmlzaW9uIDIyMzk1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpdmVuZXNzQW5hbHlz
aXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsMTcgKzM3LDE3IEBAIGNsYXNzIEZ1bGxCeXRlY29k
ZUxpdmVuZXNzOwogCiBjbGFzcyBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb24gewogcHJvdGVj
dGVkOgotICAgIHRlbXBsYXRlPHR5cGVuYW1lIEdyYXBoLCB0eXBlbmFtZSBVc2VGdW5jdG9yLCB0
eXBlbmFtZSBEZWZGdW5jdG9yPiB2b2lkIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oR3JhcGgmLCB1bnNp
Z25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYsIGNvbnN0IERlZkZ1bmN0b3Im
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVj
dGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+IHZvaWQgc3Rl
cE92ZXJJbnN0cnVjdGlvbihDb2RlQmxvY2tUeXBlKiwgY29uc3QgSW5zdHJ1Y3Rpb25zJiwgQnl0
ZWNvZGVHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiwg
Y29uc3QgRGVmRnVuY3RvciYpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQg
c3RlcE92ZXJJbnN0cnVjdGlvbihHcmFwaCYsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0
Qml0VmVjdG9yJiBvdXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5
cGVuYW1lIEluc3RydWN0aW9ucz4gdm9pZCBzdGVwT3Zlckluc3RydWN0aW9uKENvZGVCbG9ja1R5
cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIG91dCk7CiAKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBH
cmFwaD4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiwg
Qnl0ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9y
JiByZXN1bHQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gYm9vbCBjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0
KENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0
ZWNvZGVCYXNpY0Jsb2NrKiwgdW5zaWduZWQgdGFyZ2V0T2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBy
ZXN1bHQpOwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IGJvb2wgY29tcHV0ZUxvY2Fs
TGl2ZW5lc3NGb3JCbG9jayhHcmFwaCYsIEJ5dGVjb2RlQmFzaWNCbG9jayopOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gYm9vbCBj
b21wdXRlTG9jYWxMaXZlbmVzc0ZvckJsb2NrKENvZGVCbG9ja1R5cGUqLCBjb25zdCBJbnN0cnVj
dGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgQnl0ZWNvZGVCYXNpY0Jsb2NrKik7CiAKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBHcmFwaD4gRmFzdEJpdFZlY3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVj
b2RlT2Zmc2V0KEdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1lIEluc3RydWN0aW9ucz4gRmFzdEJpdFZl
Y3RvciBnZXRMaXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9ja1R5cGUqLCBjb25z
dCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJiwgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQp
OwogCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUgR3JhcGg+IHZvaWQgcnVuTGl2ZW5lc3NGaXhwb2lu
dChHcmFwaCYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvZGVCbG9ja1R5cGUsIHR5cGVuYW1l
IEluc3RydWN0aW9ucz4gdm9pZCBydW5MaXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5cGUqLCBj
b25zdCBJbnN0cnVjdGlvbnMmLCBCeXRlY29kZUdyYXBoJik7CiB9OwogCiBjbGFzcyBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMgOiBwcml2YXRlIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbiB7
CkBAIC01NywxOSArNTcsMTcgQEAgcHVibGljOgogICAgIGZyaWVuZCBjbGFzcyBCeXRlY29kZUxp
dmVuZXNzUHJvcGFnYXRpb247CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzKENvZGVCbG9j
ayopOwogICAgIAotICAgIGJvb2wgb3BlcmFuZElzTGl2ZUF0Qnl0ZWNvZGVPZmZzZXQoaW50IG9w
ZXJhbmQsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KTsKLSAgICBGYXN0Qml0VmVjdG9yIGdldExp
dmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQpOworICAg
IEZhc3RCaXRWZWN0b3IgZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldChDb2RlQmxvY2sq
LCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCk7CiAgICAgCi0gICAgdm9pZCBjb21wdXRlRnVsbExp
dmVuZXNzKEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOwotICAgIHZvaWQgY29tcHV0ZUtp
bGxzKEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CisgICAgdm9pZCBjb21wdXRlRnVsbExpdmVuZXNz
KENvZGVCbG9jayosIEZ1bGxCeXRlY29kZUxpdmVuZXNzJiByZXN1bHQpOworICAgIHZvaWQgY29t
cHV0ZUtpbGxzKENvZGVCbG9jayosIEJ5dGVjb2RlS2lsbHMmIHJlc3VsdCk7CiAKIHByaXZhdGU6
Ci0gICAgdm9pZCBjb21wdXRlKCk7Ci0gICAgdm9pZCBkdW1wUmVzdWx0cygpOworICAgIHZvaWQg
ZHVtcFJlc3VsdHMoQ29kZUJsb2NrKik7CiAKLSAgICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0
ZWNvZGVPZmZzZXQodW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKKyAg
ICB2b2lkIGdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrKiwgdW5zaWdu
ZWQgYnl0ZWNvZGVPZmZzZXQsIEZhc3RCaXRWZWN0b3ImKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8
Q29kZUJsb2NrPiBtX2dyYXBoOworICAgIEJ5dGVjb2RlR3JhcGggbV9ncmFwaDsKIH07CiAKIGlu
bGluZSBib29sIG9wZXJhbmRJc0Fsd2F5c0xpdmUoaW50IG9wZXJhbmQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVM
aXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw4ICs2MSw4IEBAIGlubGluZSBib29sIGlzVmFsaWRSZWdpc3Rl
ckZvckxpdmVuZXNzKGkKIAogLy8gU2ltcGxpZmllZCBpbnRlcmZhY2UgdG8gYnl0ZWNvZGUgdXNl
L2RlZiwgd2hpY2ggZGV0ZXJtaW5lcyBkZWZzIGZpcnN0IGFuZCB0aGVuIHVzZXMsIGFuZCBpbmNs
dWRlcwogLy8gZXhjZXB0aW9uIGhhbmRsZXJzIGluIHRoZSB1c2VzLgotdGVtcGxhdGU8dHlwZW5h
bWUgR3JhcGgsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1lIERlZkZ1bmN0b3I+Ci1pbmxp
bmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1Y3Rpb24o
R3JhcGgmIGdyYXBoLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgY29uc3QgVXNlRnVuY3RvciYg
dXNlLCBjb25zdCBEZWZGdW5jdG9yJiBkZWYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tU
eXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnMsIHR5cGVuYW1lIFVzZUZ1bmN0b3IsIHR5cGVuYW1l
IERlZkZ1bmN0b3I+CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0
ZXBPdmVySW5zdHJ1Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVj
dGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0LCBjb25zdCBVc2VGdW5jdG9yJiB1c2UsIGNvbnN0IERlZkZ1bmN0b3ImIGRlZikK
IHsKICAgICAvLyBUaGlzIGFic3RyYWN0bHkgZXhlY3V0ZSB0aGUgaW5zdHJ1Y3Rpb24gaW4gcmV2
ZXJzZS4gSW5zdHJ1Y3Rpb25zIGxvZ2ljYWxseSBmaXJzdCB1c2Ugb3BlcmFuZHMgYW5kCiAgICAg
Ly8gdGhlbiBkZWZpbmUgb3BlcmFuZHMuIFRoaXMgbG9naWNhbCBvcmRlcmluZyBpcyBuZWNlc3Nh
cnkgZm9yIG9wZXJhdGlvbnMgdGhhdCB1c2UgYW5kIGRlZiB0aGUgc2FtZQpAQCAtNzksMjEgKzc5
LDIwIEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAvLyB1
c2VzIGJlZm9yZSBkZWZzLCB0aGVuIHRoZSBhZGQgb3BlcmF0aW9uIGFib3ZlIHdvdWxkIGFwcGVh
ciB0byBub3QgaGF2ZSBsb2MxIGxpdmUsIHNpbmNlIHdlJ2QKICAgICAvLyBmaXJzdCBhZGQgaXQg
dG8gdGhlIG91dCBzZXQgKHRoZSB1c2UpLCBhbmQgdGhlbiB3ZSdkIHJlbW92ZSBpdCAodGhlIGRl
ZikuCiAKLSAgICBhdXRvKiBjb2RlQmxvY2sgPSBncmFwaC5jb2RlQmxvY2soKTsKLSAgICBhdXRv
KiBpbnN0cnVjdGlvbnNCZWdpbiA9IGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCk7CisgICAg
YXV0byogaW5zdHJ1Y3Rpb25zQmVnaW4gPSBpbnN0cnVjdGlvbnMuYmVnaW4oKTsKICAgICBhdXRv
KiBpbnN0cnVjdGlvbiA9ICZpbnN0cnVjdGlvbnNCZWdpbltieXRlY29kZU9mZnNldF07CiAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoKmluc3RydWN0aW9u
KTsKIAogICAgIGNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgICAgIGNvZGVCbG9j
aywgb3Bjb2RlSUQsIGluc3RydWN0aW9uLAotICAgICAgICBbJl0gKHR5cGVuYW1lIEdyYXBoOjpD
b2RlQmxvY2sqLCB0eXBlbmFtZSBHcmFwaDo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9w
ZXJhbmQpIHsKKyAgICAgICAgWyZdIChDb2RlQmxvY2tUeXBlKiwgY29uc3QgdHlwZW5hbWUgQ29k
ZUJsb2NrVHlwZTo6SW5zdHJ1Y3Rpb24qLCBPcGNvZGVJRCwgaW50IG9wZXJhbmQpIHsKICAgICAg
ICAgICAgIGlmIChpc1ZhbGlkUmVnaXN0ZXJGb3JMaXZlbmVzcyhvcGVyYW5kKSkKICAgICAgICAg
ICAgICAgICBkZWYoVmlydHVhbFJlZ2lzdGVyKG9wZXJhbmQpLnRvTG9jYWwoKSk7CiAgICAgICAg
IH0pOwogCiAgICAgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICAgICAgY29kZUJs
b2NrLCBvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sCi0gICAgICAgIFsmXSAodHlwZW5hbWUgR3JhcGg6
OkNvZGVCbG9jayosIHR5cGVuYW1lIEdyYXBoOjpJbnN0cnVjdGlvbiosIE9wY29kZUlELCBpbnQg
b3BlcmFuZCkgeworICAgICAgICBbJl0gKENvZGVCbG9ja1R5cGUqLCBjb25zdCB0eXBlbmFtZSBD
b2RlQmxvY2tUeXBlOjpJbnN0cnVjdGlvbiosIE9wY29kZUlELCBpbnQgb3BlcmFuZCkgewogICAg
ICAgICAgICAgaWYgKGlzVmFsaWRSZWdpc3RlckZvckxpdmVuZXNzKG9wZXJhbmQpKQogICAgICAg
ICAgICAgICAgIHVzZShWaXJ0dWFsUmVnaXN0ZXIob3BlcmFuZCkudG9Mb2NhbCgpKTsKICAgICAg
ICAgfSk7CkBAIC0xMDcsMTEgKzEwNiwxMSBAQCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNz
UHJvcGFnYXRpb246CiAgICAgfQogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlubGlu
ZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6c3RlcE92ZXJJbnN0cnVjdGlvbihH
cmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBGYXN0Qml0VmVjdG9yJiBvdXQp
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+
CitpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OnN0ZXBPdmVySW5zdHJ1
Y3Rpb24oQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3Ry
dWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBG
YXN0Qml0VmVjdG9yJiBvdXQpCiB7CiAgICAgc3RlcE92ZXJJbnN0cnVjdGlvbigKLSAgICAgICAg
Z3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBjb2RlQmxvY2ssIGluc3RydWN0aW9ucywg
Z3JhcGgsIGJ5dGVjb2RlT2Zmc2V0LAogICAgICAgICBbJl0gKHVuc2lnbmVkIGJpdEluZGV4KSB7
CiAgICAgICAgICAgICAvLyBUaGlzIGlzIHRoZSB1c2UgZnVuY3Rvciwgc28gd2Ugc2V0IHRoZSBi
aXQuCiAgICAgICAgICAgICBvdXRbYml0SW5kZXhdID0gdHJ1ZTsKQEAgLTEyMiw4ICsxMjEsOCBA
QCBpbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246CiAgICAgICAgIH0pOwog
fQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlubGluZSBib29sIEJ5dGVjb2RlTGl2ZW5l
c3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9mZnNldChHcmFw
aCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIHRhcmdldE9mZnNl
dCwgRmFzdEJpdFZlY3RvciYgcmVzdWx0KQordGVtcGxhdGU8dHlwZW5hbWUgQ29kZUJsb2NrVHlw
ZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgoraW5saW5lIGJvb2wgQnl0ZWNvZGVMaXZlbmVzc1By
b3BhZ2F0aW9uOjpjb21wdXRlTG9jYWxMaXZlbmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbG9j
a1R5cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVj
b2RlR3JhcGgmIGdyYXBoLCBCeXRlY29kZUJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCB0YXJn
ZXRPZmZzZXQsIEZhc3RCaXRWZWN0b3ImIHJlc3VsdCkKIHsKICAgICBBU1NFUlQoIWJsb2NrLT5p
c0V4aXRCbG9jaygpKTsKICAgICBBU1NFUlQoIWJsb2NrLT5pc0VudHJ5QmxvY2soKSk7CkBAIC0x
MzQsMjIgKzEzMywyMiBAQCBpbmxpbmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246
CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gYmxvY2stPm9mZnNldHMoKVtpXTsK
ICAgICAgICAgaWYgKHRhcmdldE9mZnNldCA+IGJ5dGVjb2RlT2Zmc2V0KQogICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIHN0ZXBPdmVySW5zdHJ1Y3Rpb24oZ3JhcGgsIGJ5dGVjb2RlT2Zmc2V0
LCBvdXQpOworICAgICAgICBzdGVwT3Zlckluc3RydWN0aW9uKGNvZGVCbG9jaywgaW5zdHJ1Y3Rp
b25zLCBncmFwaCwgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJl
c3VsdC5zZXRBbmRDaGVjayhvdXQpOwogfQogCi10ZW1wbGF0ZTx0eXBlbmFtZSBHcmFwaD4KLWlu
bGluZSBib29sIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjo6Y29tcHV0ZUxvY2FsTGl2ZW5l
c3NGb3JCbG9jayhHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2spCit0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0cnVjdGlvbnM+Citpbmxp
bmUgYm9vbCBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRpb246OmNvbXB1dGVMb2NhbExpdmVuZXNz
Rm9yQmxvY2soQ29kZUJsb2NrVHlwZSogY29kZUJsb2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGlu
c3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3JhcGgsIEJ5dGVjb2RlQmFzaWNCbG9jayogYmxv
Y2spCiB7CiAgICAgaWYgKGJsb2NrLT5pc0V4aXRCbG9jaygpIHx8IGJsb2NrLT5pc0VudHJ5Qmxv
Y2soKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb21wdXRlTG9jYWxMaXZl
bmVzc0ZvckJ5dGVjb2RlT2Zmc2V0KGdyYXBoLCBibG9jaywgYmxvY2stPmxlYWRlck9mZnNldCgp
LCBibG9jay0+aW4oKSk7CisgICAgcmV0dXJuIGNvbXB1dGVMb2NhbExpdmVuZXNzRm9yQnl0ZWNv
ZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBoLCBibG9jaywgYmxvY2stPmxl
YWRlck9mZnNldCgpLCBibG9jay0+aW4oKSk7CiB9CiAKLXRlbXBsYXRlPHR5cGVuYW1lIEdyYXBo
PgotaW5saW5lIEZhc3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpnZXRM
aXZlbmVzc0luZm9BdEJ5dGVjb2RlT2Zmc2V0KEdyYXBoJiBncmFwaCwgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQpCit0ZW1wbGF0ZTx0eXBlbmFtZSBDb2RlQmxvY2tUeXBlLCB0eXBlbmFtZSBJbnN0
cnVjdGlvbnM+CitpbmxpbmUgRmFzdEJpdFZlY3RvciBCeXRlY29kZUxpdmVuZXNzUHJvcGFnYXRp
b246OmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsb2NrVHlwZSogY29kZUJs
b2NrLCBjb25zdCBJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucywgQnl0ZWNvZGVHcmFwaCYgZ3Jh
cGgsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewogICAgIEJ5dGVjb2RlQmFzaWNCbG9jayog
YmxvY2sgPSBncmFwaC5maW5kQmFzaWNCbG9ja0ZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zm
c2V0KTsKICAgICBBU1NFUlQoYmxvY2spOwpAQCAtMTU3LDE0ICsxNTYsMTMgQEAgaW5saW5lIEZh
c3RCaXRWZWN0b3IgQnl0ZWNvZGVMaXZlbmVzc1BybwogICAgIEFTU0VSVCghYmxvY2stPmlzRXhp
dEJsb2NrKCkpOwogICAgIEZhc3RCaXRWZWN0b3Igb3V0OwogICAgIG91dC5yZXNpemUoYmxvY2st
Pm91dCgpLm51bUJpdHMoKSk7Ci0gICAgY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCeXRlY29kZU9m
ZnNldChncmFwaCwgYmxvY2ssIGJ5dGVjb2RlT2Zmc2V0LCBvdXQpOworICAgIGNvbXB1dGVMb2Nh
bExpdmVuZXNzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2NrLCBpbnN0cnVjdGlvbnMsIGdyYXBo
LCBibG9jaywgYnl0ZWNvZGVPZmZzZXQsIG91dCk7CiAgICAgcmV0dXJuIG91dDsKIH0KIAotdGVt
cGxhdGU8dHlwZW5hbWUgR3JhcGg+Ci1pbmxpbmUgdm9pZCBCeXRlY29kZUxpdmVuZXNzUHJvcGFn
YXRpb246OnJ1bkxpdmVuZXNzRml4cG9pbnQoR3JhcGgmIGdyYXBoKQordGVtcGxhdGU8dHlwZW5h
bWUgQ29kZUJsb2NrVHlwZSwgdHlwZW5hbWUgSW5zdHJ1Y3Rpb25zPgoraW5saW5lIHZvaWQgQnl0
ZWNvZGVMaXZlbmVzc1Byb3BhZ2F0aW9uOjpydW5MaXZlbmVzc0ZpeHBvaW50KENvZGVCbG9ja1R5
cGUqIGNvZGVCbG9jaywgY29uc3QgSW5zdHJ1Y3Rpb25zJiBpbnN0cnVjdGlvbnMsIEJ5dGVjb2Rl
R3JhcGgmIGdyYXBoKQogewotICAgIGF1dG8qIGNvZGVCbG9jayA9IGdyYXBoLmNvZGVCbG9jaygp
OwogICAgIHVuc2lnbmVkIG51bWJlck9mVmFyaWFibGVzID0gY29kZUJsb2NrLT5udW1DYWxsZWVM
b2NhbHMoKTsKICAgICBmb3IgKEJ5dGVjb2RlQmFzaWNCbG9jayogYmxvY2sgOiBncmFwaCkgewog
ICAgICAgICBibG9jay0+aW4oKS5yZXNpemUobnVtYmVyT2ZWYXJpYWJsZXMpOwpAQCAtMTg2LDcg
KzE4NCw3IEBAIGlubGluZSB2b2lkIEJ5dGVjb2RlTGl2ZW5lc3NQcm9wYWdhdGlvbjoKICAgICAg
ICAgICAgIGZvciAoQnl0ZWNvZGVCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29ycygpKQogICAgICAgICAgICAgICAgIG5ld091dCB8PSBzdWNjZXNzb3ItPmluKCk7CiAgICAg
ICAgICAgICBibG9jay0+b3V0KCkgPSBuZXdPdXQ7Ci0gICAgICAgICAgICBjaGFuZ2VkIHw9IGNv
bXB1dGVMb2NhbExpdmVuZXNzRm9yQmxvY2soZ3JhcGgsIGJsb2NrLmdldCgpKTsKKyAgICAgICAg
ICAgIGNoYW5nZWQgfD0gY29tcHV0ZUxvY2FsTGl2ZW5lc3NGb3JCbG9jayhjb2RlQmxvY2ssIGlu
c3RydWN0aW9ucywgZ3JhcGgsIGJsb2NrLmdldCgpKTsKICAgICAgICAgfQogICAgIH0gd2hpbGUg
KGNoYW5nZWQpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlUmV3cml0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9CeXRlY29kZVJld3JpdGVyLmNwcAkocmV2aXNpb24gMjIzOTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCwxMyArMzgsMTMgQEAgdm9pZCBCeXRlY29kZVJld3JpdGVyOjphcHBseU1vZGlmaWNh
dGlvbgogICAgIGZvciAoc2l6ZV90IGluc2VydGlvbkluZGV4ID0gbV9pbnNlcnRpb25zLnNpemUo
KTsgaW5zZXJ0aW9uSW5kZXgtLTspIHsKICAgICAgICAgSW5zZXJ0aW9uJiBpbnNlcnRpb24gPSBt
X2luc2VydGlvbnNbaW5zZXJ0aW9uSW5kZXhdOwogICAgICAgICBpZiAoaW5zZXJ0aW9uLnR5cGUg
PT0gSW5zZXJ0aW9uOjpUeXBlOjpSZW1vdmUpCi0gICAgICAgICAgICBtX2dyYXBoLmluc3RydWN0
aW9ucygpLnJlbW92ZShpbnNlcnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2VydGlvbi5s
ZW5ndGgoKSk7CisgICAgICAgICAgICBtX2luc3RydWN0aW9ucy5yZW1vdmUoaW5zZXJ0aW9uLmlu
ZGV4LmJ5dGVjb2RlT2Zmc2V0LCBpbnNlcnRpb24ubGVuZ3RoKCkpOwogICAgICAgICBlbHNlIHsK
ICAgICAgICAgICAgIGlmIChpbnNlcnRpb24uaW5jbHVkZUJyYW5jaCA9PSBJbmNsdWRlQnJhbmNo
OjpZZXMpIHsKICAgICAgICAgICAgICAgICBpbnQgZmluYWxPZmZzZXQgPSBpbnNlcnRpb24uaW5k
ZXguYnl0ZWNvZGVPZmZzZXQgKyBjYWxjdWxhdGVEaWZmZXJlbmNlKG1faW5zZXJ0aW9ucy5iZWdp
bigpLCBtX2luc2VydGlvbnMuYmVnaW4oKSArIGluc2VydGlvbkluZGV4KTsKICAgICAgICAgICAg
ICAgICBhZGp1c3RKdW1wVGFyZ2V0c0luRnJhZ21lbnQoZmluYWxPZmZzZXQsIGluc2VydGlvbik7
CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBtX2dyYXBoLmluc3RydWN0aW9ucygpLmluc2Vy
dFZlY3RvcihpbnNlcnRpb24uaW5kZXguYnl0ZWNvZGVPZmZzZXQsIGluc2VydGlvbi5pbnN0cnVj
dGlvbnMpOworICAgICAgICAgICAgbV9pbnN0cnVjdGlvbnMuaW5zZXJ0VmVjdG9yKGluc2VydGlv
bi5pbmRleC5ieXRlY29kZU9mZnNldCwgaW5zZXJ0aW9uLmluc3RydWN0aW9ucyk7CiAgICAgICAg
IH0KICAgICB9CiAgICAgbV9pbnNlcnRpb25zLmNsZWFyKCk7CkBAIC01Niw4ICs1Niw3IEBAIHZv
aWQgQnl0ZWNvZGVSZXdyaXRlcjo6ZXhlY3V0ZSgpCiAgICAgICAgIHJldHVybiBsaHMuaW5kZXgg
PCByaHMuaW5kZXg7CiAgICAgfSk7CiAKLSAgICBVbmxpbmtlZENvZGVCbG9jayogY29kZUJsb2Nr
ID0gbV9ncmFwaC5jb2RlQmxvY2soKTsKLSAgICBjb2RlQmxvY2stPmFwcGx5TW9kaWZpY2F0aW9u
KCp0aGlzKTsKKyAgICBtX2NvZGVCbG9jay0+YXBwbHlNb2RpZmljYXRpb24oKnRoaXMsIG1faW5z
dHJ1Y3Rpb25zKTsKIH0KIAogdm9pZCBCeXRlY29kZVJld3JpdGVyOjphZGp1c3RKdW1wVGFyZ2V0
c0luRnJhZ21lbnQodW5zaWduZWQgZmluYWxPZmZzZXQsIEluc2VydGlvbiYgaW5zZXJ0aW9uKQpA
QCAtNjksOCArNjgsNyBAQCB2b2lkIEJ5dGVjb2RlUmV3cml0ZXI6OmFkanVzdEp1bXBUYXJnZXRz
CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW5zdHJ1Y3Rpb24udS5vcGNvZGU7CiAgICAg
ICAgIGlmIChpc0JyYW5jaChvcGNvZGVJRCkpIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGJ5dGVj
b2RlT2Zmc2V0ID0gZmluYWxPZmZzZXQgKyBmcmFnbWVudE9mZnNldDsKLSAgICAgICAgICAgIFVu
bGlua2VkQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBtX2dyYXBoLmNvZGVCbG9jaygpOwotICAgICAg
ICAgICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQoY29kZUJsb2Nr
LCBpbnN0cnVjdGlvbnNCZWdpbiwgZnJhZ21lbnRPZmZzZXQsIFsmXShpbnQzMl90JiBsYWJlbCkg
eworICAgICAgICAgICAgZXh0cmFjdFN0b3JlZEp1bXBUYXJnZXRzRm9yQnl0ZWNvZGVPZmZzZXQo
bV9jb2RlQmxvY2ssIGluc3RydWN0aW9uc0JlZ2luLCBmcmFnbWVudE9mZnNldCwgWyZdKGludDMy
X3QmIGxhYmVsKSB7CiAgICAgICAgICAgICAgICAgaW50IGFic29sdXRlT2Zmc2V0ID0gYWRqdXN0
QWJzb2x1dGVPZmZzZXQobGFiZWwpOwogICAgICAgICAgICAgICAgIGxhYmVsID0gYWJzb2x1dGVP
ZmZzZXQgLSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlT2Zmc2V0KTsKICAgICAgICAgICAgIH0p
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlUmV3cml0ZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVS
ZXdyaXRlci5oCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVSZXdyaXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjEsOCArMTYxLDEw
IEBAIHB1YmxpYzoKICAgICAgICAgSW5jbHVkZUJyYW5jaCYgbV9pbmNsdWRlQnJhbmNoOwogICAg
IH07CiAKLSAgICBCeXRlY29kZVJld3JpdGVyKEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxv
Y2s+JiBncmFwaCkKKyAgICBCeXRlY29kZVJld3JpdGVyKEJ5dGVjb2RlR3JhcGgmIGdyYXBoLCBV
bmxpbmtlZENvZGVCbG9jayogY29kZUJsb2NrLCBVbmxpbmtlZENvZGVCbG9jazo6VW5wYWNrZWRJ
bnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucykKICAgICAgICAgOiBtX2dyYXBoKGdyYXBoKQorICAg
ICAgICAsIG1fY29kZUJsb2NrKGNvZGVCbG9jaykKKyAgICAgICAgLCBtX2luc3RydWN0aW9ucyhp
bnN0cnVjdGlvbnMpCiAgICAgewogICAgIH0KIApAQCAtMTg4LDEyICsxOTAsMTIgQEAgcHVibGlj
OgogCiAgICAgdm9pZCByZW1vdmVCeXRlY29kZSh1bnNpZ25lZCBieXRlY29kZU9mZnNldCkKICAg
ICB7Ci0gICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoSW5zZXJ0aW9uIHsgSW5zZXJ0aW9uUG9p
bnQoYnl0ZWNvZGVPZmZzZXQsIFBvc2l0aW9uOjpPcmlnaW5hbEJ5dGVjb2RlUG9pbnQpLCBJbnNl
cnRpb246OlR5cGU6OlJlbW92ZSwgSW5jbHVkZUJyYW5jaDo6Tm8sIG9wY29kZUxlbmd0aChtX2dy
YXBoLmluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSksIHsgfSB9KTsKKyAg
ICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChJbnNlcnRpb24geyBJbnNlcnRpb25Qb2ludChieXRl
Y29kZU9mZnNldCwgUG9zaXRpb246Ok9yaWdpbmFsQnl0ZWNvZGVQb2ludCksIEluc2VydGlvbjo6
VHlwZTo6UmVtb3ZlLCBJbmNsdWRlQnJhbmNoOjpObywgb3Bjb2RlTGVuZ3RoKG1faW5zdHJ1Y3Rp
b25zW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSksIHsgfSB9KTsKICAgICB9CiAKICAgICB2b2lk
IGV4ZWN1dGUoKTsKIAotICAgIEJ5dGVjb2RlR3JhcGg8VW5saW5rZWRDb2RlQmxvY2s+JiBncmFw
aCgpIHsgcmV0dXJuIG1fZ3JhcGg7IH0KKyAgICBCeXRlY29kZUdyYXBoJiBncmFwaCgpIHsgcmV0
dXJuIG1fZ3JhcGg7IH0KIAogICAgIGludCBhZGp1c3RBYnNvbHV0ZU9mZnNldChpbnQgYWJzb2x1
dGVPZmZzZXQpCiAgICAgewpAQCAtMjE1LDcgKzIxNyw5IEBAIHByaXZhdGU6CiAgICAgaW50IGFk
anVzdEp1bXBUYXJnZXQoSW5zZXJ0aW9uUG9pbnQgc3RhcnRQb2ludCwgSW5zZXJ0aW9uUG9pbnQg
anVtcFRhcmdldFBvaW50KTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJdGVyYXRvcj4gaW50IGNh
bGN1bGF0ZURpZmZlcmVuY2UoSXRlcmF0b3IgYmVnaW4sIEl0ZXJhdG9yIGVuZCk7CiAKLSAgICBC
eXRlY29kZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgbV9ncmFwaDsKKyAgICBCeXRlY29kZUdy
YXBoJiBtX2dyYXBoOworICAgIFVubGlua2VkQ29kZUJsb2NrKiBtX2NvZGVCbG9jazsKKyAgICBV
bmxpbmtlZENvZGVCbG9jazo6VW5wYWNrZWRJbnN0cnVjdGlvbnMmIG1faW5zdHJ1Y3Rpb25zOwog
ICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lvbiAyMjM5
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzk4LDEwICszOTgsMTkgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soVk0q
IHZtLCBTdHJ1Y3R1cmUqIAogICAgIHNldE51bVBhcmFtZXRlcnModW5saW5rZWRDb2RlQmxvY2st
Pm51bVBhcmFtZXRlcnMoKSk7CiB9CiAKKy8vIFRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBmdW5j
dGlvbiBpcyB0byBnZW5lcmF0ZSBsaW5rZWQgYnl0ZWNvZGUgZnJvbSB1bmxpbmtlZCBieXRlY29k
ZS4gVGhlIHByb2Nlc3MKKy8vIG9mIGxpbmtpbmcgaXMgdGFraW5nIGFuIGFic3RyYWN0IHJlcHJl
c2VudGF0aW9uIG9mIGJ5dGVjb2RlIGFuZCB0eWluZyBpdCB0byBhIEdsb2JhbE9iamVjdCBhbmQg
c2NvcGUKKy8vIGNoYWluLiBGb3IgZXhhbXBsZSwgdGhpcyBwcm9jZXNzIGFsbG93cyB1cyB0byBj
YWNoZSB0aGUgZGVwdGggb2YgbGV4aWNhbCBlbnZpcm9ubWVudCByZWFkcyB0aGF0IHJlYWNoCisv
LyBvdXRzaWRlIG9mIHRoaXMgQ29kZUJsb2NrJ3MgY29tcGlsYXRpb24gdW5pdC4gSXQgYWxzbyBh
bGxvd3MgdXMgdG8gZ2VuZXJhdGUgcGFydGljdWxhciBjb25zdGFudHMgdGhhdAorLy8gd2UgY2Fu
J3QgZ2VuZXJhdGUgZHVyaW5nIHVubGlua2VkIGJ5dGVjb2RlIGdlbmVyYXRpb24uIFRoaXMgcHJv
Y2VzcyBpcyBub3QgYWxsb3dlZCB0byBnZW5lcmF0ZSBjb250cm9sCisvLyBmbG93IG9yIGludHJv
ZHVjZSBuZXcgbG9jYWxzLiBUaGUgcmVhc29uIGZvciB0aGlzIGlzIHdlIHJlbHkgb24gbGl2ZW5l
c3MgYW5hbHlzaXMgdG8gYmUgdGhlIHNhbWUgZm9yCisvLyBhbGwgdGhlIENvZGVCbG9ja3Mgb2Yg
YW4gVW5saW5rZWRDb2RlQmxvY2suIFdlIHJlbHkgb24gdGhpcyBmYWN0IGJ5IGNhY2hpbmcgdGhl
IGxpdmVuZXNzIGFuYWx5c2lzCisvLyBpbnNpZGUgVW5saW5rZWRDb2RlQmxvY2suCiBib29sIENv
ZGVCbG9jazo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBTY3JpcHRFeGVjdXRhYmxlKiBvd25lckV4
ZWN1dGFibGUsIFVubGlua2VkQ29kZUJsb2NrKiB1bmxpbmtlZENvZGVCbG9jaywKICAgICBKU1Nj
b3BlKiBzY29wZSkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisKICAgICBhdXRv
IHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKIAogICAgIGlmICh2bS50eXBl
UHJvZmlsZXIoKSB8fCB2bS5jb250cm9sRmxvd1Byb2ZpbGVyKCkpCkBAIC0xNzE5LDcgKzE3Mjgs
NyBAQCB2b2lkIENvZGVCbG9jazo6ZW5zdXJlQ2F0Y2hMaXZlbmVzc0lzQ29tCiAgICAgLy8gaXMg
YmVjYXVzZSB0aGUgdmFyaWFibGVzIHRoYXQgdGhlIG9wX2NhdGNoIGRlZmluZXMgbWlnaHQgYmUg
ZGVhZCwgYW5kCiAgICAgLy8gd2UgY2FuIGF2b2lkIHByb2ZpbGluZyB0aGVtIGFuZCBleHRyYWN0
aW5nIHRoZW0gd2hlbiBkb2luZyBPU1IgZW50cnkKICAgICAvLyBpbnRvIHRoZSBERkcuCi0gICAg
RmFzdEJpdFZlY3RvciBsaXZlTG9jYWxzID0gYnl0ZWNvZGVMaXZlbmVzcy5nZXRMaXZlbmVzc0lu
Zm9BdEJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0ICsgT1BDT0RFX0xFTkdUSChvcF9jYXRj
aCkpOworICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUxvY2FscyA9IGJ5dGVjb2RlTGl2ZW5lc3MuZ2V0
TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNldCh0aGlzLCBieXRlY29kZU9mZnNldCArIE9QQ09E
RV9MRU5HVEgob3BfY2F0Y2gpKTsKICAgICBWZWN0b3I8VmlydHVhbFJlZ2lzdGVyPiBsaXZlT3Bl
cmFuZHM7CiAgICAgbGl2ZU9wZXJhbmRzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkobGl2ZUxvY2Fs
cy5iaXRDb3VudCgpKTsKICAgICBsaXZlTG9jYWxzLmZvckVhY2hTZXRCaXQoWyZdICh1bnNpZ25l
ZCBsaXZlTG9jYWwpIHsKQEAgLTI4NTIsNyArMjg2MSw3IEBAIHZvaWQgQ29kZUJsb2NrOjp2YWxp
ZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAv
LyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2Rl
QmxvY2sgZm9vdHByaW50LgogICAgIAotICAgIEZhc3RCaXRWZWN0b3IgbGl2ZUF0SGVhZCA9IGxp
dmVuZXNzLmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoMCk7CisgICAgRmFzdEJpdFZl
Y3RvciBsaXZlQXRIZWFkID0gbGl2ZW5lc3MuZ2V0TGl2ZW5lc3NJbmZvQXRCeXRlY29kZU9mZnNl
dCh0aGlzLCAwKTsKICAgICAKICAgICBpZiAobGl2ZUF0SGVhZC5udW1CaXRzKCkgIT0gc3RhdGlj
X2Nhc3Q8c2l6ZV90PihtX251bUNhbGxlZUxvY2FscykpIHsKICAgICAgICAgYmVnaW5WYWxpZGF0
aW9uRGlkRmFpbCgpOwpAQCAtMzIyNiwxNyArMzIzNSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
TWF0aElDU3RhdHMoKQogI2VuZGlmCiB9CiAKLUJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgQ29k
ZUJsb2NrOjpsaXZlbmVzc0FuYWx5c2lzU2xvdygpCi17Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gYW5hbHlzaXMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcz4odGhpcyk7Ci0gICAgewotICAgICAgICBDb25jdXJyZW50SlNM
b2NrZXIgbG9ja2VyKG1fbG9jayk7Ci0gICAgICAgIGlmICghbV9saXZlbmVzc0FuYWx5c2lzKQot
ICAgICAgICAgICAgbV9saXZlbmVzc0FuYWx5c2lzID0gV1RGTW92ZShhbmFseXNpcyk7Ci0gICAg
ICAgIHJldHVybiAqbV9saXZlbmVzc0FuYWx5c2lzOwotICAgIH0KLX0KLQogdm9pZCBzZXRQcmlu
dGVyKFByaW50ZXI6OlByaW50UmVjb3JkJiByZWNvcmQsIENvZGVCbG9jayogY29kZUJsb2NrKQog
ewogICAgIFByaW50ZXI6OnNldFByaW50ZXIocmVjb3JkLCB0b0NTdHJpbmcoY29kZUJsb2NrKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZp
c2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw2ICsxMTUsNyBAQCBjbGFzcyBDb2RlQmxvY2sgOiBw
dWJsaWMgSlNDZWxsIHsKICAgICB9OwogCiBwdWJsaWM6CisKICAgICBlbnVtIENvcHlQYXJzZWRC
bG9ja1RhZyB7IENvcHlQYXJzZWRCbG9jayB9OwogCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IFN0cnVjdHVyZUZsYWdzID0gQmFzZTo6U3RydWN0dXJlRmxhZ3MgfCBTdHJ1Y3R1cmVJc0ltbW9y
dGFsOwpAQCAtNjAwLDEyICs2MDEsNyBAQCBwdWJsaWM6CiAKICAgICBCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoKQogICAgIHsKLSAgICAgICAgewotICAgICAgICAg
ICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2xvY2spOwotICAgICAgICAgICAgaWYgKCEh
bV9saXZlbmVzc0FuYWx5c2lzKQotICAgICAgICAgICAgICAgIHJldHVybiAqbV9saXZlbmVzc0Fu
YWx5c2lzOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBsaXZlbmVzc0FuYWx5c2lzU2xvdygp
OworICAgICAgICByZXR1cm4gbV91bmxpbmtlZENvZGUtPmxpdmVuZXNzQW5hbHlzaXModGhpcyk7
CiAgICAgfQogICAgIAogICAgIHZvaWQgdmFsaWRhdGUoKTsKQEAgLTEwNjEsOCArMTA1Nyw2IEBA
IHByaXZhdGU6CiAKICAgICBzdGQ6OmNocm9ubzo6c3RlYWR5X2Nsb2NrOjp0aW1lX3BvaW50IG1f
Y3JlYXRpb25UaW1lOwogCi0gICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcz4gbV9saXZlbmVzc0FuYWx5c2lzOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPFJhcmVEYXRh
PiBtX3JhcmVEYXRhOwogCiAgICAgVW5jb25kaXRpb25hbEZpbmFsaXplciBtX3VuY29uZGl0aW9u
YWxGaW5hbGl6ZXI7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5r
ZWRDb2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHJldmlzaW9uIDIyMzk1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogCiAj
aW5jbHVkZSAiQnl0ZWNvZGVHZW5lcmF0b3IuaCIKKyNpbmNsdWRlICJCeXRlY29kZUxpdmVuZXNz
QW5hbHlzaXMuaCIKICNpbmNsdWRlICJCeXRlY29kZVJld3JpdGVyLmgiCiAjaW5jbHVkZSAiQ2xh
c3NJbmZvLmgiCiAjaW5jbHVkZSAiQ29kZUNhY2hlLmgiCkBAIC0zNDAsMTUgKzM0MSwxNCBAQCBV
bmxpbmtlZEhhbmRsZXJJbmZvKiBVbmxpbmtlZENvZGVCbG9jazo6CiAgICAgcmV0dXJuIFVubGlu
a2VkSGFuZGxlckluZm86OmhhbmRsZXJGb3JJbmRleChtX3JhcmVEYXRhLT5tX2V4Y2VwdGlvbkhh
bmRsZXJzLCBpbmRleCwgcmVxdWlyZWRIYW5kbGVyKTsKIH0KIAotdm9pZCBVbmxpbmtlZENvZGVC
bG9jazo6YXBwbHlNb2RpZmljYXRpb24oQnl0ZWNvZGVSZXdyaXRlciYgcmV3cml0ZXIpCit2b2lk
IFVubGlua2VkQ29kZUJsb2NrOjphcHBseU1vZGlmaWNhdGlvbihCeXRlY29kZVJld3JpdGVyJiBy
ZXdyaXRlciwgVW5wYWNrZWRJbnN0cnVjdGlvbnMmIGluc3RydWN0aW9ucykKIHsKICAgICAvLyBC
ZWZvcmUgYXBwbHlpbmcgdGhlIGNoYW5nZXMsIHdlIGFkanVzdCB0aGUganVtcHMgYmFzZWQgb24g
dGhlIG9yaWdpbmFsIGJ5dGVjb2RlIG9mZnNldCwgdGhlIG9mZnNldCB0byB0aGUganVtcCB0YXJn
ZXQsIGFuZAogICAgIC8vIHRoZSBpbnNlcnRpb24gaW5mb3JtYXRpb24uCiAKLSAgICBCeXRlY29k
ZUdyYXBoPFVubGlua2VkQ29kZUJsb2NrPiYgZ3JhcGggPSByZXdyaXRlci5ncmFwaCgpOwotICAg
IFVubGlua2VkSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uc0JlZ2luID0gZ3JhcGguaW5zdHJ1Y3Rp
b25zKCkuYmVnaW4oKTsKKyAgICBVbmxpbmtlZEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbnNCZWdp
biA9IGluc3RydWN0aW9ucy5iZWdpbigpOyAvLyBPT1BTOiBtYWtlIHRoaXMgYW4gYWNjZXNzb3Ig
b24gcmV3cml0ZXIuCiAKLSAgICBmb3IgKGludCBieXRlY29kZU9mZnNldCA9IDAsIGluc3RydWN0
aW9uQ291bnQgPSBncmFwaC5pbnN0cnVjdGlvbnMoKS5zaXplKCk7IGJ5dGVjb2RlT2Zmc2V0IDwg
aW5zdHJ1Y3Rpb25Db3VudDspIHsKKyAgICBmb3IgKGludCBieXRlY29kZU9mZnNldCA9IDAsIGlu
c3RydWN0aW9uQ291bnQgPSBpbnN0cnVjdGlvbnMuc2l6ZSgpOyBieXRlY29kZU9mZnNldCA8IGlu
c3RydWN0aW9uQ291bnQ7KSB7CiAgICAgICAgIFVubGlua2VkSW5zdHJ1Y3Rpb24qIGN1cnJlbnQg
PSBpbnN0cnVjdGlvbnNCZWdpbiArIGJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICBPcGNvZGVJRCBv
cGNvZGVJRCA9IGN1cnJlbnRbMF0udS5vcGNvZGU7CiAgICAgICAgIGV4dHJhY3RTdG9yZWRKdW1w
VGFyZ2V0c0ZvckJ5dGVjb2RlT2Zmc2V0KHRoaXMsIGluc3RydWN0aW9uc0JlZ2luLCBieXRlY29k
ZU9mZnNldCwgWyZdKGludDMyX3QmIHJlbGF0aXZlT2Zmc2V0KSB7CkBAIC0zODcsNyArMzg3LDcg
QEAgdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6YXBwbHlNb2RpZmljYXRpbwogCiAgICAgLy8gQW5k
IHJlY29tcHV0ZSB0aGUganVtcCB0YXJnZXQgYmFzZWQgb24gdGhlIG1vZGlmaWVkIHVubGlua2Vk
IGluc3RydWN0aW9ucy4KICAgICBtX2p1bXBUYXJnZXRzLmNsZWFyKCk7Ci0gICAgcmVjb21wdXRl
UHJlY2lzZUp1bXBUYXJnZXRzKHRoaXMsIGdyYXBoLmluc3RydWN0aW9ucygpLmJlZ2luKCksIGdy
YXBoLmluc3RydWN0aW9ucygpLnNpemUoKSwgbV9qdW1wVGFyZ2V0cyk7CisgICAgcmVjb21wdXRl
UHJlY2lzZUp1bXBUYXJnZXRzKHRoaXMsIGluc3RydWN0aW9ucy5iZWdpbigpLCBpbnN0cnVjdGlv
bnMuc2l6ZSgpLCBtX2p1bXBUYXJnZXRzKTsKIH0KIAogdm9pZCBVbmxpbmtlZENvZGVCbG9jazo6
c2hyaW5rVG9GaXQoKQpAQCAtNDE5LDQgKzQxOSwyMSBAQCB2b2lkIFVubGlua2VkQ29kZUJsb2Nr
OjpkdW1wKFByaW50U3RyZWFtCiB7CiB9CiAKK0J5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgVW5s
aW5rZWRDb2RlQmxvY2s6OmxpdmVuZXNzQW5hbHlzaXNTbG93KENvZGVCbG9jayogY29kZUJsb2Nr
KQoreworICAgIFJFTEVBU0VfQVNTRVJUKGNvZGVCbG9jay0+dW5saW5rZWRDb2RlQmxvY2soKSA9
PSB0aGlzKTsKKworCisgICAgeworICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9j
ayk7CisgICAgICAgIGlmICghbV9saXZlbmVzcykgeworICAgICAgICAgICAgLy8gVGhlcmUgaXMg
YSBjaGFuY2UgdHdvIGNvbXBpbGVyIHRocmVhZHMgcmFjZWQgdG8gdGhlIHNsb3cgcGF0aC4KKyAg
ICAgICAgICAgIC8vIFdlIGRlZmVuZCBhZ2FpbnN0IGNvbXB1dGluZyBsaXZlbmVzcyB0d2ljZS4K
KyAgICAgICAgICAgIG1fbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcz4oY29kZUJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1
cm4gKm1fbGl2ZW5lc3M7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDIyMzk1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9VbmxpbmtlZENv
ZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw5IEBACiAKIG5hbWVzcGFjZSBK
U0MgewogCitjbGFzcyBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXM7CiBjbGFzcyBCeXRlY29kZVJl
d3JpdGVyOworY2xhc3MgQ29kZUJsb2NrOwogY2xhc3MgRGVidWdnZXI7CiBjbGFzcyBGdW5jdGlv
bkV4ZWN1dGFibGU7CiBjbGFzcyBQYXJzZXJFcnJvcjsKQEAgLTM5Nyw2ICszOTksMTMgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXMmIGxpdmVuZXNzQW5hbHlzaXMoQ29kZUJsb2NrKiBjb2RlQmxvY2sp
CisgICAgeworICAgICAgICBpZiAobV9saXZlbmVzcykKKyAgICAgICAgICAgIHJldHVybiAqbV9s
aXZlbmVzczsKKyAgICAgICAgcmV0dXJuIGxpdmVuZXNzQW5hbHlzaXNTbG93KGNvZGVCbG9jayk7
CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgVW5saW5rZWRDb2RlQmxvY2soVk0qLCBTdHJ1Y3R1
cmUqLCBDb2RlVHlwZSwgY29uc3QgRXhlY3V0YWJsZUluZm8mLCBEZWJ1Z2dlck1vZGUpOwogICAg
IH5VbmxpbmtlZENvZGVCbG9jaygpOwpAQCAtNDA4LDcgKzQxNyw3IEBAIHByb3RlY3RlZDoKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQnl0ZWNvZGVSZXdyaXRlcjsKLSAgICB2b2lkIGFw
cGx5TW9kaWZpY2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImKTsKKyAgICB2b2lkIGFwcGx5TW9kaWZp
Y2F0aW9uKEJ5dGVjb2RlUmV3cml0ZXImLCBVbnBhY2tlZEluc3RydWN0aW9ucyYpOwogCiAgICAg
dm9pZCBjcmVhdGVSYXJlRGF0YUlmTmVjZXNzYXJ5KCkKICAgICB7CkBAIC00MTksMTAgKzQyOCwx
MiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIHZvaWQgZ2V0TGluZUFuZENvbHVtbihjb25zdCBF
eHByZXNzaW9uUmFuZ2VJbmZvJiwgdW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pIGNv
bnN0OworICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyYgbGl2ZW5lc3NBbmFseXNpc1Nsb3co
Q29kZUJsb2NrKik7CiAKICAgICBpbnQgbV9udW1QYXJhbWV0ZXJzOwogCiAgICAgc3RkOjp1bmlx
dWVfcHRyPFVubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0+IG1fdW5saW5rZWRJbnN0cnVjdGlvbnM7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcz4gbV9saXZlbmVz
czsKIAogICAgIFZpcnR1YWxSZWdpc3RlciBtX3RoaXNSZWdpc3RlcjsKICAgICBWaXJ0dWFsUmVn
aXN0ZXIgbV9zY29wZVJlZ2lzdGVyOwpAQCAtNDQ4LDYgKzQ1OSw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9saW5lQ291bnQ7CiAgICAgdW5zaWduZWQgbV9lbmRDb2x1bW47CiAKKyAgICBM
b2NrIG1fbG9jazsKICAgICBUcmlTdGF0ZSBtX2RpZE9wdGltaXplOwogICAgIFNvdXJjZVBhcnNl
TW9kZSBtX3BhcnNlTW9kZTsKICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA4Niw3ICsxMDg2LDcgQEAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIEdyYXBoOjpsaXZlbmVzc0Zv
cgogICAgICAgICByZXR1cm4gKml0ZXItPnZhbHVlOwogICAgIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxGdWxsQnl0ZWNvZGVMaXZlbmVzcz4gbGl2ZW5lc3MgPSBzdGQ6Om1ha2VfdW5pcXVlPEZ1bGxC
eXRlY29kZUxpdmVuZXNzPigpOwotICAgIGNvZGVCbG9jay0+bGl2ZW5lc3NBbmFseXNpcygpLmNv
bXB1dGVGdWxsTGl2ZW5lc3MoKmxpdmVuZXNzKTsKKyAgICBjb2RlQmxvY2stPmxpdmVuZXNzQW5h
bHlzaXMoKS5jb21wdXRlRnVsbExpdmVuZXNzKGNvZGVCbG9jaywgKmxpdmVuZXNzKTsKICAgICBG
dWxsQnl0ZWNvZGVMaXZlbmVzcyYgcmVzdWx0ID0gKmxpdmVuZXNzOwogICAgIG1fYnl0ZWNvZGVM
aXZlbmVzcy5hZGQoY29kZUJsb2NrLCBXVEZNb3ZlKGxpdmVuZXNzKSk7CiAgICAgcmV0dXJuIHJl
c3VsdDsKQEAgLTExMDQsNyArMTEwNCw3IEBAIEJ5dGVjb2RlS2lsbHMmIEdyYXBoOjpraWxsc0Zv
cihDb2RlQmxvY2sKICAgICAgICAgcmV0dXJuICppdGVyLT52YWx1ZTsKICAgICAKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Qnl0ZWNvZGVLaWxscz4ga2lsbHMgPSBzdGQ6Om1ha2VfdW5pcXVlPEJ5dGVj
b2RlS2lsbHM+KCk7Ci0gICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtp
bGxzKCpraWxscyk7CisgICAgY29kZUJsb2NrLT5saXZlbmVzc0FuYWx5c2lzKCkuY29tcHV0ZUtp
bGxzKGNvZGVCbG9jaywgKmtpbGxzKTsKICAgICBCeXRlY29kZUtpbGxzJiByZXN1bHQgPSAqa2ls
bHM7CiAgICAgbV9ieXRlY29kZUtpbGxzLmFkZChjb2RlQmxvY2ssIFdURk1vdmUoa2lsbHMpKTsK
ICAgICByZXR1cm4gcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQ
bGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4u
Y3BwCShyZXZpc2lvbiAyMjM5NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Bs
YW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OTcsNyArNjk3LDggQEAgdm9pZCBQbGFuOjpjbGVh
bk11c3RIYW5kbGVWYWx1ZXNJZk5lY2VzcwogICAgIGlmICghbXVzdEhhbmRsZVZhbHVlcy5udW1i
ZXJPZkxvY2FscygpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgRmFzdEJpdFZlY3RvciBs
aXZlbmVzcyA9IGNvZGVCbG9jay0+YWx0ZXJuYXRpdmUoKS0+bGl2ZW5lc3NBbmFseXNpcygpLmdl
dExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQob3NyRW50cnlCeXRlY29kZUluZGV4KTsKKyAg
ICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlID0gY29kZUJsb2NrLT5hbHRlcm5hdGl2ZSgpOworICAg
IEZhc3RCaXRWZWN0b3IgbGl2ZW5lc3MgPSBhbHRlcm5hdGl2ZS0+bGl2ZW5lc3NBbmFseXNpcygp
LmdldExpdmVuZXNzSW5mb0F0Qnl0ZWNvZGVPZmZzZXQoYWx0ZXJuYXRpdmUsIG9zckVudHJ5Qnl0
ZWNvZGVJbmRleCk7CiAgICAgCiAgICAgZm9yICh1bnNpZ25lZCBsb2NhbCA9IG11c3RIYW5kbGVW
YWx1ZXMubnVtYmVyT2ZMb2NhbHMoKTsgbG9jYWwtLTspIHsKICAgICAgICAgaWYgKCFsaXZlbmVz
c1tsb2NhbF0pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAyMjM5
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAg
ICAgICAgICAgICAvLyBJbnN0ZWFkLCB3ZSBqdXN0IGZpbmQgdGhlIG1pbmltdW0gYnl0ZWNvZGUg
b2Zmc2V0IHRoYXQgaXMgcmVhY2hhYmxlLCBhbmQKICAgICAgICAgICAgIC8vIGNvbXBpbGUgY29k
ZSBmcm9tIHRoYXQgYnl0ZWNvZGUgb2Zmc2V0IG9ud2FyZHMuCiAKLSAgICAgICAgICAgIEJ5dGVj
b2RlR3JhcGg8Q29kZUJsb2NrPiBncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlvbnMpOwor
ICAgICAgICAgICAgQnl0ZWNvZGVHcmFwaCBncmFwaChtX2NvZGVCbG9jaywgbV9pbnN0cnVjdGlv
bnMpOwogICAgICAgICAgICAgQnl0ZWNvZGVCYXNpY0Jsb2NrKiBibG9jayA9IGdyYXBoLmZpbmRC
YXNpY0Jsb2NrRm9yQnl0ZWNvZGVPZmZzZXQobV9sb29wT1NSRW50cnlCeXRlY29kZU9mZnNldCk7
CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChibG9jayk7CiAK
</data>

          </attachment>
      

    </bug>

</bugzilla>