<?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>214890</bug_id>
          
          <creation_ts>2020-07-28 12:44:43 -0700</creation_ts>
          <short_desc>Cache Structure::attributeChangeTransition()</short_desc>
          <delta_ts>2020-08-13 21:11:14 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142933</see_also>
          <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>
          <dependson>215483</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Shvayka">ashvayka</reporter>
          <assigned_to name="Alexey Shvayka">ashvayka</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1675742</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-28 12:44:43 -0700</bug_when>
    <thetext>Cache Structure::attributeChangeTransition()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1675743</commentid>
    <comment_count>1</comment_count>
      <attachid>405396</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-07-28 12:50:40 -0700</bug_when>
    <thetext>Created attachment 405396
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677699</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-04 12:45:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/66536975&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678113</commentid>
    <comment_count>3</comment_count>
      <attachid>406050</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-05 15:28:42 -0700</bug_when>
    <thetext>Created attachment 406050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678114</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-05 15:29:11 -0700</bug_when>
    <thetext>(In reply to Alexey Shvayka from comment #3)
&gt; Created attachment 406050 [details]
&gt; Patch

Warmed-up runs, --outer 16:

                                               r265275                    patch

redefine-property-previous-attributes      284.5728+-3.6318     ^    150.2427+-1.4774        ^ definitely 1.8941x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678122</commentid>
    <comment_count>5</comment_count>
      <attachid>406053</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-05 16:00:50 -0700</bug_when>
    <thetext>Created attachment 406053
Patch

Fix 32-bit build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1678220</commentid>
    <comment_count>6</comment_count>
      <attachid>406053</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-06 02:18:03 -0700</bug_when>
    <thetext>Comment on attachment 406053
Patch

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

Nice. Looks good. But I set r- since I found a bug in attributeChangeTransition.

&gt; Source/JavaScriptCore/runtime/Structure.cpp:-733
&gt; +    Structure* transition = create(vm, structure);
&gt;  
&gt; -    if (attributes &amp; PropertyAttribute::ReadOnly)
&gt; -        structure-&gt;setContainsReadOnlyProperties();
&gt; +    PropertyTable* table = structure-&gt;copyPropertyTableForPinning(vm);
&gt; +    transition-&gt;pin(holdLock(transition-&gt;m_lock), vm, table);
&gt; +    transition-&gt;setMaxOffset(vm, structure-&gt;maxOffset());
&gt; +    transition-&gt;m_transitionPropertyName = propertyName.uid();
&gt; +    transition-&gt;setTransitionPropertyAttributes(attributes);
&gt; +    transition-&gt;setTransitionKind(TransitionKind::PropertyAttributeChange);
&gt;  
&gt; -    if (attributes &amp; PropertyAttribute::DontEnum)
&gt; -        structure-&gt;setIsQuickPropertyAccessAllowedForEnumeration(false);
&gt; +    setEntryAttributes(transition);
&gt; +    checkOffset(transition-&gt;transitionOffset(), transition-&gt;inlineCapacity());
&gt; +    if (!structure-&gt;isDictionary()) {
&gt; +        GCSafeConcurrentJSLocker locker(structure-&gt;m_lock, vm.heap);
&gt; +        structure-&gt;m_transitionTable.add(vm, transition);
&gt; +    }
&gt;  
&gt; -    structure-&gt;checkOffsetConsistency();
&gt; -    return structure;

We should set transitionOffset since this transition should be handled too in forEachPropertyConcurrently. And we should set setProtectPropertyTableWhileTransitioning while transitioning to make forEachPropertyConcurrently work.
So basically, we should follow to the protocol used in add/remove transitions here.
Let&apos;s check forEachPropertyConcurrently code, and ensure this works if attribute-change transition is introduced.

&gt; Source/JavaScriptCore/runtime/StructureTransitionTable.h:59
&gt; +    AllocateUndecided =           0 | FirstNonPropertyTransition,
&gt; +    AllocateInt32 =               1 | FirstNonPropertyTransition,
&gt; +    AllocateDouble =              2 | FirstNonPropertyTransition,
&gt; +    AllocateContiguous =          3 | FirstNonPropertyTransition,
&gt; +    AllocateArrayStorage =        4 | FirstNonPropertyTransition,
&gt; +    AllocateSlowPutArrayStorage = 5 | FirstNonPropertyTransition,
&gt; +    SwitchToSlowPutArrayStorage = 6 | FirstNonPropertyTransition,
&gt; +    AddIndexedAccessors =         7 | FirstNonPropertyTransition,
&gt; +    PreventExtensions =           8 | FirstNonPropertyTransition,
&gt; +    Seal =                        9 | FirstNonPropertyTransition,
&gt; +    Freeze =                     10 | FirstNonPropertyTransition,

Why not making them

4,
5,
6,
...

And checking `kind &gt;= FirstNonPropertyTransition` instead of `kind &amp; FirstNonPropertyTransition`?
In this way, we can keep bitwidth of TransitionKind as small as possible, which allows future extension.
And can you note that only 6bits are allowed for TransitionKind here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680161</commentid>
    <comment_count>7</comment_count>
      <attachid>406557</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-13 16:44:15 -0700</bug_when>
    <thetext>Created attachment 406557
Patch

Make TransitionKind smaller, fix forEachPropertyConcurrently() interop, and extract Structure::transitionCountHasOverflowed().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680170</commentid>
    <comment_count>8</comment_count>
      <attachid>406557</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2020-08-13 17:27:01 -0700</bug_when>
    <thetext>Comment on attachment 406557
Patch

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

r=me

&gt; Source/JavaScriptCore/runtime/Structure.cpp:754
&gt; +    transition-&gt;pin(holdLock(transition-&gt;m_lock), vm, table);

Yes, this pinning is important in this patch since this prevents `forEachPropertyConcurrently` to traversing this attribute-change transition (because this structure is pinned).
We should later extend it to avoid pinning. And use `pinForCaching` to keep transition count. For dictionary, we should pin.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680199</commentid>
    <comment_count>9</comment_count>
      <attachid>406566</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-13 20:10:55 -0700</bug_when>
    <thetext>Created attachment 406566
Patch

Use pinForCaching() for non-dictionaries and rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680200</commentid>
    <comment_count>10</comment_count>
      <attachid>406567</attachid>
    <who name="Alexey Shvayka">ashvayka</who>
    <bug_when>2020-08-13 20:14:39 -0700</bug_when>
    <thetext>Created attachment 406567
Patch

Use pinForCaching() for non-dictionaries and rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1680209</commentid>
    <comment_count>11</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-13 21:11:13 -0700</bug_when>
    <thetext>Committed r265642: &lt;https://trac.webkit.org/changeset/265642&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 406567.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405396</attachid>
            <date>2020-07-28 12:50:40 -0700</date>
            <delta_ts>2020-08-05 15:28:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200728225039.patch</filename>
            <type>text/plain</type>
            <size>3746</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjY1MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBA
CisyMDIwLTA3LTI4ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNoQGdtYWlsLmNvbT4KKwor
ICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oKQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE0ODkwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBydW50aW1lL1N0
cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJh
bnNpdGlvbik6CisKIDIwMjAtMDctMjggIENhaXRsaW4gUG90dGVyICA8Y2FpdHBAaWdhbGlhLmNv
bT4KIAogICAgICAgICBbSlNDXSBhZGQgSUMgc3VwcG9ydCBmb3Igb3BfZ2V0X3ByaXZhdGVfbmFt
ZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShy
ZXZpc2lvbiAyNjQ5NDQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MDksMjggKzcwOSw0OCBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjphdHRy
aWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3Bl
cnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7Ci0gICAgaWYgKCFz
dHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgU3RydWN0dXJl
KiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotCi0gICAgICAgIFByb3BlcnR5
VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0p
OwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwg
dm0sIHRhYmxlKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1
cmUtPm1heE9mZnNldCgpKTsKLSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRp
b247CisgICAgYXV0byBwdXRBdHRyaWJ1dGVzID0gWyZdKFN0cnVjdHVyZSogc3RydWN0dXJlKSB7
CisgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9w
ZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CisgICAgICAgIEFTU0VSVChl
bnRyeSk7CisgICAgICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0cmlidXRlczsKKworICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFkT25seSkKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMoKTsKKworICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpEb250RW51bSkKKyAgICAgICAg
ICAgIHN0cnVjdHVyZS0+c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0
aW9uKGZhbHNlKTsKKyAgICB9OworCisgICAgaWYgKHN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkgeworICAgICAgICBwdXRBdHRyaWJ1dGVzKHN0cnVjdHVyZSk7CisgICAgICAg
IHN0cnVjdHVyZS0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgICAgICByZXR1cm4gc3Ry
dWN0dXJlOwogICAgIH0KIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0dXJl
LT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Ci0gICAg
QVNTRVJUKGVudHJ5KTsKLSAgICBlbnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAg
Y29uc3RleHByIGJvb2wgaXNBZGRpdGlvbiA9IHRydWU7CisgICAgaWYgKFN0cnVjdHVyZSogZXhp
c3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVy
dHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgICAgICB2YWxpZGF0
ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgZXhpc3RpbmdU
cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKKyAgICB9CiAKLSAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpSZWFkT25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVy
dGllcygpOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJl
KTsKIAotICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQot
ICAgICAgICBzdHJ1Y3R1cmUtPnNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNv
cHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRM
b2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0
TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5t
X3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgdHJhbnNp
dGlvbi0+c2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICB0
cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uT2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25P
ZmZzZXQoKSk7CiAKKyAgICBwdXRBdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgIGNoZWNrT2Zm
c2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlvbi0+aW5saW5lQ2Fw
YWNpdHkoKSk7CisgICAgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2Vy
KHN0cnVjdHVyZS0+bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25UYWJsZS5hZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KKyAgICB0cmFuc2l0aW9uLT5j
aGVja09mZnNldENvbnNpc3RlbmN5KCk7CiAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNp
c3RlbmN5KCk7Ci0gICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsK
IH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZt
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406050</attachid>
            <date>2020-08-05 15:28:42 -0700</date>
            <delta_ts>2020-08-05 16:00:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200806012841.patch</filename>
            <type>text/plain</type>
            <size>50507</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjUzMDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTA1ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0cmlidXRl
cy5qczogQWRkZWQuCisKIDIwMjAtMDgtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBza2lwIHByaXZhdGUgZmllbGQgdGVzdApJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0
cmlidXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWRlZmlu
ZS1wcm9wZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVzLmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3JlZGVmaW5lLXByb3BlcnR5LXByZXZpb3VzLWF0dHJpYnV0ZXMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAordmFyIGRlc2MxID0ge3ZhbHVlOiAx
LCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogdHJ1ZX07
Cit2YXIgZGVzYzIgPSB7dmFsdWU6IDEsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiB0cnVlfTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkg
eworICAgIHZhciBvYmogPSB7Zm9vOiAxfTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShv
YmosICJmb28iLCBkZXNjMSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIs
IGRlc2MyKTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAiZm9vIiwgZGVzYzEpOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBkZXNjMik7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRlc2MxKTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqLCAiZm9vIiwgZGVzYzIpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMjAtMDgtMDUgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIENhY2hlIFN0cnVjdHVyZTo6YXR0
cmlidXRlQ2hhbmdlVHJhbnNpdGlvbigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTQ4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAgIDEuIFJld29ya3MgZW5jb2Rp
bmcgb2YgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkgdG8gZW5hYmxlIHN0b3Jp
bmcgYXR0cmlidXRlCisgICAgICAgICAgIGNoYW5nZSB0cmFuc2l0aW9ucyBpbiBhIHRyYW5zaXRp
b24gdGFibGUuIFNpbmNlIHRhYmxlIGVudHJ5IGF0dHJpYnV0ZXMgYXJlIGFsd2F5cworICAgICAg
ICAgICB1aW50OF90LCByZW1haW5pbmcgOCBiaXRzIGFyZSB1c2VkIGZvciBUcmFuc2l0aW9uS2lu
ZCB0byBhY2NvbW9kYXRlIG5vbi1wcm9wZXJ0eQorICAgICAgICAgICB0cmFuc2l0aW9ucywgcmVt
b3ZpbmcgYSBiaXQgaGFja3kgdG9BdHRyaWJ1dGVzKCkgYW5kIHV0aWxpemF0aW9uIG9mIHVudXNl
ZCBwb2ludGVyCisgICAgICAgICAgIGJpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBUcmFuc2l0aW9u
S2luZDo6VW5rbm93biB3ZSBjYW4gdmFsaWRhdGUgYWdhaW5zdCwgcmVtb3ZpbmcKKyAgICAgICAg
ICAgYSBwb3RlbnRpYWxseSB1bnNhZmUgImFkZGl0aW9uIHRyYW5zaXRpb24gYXMgYSBkZWZhdWx0
Ii4KKworICAgICAgICAyLiBGb3Igbm9uLWRpY3Rpb25hdHkgc3RydWN0dXJlLCBzYXZlcyBhdHRy
aWJ1dGUgY2hhbmdlIHRyYW5zaXRpb25zICh3aXRoIG1hdGVyaWFsaXplZAorICAgICAgICAgICBw
cm9wZXJ0eSB0YWJsZXMpIHRvIGEgdHJhbnNpdGlvbiB0YWJsZSwgbWFraW5nIHJlZGVmaW5pdGlv
biB0byBwcmV2aW91cyBhdHR0cmlidXRlcworICAgICAgICAgICBhIGZhc3QgcGF0aC4gSWYgdGhl
cmUgYXJlIHRvbyBtYW55IGF0dHJpYnV0ZSB0cmFuc2l0aW9ucywgdGhlIHN0cnVjdHVyZSBiZWNv
bWVzIGEKKyAgICAgICAgICAgZGljdGlvbmFyeSwgZmlyaW5nIGEgdHJhbnNpdGlvbiB3YXRjaHBv
aW50LiBUaGlzIGFkdmFuY2VzIHByb3ZpZGVkIG1pY3JvYmVuY2htYXJrCisgICAgICAgICAgIGJ5
IH45MCUsIGFuZCBwcm9ncmVzc2VzIFNwZWVkb21ldGVyMi9FbWJlckpTLURlYnVnLVRvZG9NVkMg
YnkgfjEyJSAofjUlIG92ZXIgcjI2NDU3MykuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQz
MlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGln
dW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRGcm9tQ29weU9uV3JpdGUpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlYWxU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3Vy
cmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAg
IChKU0M6OmNoYW5nZXNJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5
cGUpOgorICAgICAgICAoSlNDOjpwcmV2ZW50c0V4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpz
ZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNldHNSZWFkT25s
eU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjpIYXNoOjpLZXk6OktleSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6SGFzaDo6S2V5OjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OnRyYW5zaXRpb25LaW5kIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6dG9BdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OmlzQWRkaXRpb24gY29uc3QpOiBE
ZWxldGVkLgorCiAyMDIwLTA4LTA0ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIENoZWNrcG9pbnRTaWRlU3RhdGUgc2hvdWQgcGxheSBuaWNlbHkgd2l0
aCBTdGFja092ZXJmbG93RXhjZXB0aW9uIHVud2luZGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI2NTI3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1Myw3ICsxMDUzLDcgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRB
YwogICAgIGlmIChtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBZGRJbmRl
eGVkQWNjZXNzb3JzKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgVHJhbnNpdGlvbktpbmQ6OkFkZEluZGV4
ZWRBY2Nlc3NvcnMpKTsKICAgICAKICAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwODUsNyArMTA4NSw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxVbmRlY2kKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRp
YWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwotICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVy
ZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7CisgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
b2xkU3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVVbmRlY2lkZWQpOwogICAgIG51
a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3
QnV0dGVyZmx5OwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0OjpjcmVhdGVJbml0aQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5hdCh0
aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJl
SUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Cisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgb2xkU3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVJbnQzMik7CiAg
ICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1
dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwpAQCAtMTExMyw3ICsxMTEzLDcgQEAg
Q29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgICAgICBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKSA9IFBOYU47CiAgICAgU3RydWN0
dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUp
OworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlRG91Ymxl
KTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwg
bmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwpAQCAtMTEyNyw3ICsxMTI3
LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAgICAgICBu
ZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5z
dHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0
dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUs
IFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIG51a2VTdHJ1Y3R1cmVB
bmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkpOwogICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CkBAIC0xMTgyLDcgKzExODIsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuYXQodGhp
cywgaSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogCi0gICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCkBAIC0xMTk0LDcgKzExOTQsNyBAQCBDb250aWd1
b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSkgPSBQTmFOOwogICAgIAotICAgIHNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtMTIwNyw3ICsxMjA3LDcgQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7CisgICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgVHJh
bnNpdGlvbktpbmQ6OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpOwogfQogCkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAK
LUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShW
TSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgVHJhbnNpdGlv
bktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwpAQCAtMTI3Nyw3ICsxMjc3LDcg
QEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICAqY3Vy
cmVudEFzRG91YmxlID0gdi5hc0ludDMyKCk7CiAgICAgfQogICAgIAotICAgIHNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtMTI4NSwxMSArMTI4NSwxMSBAQCBDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzCiB7CiAgICAgQVNTRVJUKGhhc0lu
dDMyKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBUcmFuc2l0
aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0s
IFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwpAQCAtMTMzNiwxMSAr
MTMzNiwxMSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiAgICAg
fQogICAgIAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFu
c2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKFZNJiB2bSwgVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpOwpA
QCAtMTM3MSw3ICsxMzcxLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJs
ZVRvQQogICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0sIHN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24odm0pKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0sIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1b3Vz
KGluZGV4aW5nVHlwZSgpKSk7CkBAIC0xNTE1LDE3ICsxNTE1LDE3IEBAIHZvaWQgSlNPYmplY3Q6
OmNvbnZlcnRGcm9tQ29weU9uV3JpdGUoVk0KICAgICBnY1NhZmVNZW1jcHkobmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSwgb2xkQnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSwgb2xk
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJbmRl
eGluZ0hlYWRlcikpOwogCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiA9IChbJl0gKCkgeworICAgIFRyYW5zaXRpb25LaW5k
IHRyYW5zaXRpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5V2l0aEludDMyOgotICAgICAgICAgICAgcmV0dXJuIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMjsKKyAgICAgICAgICAgIHJldHVybiBUcmFu
c2l0aW9uS2luZDo6QWxsb2NhdGVJbnQzMjsKICAgICAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6
Ci0gICAgICAgICAgICByZXR1cm4gTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJs
ZTsKKyAgICAgICAgICAgIHJldHVybiBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGU7CiAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAgICAgIHJldHVybiBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czsKKyAgICAgICAgICAgIHJldHVy
biBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czsKKyAgICAgICAg
ICAgIHJldHVybiBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOwogICAgICAgICB9
CiAgICAgfSkoKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlE
KCk7CkBAIC0xNzYwLDI0ICsxNzYwLDI0IEBAIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmEKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAg
ICAgICBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uodm0sIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFy
cmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtLCBUcmFu
c2l0aW9uS2luZDo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFs
bG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnREb3VibGVUb0FycmF5
U3RvcmFnZSh2bSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAg
ICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBUcmFuc2l0aW9uS2luZDo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsK
ICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0zODc5LDEyICszODc5LDEyIEBAIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1
dEluZGV4aW5nKFZNJiAKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwogfQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gSlNPYmplY3Q6OnN1Z2dlc3RlZEFycmF5U3Rv
cmFnZVRyYW5zaXRpb24oVk0mIHZtKSBjb25zdAorVHJhbnNpdGlvbktpbmQgSlNPYmplY3Q6OnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oVk0mIHZtKSBjb25zdAogewogICAgIGlmIChu
ZWVkc1Nsb3dQdXRJbmRleGluZyh2bSkpCi0gICAgICAgIHJldHVybiBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFRyYW5z
aXRpb25LaW5kOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCi0gICAgcmV0dXJu
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVBcnJheVN0b3JhZ2U7CisgICAgcmV0dXJu
IFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUFycmF5U3RvcmFnZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDI2NTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCw2IEBAIGV4dGVybiBKU19FWFBPUlRfUFJJ
VkFURSBjb25zdCBBU0NJSUxpdGUKIGV4dGVybiBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBBU0NJ
SUxpdGVyYWwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUVudW1lcmFiaWxpdHlFcnJvcjsK
IGV4dGVybiBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBBU0NJSUxpdGVyYWwgVW5jb25maWd1cmFi
bGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5RXJyb3I7CiAKLUNPTVBJTEVfQVNTRVJUKFByb3Bl
cnR5QXR0cmlidXRlOjpOb25lIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLUNPTVBJTEVfQVNTRVJUKFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93
X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotQ09NUElMRV9BU1NFUlQoUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3df
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Ci1DT01QSUxFX0FTU0VSVChQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Ci1DT01QSUxFX0FTU0VSVChQcm9wZXJ0eUF0dHJp
YnV0ZTo6QWNjZXNzb3IgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLQogY2xhc3MgSlNGaW5hbE9iamVjdDsKIAogI2lm
IEFTU0VSVF9FTkFCTEVECkBAIC04MjgsNyArODIyLDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVl
ZHNTbG93UHV0SW5kZXhpbmcoVk0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbihWTSYpIGNvbnN0Owor
ICAgIFRyYW5zaXRpb25LaW5kIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oVk0mKSBj
b25zdDsKIHB1YmxpYzoKICAgICAvLyBZb3Ugc2hvdWxkIG9ubHkgY2FsbCBpc1N0cnVjdHVyZUV4
dGVuc2libGUoKSB3aGVuOgogICAgIC8vIC0gUGVyZm9ybWluZyB0aGlzIGNoZWNrIGluIGEgd2F5
IHRoYXQgaXNuJ3QgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uIApAQCAtMTAzNiwxOSAr
MTAzMCwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRl
Y2lkZWRUb0ludDMyKFZNJik7CiAgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydFVuZGVjaWRl
ZFRvRG91YmxlKFZNJik7CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRU
b0NvbnRpZ3VvdXMoVk0mKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0Fy
cmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mLCBUcmFuc2l0aW9uS2luZCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mKTsKICAg
ICAgICAgCiAgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoVk0mKTsK
ICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKFZNJik7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3Rv
cmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQz
MlRvQXJyYXlTdG9yYWdlKFZNJik7CiAKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydERv
dWJsZVRvQ29udGlndW91cyhWTSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRv
QXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAg
ICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYpOwogICAgICAg
ICAKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0m
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0mKTsKIAogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKKyAgICAvLyBzdHJ1Y3R1
cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5l
dyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQorICAgIC8vIHdlIHdhbnQuCisgICAgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZSh2bSwg
c3RydWN0dXJlKTsKKwogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgIG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsK
ICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTM3Niw3ICszODEsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIC8vIEZJWE1F
OiBDaGVjayBhdHRyaWJ1dGVzIGFnYWluc3QgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yT3JWYWx1ZS4gQ2hhbmdpbmcgR2V0dGVyU2V0dGVyIHNob3VsZCB3b3JrIHcvbyB0cmFuc2l0
aW9uLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE0MzQyCiAgICAgICAgIGlmIChtb2RlID09IFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eSAmJiAo
YXR0cmlidXRlcyAhPSBjdXJyZW50QXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZhbHVlKSkpCi0gICAgICAgICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAKQEAgLTM4NSwxMSArMzkwLDYgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbgogCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYm
ICFpc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHRvIGZpcmUg
YWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCi0gICAgLy8gc3RydWN0dXJlLiBUaGlzIGFs
bG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZlIGlmIHRoZSBuZXcgc3RydWN0dXJl
IGlzIHRoZSBvbmUKLSAgICAvLyB3ZSB3YW50LgotICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0sIHN0cnVjdHVyZSk7
CiAgICAgCiAgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5z
aXRpb24oCiAgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAy
NjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpzZQogICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1w
bCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRl
cywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFRy
YW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2lu
Z2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5z
aXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVs
ZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAgIHJldHVybiB0cmFuc2l0
aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJh
bnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYg
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbktpbmQoKSA9PSB0cmFuc2l0aW9uS2luZDsKICAgICB9Ci0g
ICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXko
cmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCB0cmFuc2l0
aW9uS2luZCkpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29s
IGlzQWRkaXRpb24pIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBU
cmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCkgY29uc3QKIHsKICAgICBpZiAoaXNVc2luZ1Np
bmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFu
c2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0
cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvbktpbmQoKSA9
PSB0cmFuc2l0aW9uS2luZCkgPyB0cmFuc2l0aW9uIDogbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0
dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBh
dHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCB0cmFuc2l0aW9uS2lu
ZCkpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmFkZChWTSYgdgogICAgIH0KIAogICAgIC8vIEFkZCB0aGUgc3RydWN0dXJl
IHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhh
c2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCktPnNldChTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSksIHN0cnVjdHVyZSk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yNDQsMTMgKzI0NCwxMyBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0SGFzVW5kZXJzY29yZVBy
b3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJhbnNp
dGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0
aW9uS2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4dGVuc2lvbnMoZmFsc2UpOwog
ICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlm
aWVkKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVk
KGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShmYWxzZSk7CiAgICAgc2V0UHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOwotICAgIHNldElzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
CkBAIC0yODIsMTMgKzI4MiwxMyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAg
c2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNl
KTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1
ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFu
c2l0aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4
dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hwb2lu
dElzTGlrZWx5VG9CZUZpcmVkKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShmYWxz
ZSk7CiAgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2Up
OwotICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRy
YW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwg
aW52YWxpZE9mZnNldCk7CiAgCkBAIC0zMjAsMTIgKzMyMCwxMiBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVy
dHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKHByZXZpb3VzLT5oYXNVbmRlcnNjb3JlUHJvdG9Qcm9w
ZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8oKSk7CiAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNj
ZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHByZXZpb3VzLT5pc1F1aWNrUHJvcGVydHlBY2Nlc3NB
bGxvd2VkRm9yRW51bWVyYXRpb24oKSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmli
dXRlcygwKTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7
CiAgICAgc2V0RGlkUHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPmRpZFByZXZlbnRFeHRlbnNp
b25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAgc2V0U3RhdGljUHJvcGVy
dGllc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkpOwogICAgIHNl
dEhhc0JlZW5EaWN0aW9uYXJ5KHByZXZpb3VzLT5oYXNCZWVuRGljdGlvbmFyeSgpKTsKICAgICBz
ZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7Ci0gICAgc2V0
SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9m
ZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zm
c2V0KTsKICAKQEAgLTQ0NCw2ICs0NDQsNyBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1h
dGVyaWFsaXplUHJvCiAgICAgICAgICAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Byb3BlcnR5QWRkaXRpb25UcmFuc2l0aW9u
KCkpOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3Ry
dWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5l
eHRPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0
dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwpAQCAtNDcyLDggKzQ3Myw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCi0gICAg
Y29uc3RleHByIGJvb2wgaXNBZGRpdGlvbiA9IHRydWU7Ci0gICAgaWYgKFN0cnVjdHVyZSogZXhp
c3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBh
dHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHVpZCwgYXR0cmlidXRl
cywgVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb24pKSB7CiAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1Ry
YW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1Ry
YW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKQEAgLTU3MSw2ICs1NzEsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3
UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1
ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+
Q29weU9uV3JpdGUpOwogICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25L
aW5kKFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eUFkZGl0aW9uKTsKICAgICB0cmFuc2l0aW9uLT5z
ZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUt
Pm1heE9mZnNldCgpKTsKIApAQCAtNjA3LDkgKzYwOCw4IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpyZW1vdmVQcm9wZXJ0eVRyYW4KICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7CiAKLSAg
ICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0aW9uID0gZmFsc2U7CiAgICAgb2Zmc2V0ID0gaW52YWxp
ZE9mZnNldDsKLSAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1
cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMs
IGlzQWRkaXRpb24pKSB7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0g
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRy
aWJ1dGVzLCBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikpIHsKICAgICAgICAgdmFs
aWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0
aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IGV4aXN0
aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpOwogICAgICAgICByZXR1cm4gZXhpc3Rp
bmdUcmFuc2l0aW9uOwpAQCAtNjY3LDkgKzY2Nyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpy
ZW1vdmVOZXdQcm9wZXJ0eVQKIAogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9y
eSgpICYgfkNvcHlPbldyaXRlKTsKICAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlv
bktpbmQoVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwogICAgIHRyYW5zaXRpb24t
PnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwotICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24odHJ1ZSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUodm0sIHBy
b3BlcnR5TmFtZSk7CiAgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKQEAgLTcw
NywzMCArNzA3LDU4IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEK
ICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAg
ICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byBz
ZXRFbnRyeUF0dHJpYnV0ZXMgPSBbJl0oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUo
dm0pLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgQVNTRVJUKGVudHJ5KTsKKyAg
ICAgICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworCisgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgc3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworCisgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQorICAgICAgICAgICAgc3RydWN0
dXJlLT5zZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2Up
OworICAgIH07CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KSB7CisgICAgICAgIHNldEVudHJ5QXR0cmlidXRlcyhzdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1
Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKKyAgICB9CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9u
S2luZDo6UHJvcGVydHlBdHRyaWJ1dGVDaGFuZ2UpKSB7CisgICAgICAgICAgICBjaGVja09mZnNl
dChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgZXhpc3RpbmdUcmFuc2l0
aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGV4aXN0aW5nVHJhbnNpdGlvbi0+
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKKyAgICAgICAgfQogCi0gICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAgICB0cmFuc2l0
aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsK
LSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudEVzdGltYXRlKCkgPiBzX21heFRyYW5zaXRpb25MZW5n
dGgpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGlj
dGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgICAgICAgICAg
c2V0RW50cnlBdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHRyYW5z
aXRpb247CisgICAgICAgIH0KICAgICB9CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9
IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9wZXJ0eU5hbWUudWlk
KCkpOwotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsK
IAotICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQotICAg
ICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgUHJv
cGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSk7CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayks
IHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUt
Pm1heE9mZnNldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9u
S2luZChUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlBdHRyaWJ1dGVDaGFuZ2UpOwogCi0gICAgaWYg
KGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pCi0gICAgICAgIHN0cnVj
dHVyZS0+c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNl
KTsKKyAgICBzZXRFbnRyeUF0dHJpYnV0ZXModHJhbnNpdGlvbik7CisgICAgY2hlY2tPZmZzZXQo
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7
CisgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9u
KTsKKyAgICB9CiAKLSAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAg
ICByZXR1cm4gc3RydWN0dXJlOworICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGlj
dGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZp
cmUqIGRlZmVycmVkKQpAQCAtNzYyLDE3ICs3OTAsMTcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvVW5jYWNoZWFibGVEaWN0aQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gbm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U2VhbCk7
CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFuc2l0
aW9uS2luZDo6U2VhbCk7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIG5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkZyZWV6
ZSk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFu
c2l0aW9uS2luZDo6RnJlZXplKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IHJldHVybiBub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpQcmV2ZW50RXh0ZW5zaW9ucyk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6UHJldmVudEV4dGVuc2lvbnMp
OwogfQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKFZNJiB2bSkKQEAgLTc5MCwxNSArODE4LDEzIEBAIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6dGFrZVByb3BlcnR5VGEKICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRh
YmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxlKTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbktpbmQpCiB7Ci0gICAgdW5zaWduZWQgYXR0cmlidXRl
cyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKLSAgICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0
aW9uID0gdHJ1ZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0
aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KG51bGxwdHIs
IGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKSkgewotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFu
c2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyk7Cisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24g
PSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChudWxscHRyLCAwLCB0cmFuc2l0aW9u
S2luZCkpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25L
aW5kKCkgPT0gdHJhbnNpdGlvbktpbmQpOwogICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0
aW9uLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdNb2RlSW5jbHVk
aW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQpA
QCAtODA2LDcgKzgzMiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXQKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIHRyYW5zaXRpb24tPnNldFRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgdHJhbnNpdGlvbi0+
c2V0VHJhbnNpdGlvbktpbmQodHJhbnNpdGlvbktpbmQpOwogICAgIHRyYW5zaXRpb24tPm1fYmxv
Yi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5nTW9kZUluY2x1ZGluZ0hp
c3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlvbktpbmQp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI2NTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJl
KFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBh
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
dWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
ID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc2Vh
bFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
Kik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3Ry
dWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KFZNJiwgU3RydWN0dXJl
KiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBUcmFuc2l0aW9uS2luZCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uU2xv
dyhWTSYsIFN0cnVjdHVyZSosIFRyYW5zaXRpb25LaW5kKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNTZWFsZWQoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzRnJv
emVuKFZNJik7CkBAIC02OTEsNyArNjkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0IyN1cHBl
ck5hbWUodHlwZSBuZXdWYWx1ZSkgXAogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihz
XyMjbG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAotICAgICAgICBtX2JpdEZpZWxkIHw9IChu
ZXdWYWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIG1fYml0
RmllbGQgfD0gKHN0YXRpY19jYXN0PHVpbnQzMl90PihuZXdWYWx1ZSkgJiBzXyMjbG93ZXJOYW1l
IyNNYXNrKSA8PCBvZmZzZXQ7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChEaWN0aW9u
YXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAgLTY5OSw3
ICs2OTksOCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIDEsIDMpOwogICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4
Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNRdWlja1Byb3BlcnR5
QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCBJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2Vk
Rm9yRW51bWVyYXRpb24sIDEsIDUpOwotICAgIERFRklORV9CSVRGSUVMRCh1bnNpZ25lZCwgdHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywg
MTQsIDYpOworICAgIERFRklORV9CSVRGSUVMRChUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
LCB0cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzLCA4LCA2KTsKKyAgICBERUZJTkVfQklURklFTEQoVHJhbnNpdGlvbktpbmQsIHRyYW5zaXRp
b25LaW5kLCBUcmFuc2l0aW9uS2luZCwgNiwgMTQpOwogICAgIERFRklORV9CSVRGSUVMRChib29s
LCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDIwKTsKICAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwg
MjEpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwg
U3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDIyKTsKQEAgLTcxMCw5ICs3MTEsMTIgQEAgcHVi
bGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVl
bkRpY3Rpb25hcnksIDEsIDI3KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVU
cmFuc2l0aW9uaW5nLCAxLCAyOCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVy
c2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVBy
b3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAxLCAyOSk7Ci0gICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxl
dGlvblRyYW5zaXRpb24sIDEsIDMwKTsKIAogICAgIHN0YXRpY19hc3NlcnQoc19iaXRXaWR0aE9m
VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyA8PSBzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5
QXR0cmlidXRlcykgKiA4KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNfYml0V2lkdGhPZlRyYW5zaXRp
b25LaW5kIDw9IHNpemVvZihUcmFuc2l0aW9uS2luZCkgKiA4KTsKKworICAgIGJvb2wgaXNQcm9w
ZXJ0eUFkZGl0aW9uVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRyYW5zaXRpb25LaW5kKCkg
PT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb247IH0KKyAgICBib29sIGlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uS2luZCgpID09
IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI2NTI3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJv
cGVydHlDb25jdXJyZW4KIAogICAgICAgICBzZWVuUHJvcGVydGllcy5hZGQoc3RydWN0dXJlLT5t
X3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOwogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmlzUHJvcGVydHlBZGRpdGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgewpAQCAtNjA4LDcg
KzYwOCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OnNob3VsZENvbnYKICAgICBy
ZXR1cm4gIWFPYmogJiYgIWJPYmo7CiB9CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKQogewogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTA1ICszNSwxMDUgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1
Y3R1cmU7CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8g
d2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzID0gdWludDhfdDsKK2NvbnN0ZXhwciB1aW50OF90IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0
aW9uID0gMSA8PCA0OwogCi0vLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNh
dGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KLS8vIElmIGFueSBvZiB0
aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAu
Ci1lbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVuc2lnbmVkIHsKLSAgICBBbGxv
Y2F0ZVVuZGVjaWRlZCwKLSAgICBBbGxvY2F0ZUludDMyLAotICAgIEFsbG9jYXRlRG91YmxlLAot
ICAgIEFsbG9jYXRlQ29udGlndW91cywKLSAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZSwKLSAgICBB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9y
YWdlLAotICAgIEFkZEluZGV4ZWRBY2Nlc3NvcnMsCi0gICAgUHJldmVudEV4dGVuc2lvbnMsCi0g
ICAgU2VhbCwKLSAgICBGcmVlemUKK2VudW0gY2xhc3MgVHJhbnNpdGlvbktpbmQgOiB1aW50OF90
IHsKKyAgICBVbmtub3duID0gICAgICAgICAgICAgICAgICAgICAwLAorICAgIFByb3BlcnR5QWRk
aXRpb24gPSAgICAgICAgICAgIDEsCisgICAgUHJvcGVydHlEZWxldGlvbiA9ICAgICAgICAgICAg
MiwKKyAgICBQcm9wZXJ0eUF0dHJpYnV0ZUNoYW5nZSA9ICAgICAzLAorCisgICAgLy8gU3VwcG9y
dCBmb3IgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKyAgICAvLyBJZiBh
bnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3Vs
ZCBiZSAwLgorICAgIEFsbG9jYXRlVW5kZWNpZGVkID0gICAgICAgICAgIDAgfCBGaXJzdE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBbGxvY2F0ZUludDMyID0gICAgICAgICAgICAgICAxIHwg
Rmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24sCisgICAgQWxsb2NhdGVEb3VibGUgPSAgICAgICAg
ICAgICAgMiB8IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0aW9uLAorICAgIEFsbG9jYXRlQ29udGln
dW91cyA9ICAgICAgICAgIDMgfCBGaXJzdE5vblByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBbGxv
Y2F0ZUFycmF5U3RvcmFnZSA9ICAgICAgICA0IHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24s
CisgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlID0gNSB8IEZpcnN0Tm9uUHJvcGVydHlU
cmFuc2l0aW9uLAorICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSA9IDYgfCBGaXJzdE5v
blByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBZGRJbmRleGVkQWNjZXNzb3JzID0gICAgICAgICA3
IHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24sCisgICAgUHJldmVudEV4dGVuc2lvbnMgPSAg
ICAgICAgICAgOCB8IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0aW9uLAorICAgIFNlYWwgPSAgICAg
ICAgICAgICAgICAgICAgICAgIDkgfCBGaXJzdE5vblByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBG
cmVlemUgPSAgICAgICAgICAgICAgICAgICAgIDEwIHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRp
b24sCiB9OwotdXNpbmcgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyA9IHVpbnQxNl90Owog
Ci1pbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFu
c2l0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJhbnNpdGlvbikg
KyBGaXJzdEludGVybmFsQXR0cmlidXRlOwotfQotCi1pbmxpbmUgYm9vbCBjaGFuZ2VzSW5kZXhp
bmdUeXBlKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgY2hh
bmdlc0luZGV4aW5nVHlwZShUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uKQogewogICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZVVuZGVjaWRlZDoKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQz
MjoKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGU6Ci0gICAg
Y2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czoKLSAgICBjYXNl
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICBj
YXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgot
ICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBZGRJbmRleGVkQWNjZXNzb3JzOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlVW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlSW50MzI6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2Nh
dGVEb3VibGU6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgor
ICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
VHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIFRy
YW5zaXRpb25LaW5kOjpTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBUcmFu
c2l0aW9uS2luZDo6QWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotaW5saW5lIElu
ZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGlu
Z1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlVW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRl
VW5kZWNpZGVkOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUp
KTsKICAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBVbmRlY2lkZWRTaGFwZTsKLSAgICBjYXNlIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMjoKKyAgICBjYXNlIFRyYW5zaXRpb25L
aW5kOjpBbGxvY2F0ZUludDMyOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVz
KG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBvbGRUeXBlID09IENvcHlPbldy
aXRlQXJyYXlXaXRoSW50MzIpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SW5kZXhpbmdT
aGFwZUFuZFdyaXRhYmlsaXR5TWFzaykgfCBJbnQzMlNoYXBlOwotICAgIGNhc2UgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZToKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZURvdWJsZToKICAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRU
eXBlKSB8fCBoYXNVbmRlY2lkZWQob2xkVHlwZSkgfHwgaGFzSW50MzIob2xkVHlwZSkgfHwgb2xk
VHlwZSA9PSBDb3B5T25Xcml0ZUFycmF5V2l0aERvdWJsZSk7CiAgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IERvdWJsZVNoYXBlOwot
ICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAg
Y2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgogICAgICAgICBBU1NFUlQo
IWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8
fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgb2xkVHlwZSA9PSBD
b3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUg
JiB+SW5kZXhpbmdTaGFwZUFuZFdyaXRhYmlsaXR5TWFzaykgfCBDb250aWd1b3VzU2hhcGU7Ci0g
ICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NF
UlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBl
KSB8fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGln
dW91cyhvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBl
QW5kV3JpdGFiaWxpdHlNYXNrKSB8IEFycmF5U3RvcmFnZVNoYXBlOwotICAgIGNhc2UgTm9uUHJv
cGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBU
cmFuc2l0aW9uS2luZDo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NF
UlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBl
KSB8fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGln
dW91cyhvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBl
QW5kV3JpdGFiaWxpdHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKLSAgICBjYXNl
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OlN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZTsKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWRkSW5kZXhlZEFj
Y2Vzc29yczoKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpBZGRJbmRleGVkQWNjZXNzb3JzOgog
ICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBvbGRUeXBlOwogICAgIH0KIH0KIAotaW5saW5lIGJvb2wg
cHJldmVudHNFeHRlbnNpb25zKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5s
aW5lIGJvb2wgcHJldmVudHNFeHRlbnNpb25zKFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OlByZXZlbnRFeHRlbnNpb25zOgotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpT
ZWFsOgotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpGcmVlemU6CisgICAgY2FzZSBU
cmFuc2l0aW9uS2luZDo6UHJldmVudEV4dGVuc2lvbnM6CisgICAgY2FzZSBUcmFuc2l0aW9uS2lu
ZDo6U2VhbDoKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAK
LWlubGluZSBib29sIHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgc2V0c0RvbnREZWxldGVPbkFsbFByb3Bl
cnRpZXMoVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRp
b24pIHsKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U2VhbDoKLSAgICBjYXNlIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6RnJlZXplOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OlNl
YWw6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6RnJlZXplOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1pbmxp
bmUgYm9vbCBzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyhOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gdHJhbnNpdGlvbikKK2lubGluZSBib29sIHNldHNSZWFkT25seU9uTm9uQWNjZXNz
b3JQcm9wZXJ0aWVzKFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0
cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkZyZWV6ZToKKyAg
ICBjYXNlIFRyYW5zaXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NiwyNyArMTQ2LDI4IEBAIGNs
YXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgCiAjaWYgQ1BVKEFERFJFU1M2NCkK
ICAgICBzdHJ1Y3QgSGFzaCB7Ci0gICAgICAgIC8vIExvZ2ljYWxseSwgS2V5IGlzIGEgdHVwbGUg
b2YgKDEpIFVuaXF1ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGFuZCAo
MykgYm9vbCBpc0FkZGl0aW9uLgotICAgICAgICAvLyBXZSBlbmNvZGUgKDIpIGFuZCAoMykgaW50
byAoMSkncyBlbXB0eSBiaXRzIHNpbmNlIGEgcG9pbnRlciBpcyA0OGJpdCBhbmQgbG93ZXIgMyBi
aXRzIGFyZSB1c2FibGUgYmVjYXVzZSBvZiBhbGlnbm1lbnQuCisgICAgICAgIC8vIExvZ2ljYWxs
eSwgS2V5IGlzIGEgdHVwbGUgb2YgKDEpIFVuaXF1ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGFuZCAoMykgdHJhbnNpdGlvbktpbmQuCiAgICAgICAgIHN0cnVjdCBLZXkg
ewogICAgICAgICAgICAgZnJpZW5kIHN0cnVjdCBIYXNoOwogICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChXVEZfT1NfQ09OU1RBTlRfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEggPD0gNDgpOwotICAg
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgaXNBZGRpdGlvbk1hc2sgPSAxVUxM
OwotICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgo
MVVMTCA8PCA0OCkgLSAxKSAmICh+aXNBZGRpdGlvbk1hc2spOwogICAgICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBhdHRyaWJ1dGVzU2hpZnQgPSA0ODsKKyAgICAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdHJhbnNpdGlvbktpbmRTaGlmdCA9IDU2OworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgxVUxMIDw8IGF0
dHJpYnV0ZXNTaGlmdCkgLSAxOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlID0gMHgyOwotICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4IDw9IDE2KTsKKyAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMp
ICogOCA8PSA4KTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25L
aW5kKSAqIDggPD0gOCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSA8IGFsaWdub2YoVW5pcXVlZFN0cmluZ0ltcGwpKTsKIAotICAgICAgICAgICAgLy8g
SGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcy4KLSAg
ICAgICAgICAgIC8vIExvd2VzdCAxIGJpdCBpcyBmb3IgaXNBZGRpdGlvbiBmbGFnLgorICAgICAg
ICAgICAgLy8gSGlnaGVzdCA4IGJpdHMgYXJlIGZvciBUcmFuc2l0aW9uS2luZDsgbmV4dCA4IGJl
bG9uZyB0byBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLgogICAgICAgICAgICAgLy8gUmVt
YWluaW5nIGJpdHMgYXJlIGZvciBVbmlxdWVkU3RyaW5nSW1wbCouCi0gICAgICAgICAgICBLZXko
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRp
dGlvbikKLSAgICAgICAgICAgICAgICA6IG1fZW5jb2RlZERhdGEoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oaW1wbCkgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PihhdHRyaWJ1dGVzKSA8PCBhdHRy
aWJ1dGVzU2hpZnQpIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaXNBZGRpdGlvbikgJiBpc0Fk
ZGl0aW9uTWFzaykpCisgICAgICAgICAgICBLZXkoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKQorICAgICAg
ICAgICAgICAgIDogbV9lbmNvZGVkRGF0YShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbXBsKSB8
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGF0dHJpYnV0ZXMpIDw8IGF0dHJpYnV0ZXNTaGlmdCkg
fCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0cmFuc2l0aW9uS2luZCkgPDwgdHJhbnNpdGlvbktp
bmRTaGlmdCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGltcGwgPT0g
dGhpcy0+aW1wbCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNBZGRpdGlvbiA9PSB0aGlz
LT5pc0FkZGl0aW9uKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzIDw9IFVJ
TlQ4X01BWCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gdGhpcy0+YXR0
cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJhbnNpdGlvbktpbmQgIT0gVHJh
bnNpdGlvbktpbmQ6OlVua25vd24pOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9u
S2luZCA9PSB0aGlzLT50cmFuc2l0aW9uS2luZCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgS2V5KCkgPSBkZWZhdWx0OwpAQCAtMTc4LDggKzE3OSw4IEBAIGNsYXNzIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkRGF0YSA9PSBoYXNoVGFibGVEZWxldGVkVmFs
dWU7IH0KIAogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihtX2VuY29kZWREYXRhICYgc3Ry
aW5nTWFzayk7IH0KLSAgICAgICAgICAgIGJvb2wgaXNBZGRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5jb2RlZERhdGEgJiBpc0FkZGl0aW9uTWFzazsgfQotICAgICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZERhdGEgPj4gYXR0cmlidXRlc1No
aWZ0OyB9CisgICAgICAgICAgICBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMoKSBjb25zdCB7IHJldHVybiAobV9lbmNvZGVkRGF0YSA+PiBhdHRyaWJ1dGVzU2hpZnQpICYg
VUlOVDhfTUFYOyB9CisgICAgICAgICAgICBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5zaXRpb25LaW5kPihtX2VuY29kZWREYXRh
ID4+IHRyYW5zaXRpb25LaW5kU2hpZnQpOyB9CiAKICAgICAgICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCiAgICAgICAgICAgICB7CkBAIC0y
NDksOCArMjUwLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYWRkKFZNJiwgU3RydWN0
dXJlKik7Ci0gICAgYm9vbCBjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGF0
dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5p
cXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNv
bnN0OworICAgIGJvb2wgY29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzLCBUcmFuc2l0aW9uS2luZCkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVl
ZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZCkgY29uc3Q7
CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093
bmVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406053</attachid>
            <date>2020-08-05 16:00:50 -0700</date>
            <delta_ts>2020-08-13 16:44:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200806020049.patch</filename>
            <type>text/plain</type>
            <size>51137</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjUzMDcpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTA1ICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0cmlidXRl
cy5qczogQWRkZWQuCisKIDIwMjAtMDgtMDUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBza2lwIHByaXZhdGUgZmllbGQgdGVzdApJbmRl
eDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0
cmlidXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWRlZmlu
ZS1wcm9wZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVzLmpzCShub25leGlzdGVudCkKKysrIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3JlZGVmaW5lLXByb3BlcnR5LXByZXZpb3VzLWF0dHJpYnV0ZXMu
anMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAordmFyIGRlc2MxID0ge3ZhbHVlOiAx
LCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNvbmZpZ3VyYWJsZTogdHJ1ZX07
Cit2YXIgZGVzYzIgPSB7dmFsdWU6IDEsIHdyaXRhYmxlOiBmYWxzZSwgZW51bWVyYWJsZTogdHJ1
ZSwgY29uZmlndXJhYmxlOiB0cnVlfTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkg
eworICAgIHZhciBvYmogPSB7Zm9vOiAxfTsKKworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShv
YmosICJmb28iLCBkZXNjMSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIs
IGRlc2MyKTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAiZm9vIiwgZGVzYzEpOwor
ICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBkZXNjMik7CisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRlc2MxKTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqLCAiZm9vIiwgZGVzYzIpOworfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMjAtMDgtMDUgIEFsZXhleSBTaHZheWth
ICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIENhY2hlIFN0cnVjdHVyZTo6YXR0
cmlidXRlQ2hhbmdlVHJhbnNpdGlvbigpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTQ4OTAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAgIDEuIFJld29ya3MgZW5jb2Rp
bmcgb2YgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkgdG8gZW5hYmxlIHN0b3Jp
bmcgYXR0cmlidXRlCisgICAgICAgICAgIGNoYW5nZSB0cmFuc2l0aW9ucyBpbiBhIHRyYW5zaXRp
b24gdGFibGUuIFNpbmNlIHRhYmxlIGVudHJ5IGF0dHJpYnV0ZXMgYXJlIGFsd2F5cworICAgICAg
ICAgICB1aW50OF90LCByZW1haW5pbmcgOCBiaXRzIGFyZSB1c2VkIGZvciBUcmFuc2l0aW9uS2lu
ZCB0byBhY2NvbW9kYXRlIG5vbi1wcm9wZXJ0eQorICAgICAgICAgICB0cmFuc2l0aW9ucywgcmVt
b3ZpbmcgYSBiaXQgaGFja3kgdG9BdHRyaWJ1dGVzKCkgYW5kIHV0aWxpemF0aW9uIG9mIHVudXNl
ZCBwb2ludGVyCisgICAgICAgICAgIGJpdHMuIEl0IGFsc28gaW50cm9kdWNlcyBUcmFuc2l0aW9u
S2luZDo6VW5rbm93biB3ZSBjYW4gdmFsaWRhdGUgYWdhaW5zdCwgcmVtb3ZpbmcKKyAgICAgICAg
ICAgYSBwb3RlbnRpYWxseSB1bnNhZmUgImFkZGl0aW9uIHRyYW5zaXRpb24gYXMgYSBkZWZhdWx0
Ii4KKworICAgICAgICAyLiBGb3Igbm9uLWRpY3Rpb25hdHkgc3RydWN0dXJlLCBzYXZlcyBhdHRy
aWJ1dGUgY2hhbmdlIHRyYW5zaXRpb25zICh3aXRoIG1hdGVyaWFsaXplZAorICAgICAgICAgICBw
cm9wZXJ0eSB0YWJsZXMpIHRvIGEgdHJhbnNpdGlvbiB0YWJsZSwgbWFraW5nIHJlZGVmaW5pdGlv
biB0byBwcmV2aW91cyBhdHR0cmlidXRlcworICAgICAgICAgICBhIGZhc3QgcGF0aC4gSWYgdGhl
cmUgYXJlIHRvbyBtYW55IGF0dHJpYnV0ZSB0cmFuc2l0aW9ucywgdGhlIHN0cnVjdHVyZSBiZWNv
bWVzIGEKKyAgICAgICAgICAgZGljdGlvbmFyeSwgZmlyaW5nIGEgdHJhbnNpdGlvbiB3YXRjaHBv
aW50LiBUaGlzIGFkdmFuY2VzIHByb3ZpZGVkIG1pY3JvYmVuY2htYXJrCisgICAgICAgICAgIGJ5
IH45MCUsIGFuZCBwcm9ncmVzc2VzIFNwZWVkb21ldGVyMi9FbWJlckpTLURlYnVnLVRvZG9NVkMg
YnkgfjEyJSAofjUlIG92ZXIgcjI2NDU3MykuCisKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om5vdGlmeVByZXNlbmNlT2ZJbmRleGVkQWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxVbmRlY2lkZWQp
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMyKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVy
dFVuZGVjaWRlZFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRVbmRl
Y2lkZWRUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y29udmVydFVuZGVj
aWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQz
MlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQ29udGln
dW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFn
ZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSk6Cisg
ICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKToK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRGcm9tQ29weU9uV3JpdGUpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKToKKyAgICAgICAg
KEpTQzo6SlNPYmplY3Q6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgor
ICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OlN0cnVjdHVyZSk6
CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0eVRhYmxlKToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25Ub0V4aXN0aW5nU3Ry
dWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFu
c2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpy
ZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0
dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnNlYWxU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVUcmFuc2l0aW9uKToK
KyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1RyYW5zaXRpb24pOgor
ICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3cpOgorICAg
ICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmVJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFByb3BlcnR5Q29uY3Vy
cmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24p
OgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmg6CisgICAgICAg
IChKU0M6OmNoYW5nZXNJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpuZXdJbmRleGluZ1R5
cGUpOgorICAgICAgICAoSlNDOjpwcmV2ZW50c0V4dGVuc2lvbnMpOgorICAgICAgICAoSlNDOjpz
ZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6OnNldHNSZWFkT25s
eU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNp
dGlvblRhYmxlOjpIYXNoOjpLZXk6OktleSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZTo6SGFzaDo6S2V5OjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OnRyYW5zaXRpb25LaW5kIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6dG9BdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OmlzQWRkaXRpb24gY29uc3QpOiBE
ZWxldGVkLgorCiAyMDIwLTA4LTA0ICBLZWl0aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUu
Y29tPgogCiAgICAgICAgIENoZWNrcG9pbnRTaWRlU3RhdGUgc2hvdWQgcGxheSBuaWNlbHkgd2l0
aCBTdGFja092ZXJmbG93RXhjZXB0aW9uIHVud2luZGluZy4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU09iamVjdC5jcHAJKHJldmlzaW9uIDI2NTI3NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1Myw3ICsxMDUzLDcgQEAgdm9pZCBKU09iamVjdDo6bm90aWZ5UHJlc2VuY2VPZkluZGV4ZWRB
YwogICAgIGlmIChtYXlJbnRlcmNlcHRJbmRleGVkQWNjZXNzZXModm0pKQogICAgICAgICByZXR1
cm47CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBZGRJbmRl
eGVkQWNjZXNzb3JzKSk7CisgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgVHJhbnNpdGlvbktpbmQ6OkFkZEluZGV4
ZWRBY2Nlc3NvcnMpKTsKICAgICAKICAgICBpZiAoIW1heUJlUHJvdG90eXBlKCkpCiAgICAgICAg
IHJldHVybjsKQEAgLTEwODUsNyArMTA4NSw3IEBAIEJ1dHRlcmZseSogSlNPYmplY3Q6OmNyZWF0
ZUluaXRpYWxVbmRlY2kKICAgICBCdXR0ZXJmbHkqIG5ld0J1dHRlcmZseSA9IGNyZWF0ZUluaXRp
YWxJbmRleGVkU3RvcmFnZSh2bSwgbGVuZ3RoKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1
cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUg
PSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwotICAgIFN0cnVjdHVyZSogbmV3U3Ry
dWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVy
ZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZCk7CisgICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
b2xkU3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVVbmRlY2lkZWQpOwogICAgIG51
a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJm
bHkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3
QnV0dGVyZmx5OwpAQCAtMTA5OSw3ICsxMDk5LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2Jq
ZWN0OjpjcmVhdGVJbml0aQogICAgICAgICBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5hdCh0
aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJl
SUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSog
b2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBTdHJ1
Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZt
LCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMik7Cisg
ICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNp
dGlvbih2bSwgb2xkU3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVJbnQzMik7CiAg
ICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1
dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVy
biBuZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXNJbnQzMigpOwpAQCAtMTExMyw3ICsxMTEzLDcgQEAg
Q29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpYQogICAgICAgICBuZXdCdXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKSA9IFBOYU47CiAgICAgU3RydWN0
dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5zdHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVy
ZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBT
dHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9u
KHZtLCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUp
OworICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlRG91Ymxl
KTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1cmVJRCwg
bmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
cmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwpAQCAtMTEyNyw3ICsxMTI3
LDcgQEAgQ29udGlndW91c0pTVmFsdWVzIEpTT2JqZWN0OjpjcmVhdGVJbml0aQogICAgICAgICBu
ZXdCdXR0ZXJmbHktPmNvbnRpZ3VvdXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJy
aWVyKEpTVmFsdWUoKSk7CiAgICAgU3RydWN0dXJlSUQgb2xkU3RydWN0dXJlSUQgPSB0aGlzLT5z
dHJ1Y3R1cmVJRCgpOwogICAgIFN0cnVjdHVyZSogb2xkU3RydWN0dXJlID0gdm0uZ2V0U3RydWN0
dXJlKG9sZFN0cnVjdHVyZUlEKTsKLSAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVj
dHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUs
IFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOwogICAgIG51a2VTdHJ1Y3R1cmVB
bmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkpOwogICAgIHNl
dFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CkBAIC0xMTgyLDcgKzExODIsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNP
YmplY3Q6OmNvbnZlcnRVbmRlCiAgICAgZm9yICh1bnNpZ25lZCBpID0gYnV0dGVyZmx5LT52ZWN0
b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250aWd1b3VzKCkuYXQodGhp
cywgaSkuc2V0V2l0aG91dFdyaXRlQmFycmllcihKU1ZhbHVlKCkpOwogCi0gICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyKSk7CisgICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlSW50MzIpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNJbnQzMigpOwogfQogCkBAIC0xMTk0LDcgKzExOTQsNyBAQCBDb250aWd1
b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydFVuZGVjCiAgICAgZm9yICh1bnNpZ25lZCBpID0g
YnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKTsgaS0tOykKICAgICAgICAgYnV0dGVyZmx5LT5jb250
aWd1b3VzRG91YmxlKCkuYXQodGhpcywgaSkgPSBQTmFOOwogICAgIAotICAgIHNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtMTIwNyw3ICsxMjA3LDcgQEAgQ29udGln
dW91c0pTVmFsdWVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZQogICAgICAgICBidXR0ZXJmbHktPmNv
bnRpZ3VvdXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7
CiAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwotICAgIHNldFN0cnVjdHVyZSh2bSwgU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSksIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzKSk7CisgICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgVHJh
bnNpdGlvbktpbmQ6OkFsbG9jYXRlQ29udGlndW91cykpOwogICAgIHJldHVybiBtX2J1dHRlcmZs
eS0+Y29udGlndW91cygpOwogfQogCkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBBcnJheVN0b3JhZ2Uq
IEpTT2JqZWN0Ojpjb25zdHJ1Y3RDb252ZXJ0CiAgICAgcmV0dXJuIG5ld1N0b3JhZ2U7CiB9CiAK
LUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShW
TSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBK
U09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgVHJhbnNpdGlv
bktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAg
QVNTRVJUKGhhc1VuZGVjaWRlZChpbmRleGluZ1R5cGUoKSkpOwpAQCAtMTI3Nyw3ICsxMjc3LDcg
QEAgQ29udGlndW91c0RvdWJsZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzMgogICAgICAgICAqY3Vy
cmVudEFzRG91YmxlID0gdi5hc0ludDMyKCk7CiAgICAgfQogICAgIAotICAgIHNldFN0cnVjdHVy
ZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2bSks
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGUpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGUpKTsKICAgICByZXR1cm4gbV9idXR0ZXJm
bHktPmNvbnRpZ3VvdXNEb3VibGUoKTsKIH0KIApAQCAtMTI4NSwxMSArMTI4NSwxMSBAQCBDb250
aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRJbnQzCiB7CiAgICAgQVNTRVJUKGhhc0lu
dDMyKGluZGV4aW5nVHlwZSgpKSk7CiAgICAgCi0gICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1
cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0
cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBUcmFuc2l0
aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0dGVyZmx5LT5j
b250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitB
cnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYgdm0s
IFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhl
YXApOwogICAgIEFTU0VSVChoYXNJbnQzMihpbmRleGluZ1R5cGUoKSkpOwpAQCAtMTMzNiwxMSAr
MTMzNiwxMSBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnREb3ViCiAgICAg
fQogICAgIAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgc2V0U3RydWN0dXJlKHZt
LCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRTdHJ1Y3R1
cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0p
LCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJuIG1fYnV0
dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKLUFycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZl
cnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFu
c2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9y
YWdlKFZNJiB2bSwgVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0RvdWJsZShpbmRleGluZ1R5cGUoKSkpOwpA
QCAtMTM3MSw3ICsxMzcxLDcgQEAgQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydERvdWJs
ZVRvQQogICAgIHJldHVybiBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0sIHN1Z2dlc3Rl
ZEFycmF5U3RvcmFnZVRyYW5zaXRpb24odm0pKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVj
dDo6Y29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0sIE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQorQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShWTSYgdm0sIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwogICAgIEFTU0VSVChoYXNDb250aWd1b3Vz
KGluZGV4aW5nVHlwZSgpKSk7CkBAIC0xNTE1LDE3ICsxNTE1LDE3IEBAIHZvaWQgSlNPYmplY3Q6
OmNvbnZlcnRGcm9tQ29weU9uV3JpdGUoVk0KICAgICBnY1NhZmVNZW1jcHkobmV3QnV0dGVyZmx5
LT5wcm9wZXJ0eVN0b3JhZ2UoKSwgb2xkQnV0dGVyZmx5LT5wcm9wZXJ0eVN0b3JhZ2UoKSwgb2xk
QnV0dGVyZmx5LT52ZWN0b3JMZW5ndGgoKSAqIHNpemVvZihKU1ZhbHVlKSArIHNpemVvZihJbmRl
eGluZ0hlYWRlcikpOwogCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb24gdHJhbnNpdGlvbiA9IChbJl0gKCkgeworICAgIFRyYW5zaXRpb25LaW5k
IHRyYW5zaXRpb24gPSAoWyZdICgpIHsKICAgICAgICAgc3dpdGNoIChpbmRleGluZ1R5cGUoKSkg
ewogICAgICAgICBjYXNlIEFycmF5V2l0aEludDMyOgotICAgICAgICAgICAgcmV0dXJuIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMjsKKyAgICAgICAgICAgIHJldHVybiBUcmFu
c2l0aW9uS2luZDo6QWxsb2NhdGVJbnQzMjsKICAgICAgICAgY2FzZSBBcnJheVdpdGhEb3VibGU6
Ci0gICAgICAgICAgICByZXR1cm4gTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJs
ZTsKKyAgICAgICAgICAgIHJldHVybiBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGU7CiAg
ICAgICAgIGNhc2UgQXJyYXlXaXRoQ29udGlndW91czoKLSAgICAgICAgICAgIHJldHVybiBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czsKKyAgICAgICAgICAgIHJldHVy
biBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJl
dHVybiBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czsKKyAgICAgICAg
ICAgIHJldHVybiBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOwogICAgICAgICB9
CiAgICAgfSkoKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHN0cnVjdHVyZUlE
KCk7CkBAIC0xNzYwLDI0ICsxNzYwLDI0IEBAIHZvaWQgSlNPYmplY3Q6OnN3aXRjaFRvU2xvd1B1
dEFycmF5U3RvcmEKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIEFMTF9VTkRFQ0lERURfSU5E
RVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOworICAg
ICAgICBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2Uodm0sIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBBTExfSU5UMzJfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRJbnQzMlRv
QXJyYXlTdG9yYWdlKHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFy
cmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKHZtLCBUcmFu
c2l0aW9uS2luZDo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7
CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0RPVUJMRV9JTkRFWElOR19UWVBFUzoKLSAgICAgICAg
Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFs
bG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAgIGNvbnZlcnREb3VibGVUb0FycmF5
U3RvcmFnZSh2bSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEFMTF9DT05USUdVT1VTX0lOREVY
SU5HX1RZUEVTOgotICAgICAgICBjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKHZtLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAg
ICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2Uodm0sIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAgICAgICBicmVhazsKICAgICAgICAgCiAg
ICAgY2FzZSBOb25BcnJheVdpdGhBcnJheVN0b3JhZ2U6CiAgICAgY2FzZSBBcnJheVdpdGhBcnJh
eVN0b3JhZ2U6IHsKLSAgICAgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uOjpTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2UpOworICAgICAgICBTdHJ1Y3R1cmUq
IG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1
Y3R1cmUodm0pLCBUcmFuc2l0aW9uS2luZDo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlKTsK
ICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0zODc5LDEyICszODc5LDEyIEBAIGJvb2wgSlNPYmplY3Q6Om5lZWRzU2xvd1B1
dEluZGV4aW5nKFZNJiAKICAgICByZXR1cm4gYW55T2JqZWN0SW5DaGFpbk1heUludGVyY2VwdElu
ZGV4ZWRBY2Nlc3Nlcyh2bSkgfHwgZ2xvYmFsT2JqZWN0KHZtKS0+aXNIYXZpbmdBQmFkVGltZSgp
OwogfQogCi1Ob25Qcm9wZXJ0eVRyYW5zaXRpb24gSlNPYmplY3Q6OnN1Z2dlc3RlZEFycmF5U3Rv
cmFnZVRyYW5zaXRpb24oVk0mIHZtKSBjb25zdAorVHJhbnNpdGlvbktpbmQgSlNPYmplY3Q6OnN1
Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oVk0mIHZtKSBjb25zdAogewogICAgIGlmIChu
ZWVkc1Nsb3dQdXRJbmRleGluZyh2bSkpCi0gICAgICAgIHJldHVybiBOb25Qcm9wZXJ0eVRyYW5z
aXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsKKyAgICAgICAgcmV0dXJuIFRyYW5z
aXRpb25LaW5kOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U7CiAgICAgCi0gICAgcmV0dXJu
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVBcnJheVN0b3JhZ2U7CisgICAgcmV0dXJu
IFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUFycmF5U3RvcmFnZTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmgJKHJl
dmlzaW9uIDI2NTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTg0LDEyICs4NCw2IEBAIGV4dGVybiBKU19FWFBPUlRfUFJJ
VkFURSBjb25zdCBBU0NJSUxpdGUKIGV4dGVybiBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBBU0NJ
SUxpdGVyYWwgVW5jb25maWd1cmFibGVQcm9wZXJ0eUNoYW5nZUVudW1lcmFiaWxpdHlFcnJvcjsK
IGV4dGVybiBKU19FWFBPUlRfUFJJVkFURSBjb25zdCBBU0NJSUxpdGVyYWwgVW5jb25maWd1cmFi
bGVQcm9wZXJ0eUNoYW5nZVdyaXRhYmlsaXR5RXJyb3I7CiAKLUNPTVBJTEVfQVNTRVJUKFByb3Bl
cnR5QXR0cmlidXRlOjpOb25lIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgTm9uZV9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLUNPTVBJTEVfQVNTRVJUKFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIFJlYWRPbmx5X2lzX2JlbG93
X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotQ09NUElMRV9BU1NFUlQoUHJvcGVydHlBdHRyaWJ1
dGU6OkRvbnRFbnVtIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udEVudW1faXNfYmVsb3df
Rmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Ci1DT01QSUxFX0FTU0VSVChQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udERlbGV0ZSA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIERvbnREZWxldGVfaXNfYmVs
b3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Ci1DT01QSUxFX0FTU0VSVChQcm9wZXJ0eUF0dHJp
YnV0ZTo6QWNjZXNzb3IgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBBY2Nlc3Nvcl9pc19iZWxv
d19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLQogY2xhc3MgSlNGaW5hbE9iamVjdDsKIAogI2lm
IEFTU0VSVF9FTkFCTEVECkBAIC04MjgsNyArODIyLDcgQEAgcHVibGljOgogICAgIGJvb2wgbmVl
ZHNTbG93UHV0SW5kZXhpbmcoVk0mKSBjb25zdDsKIAogcHJpdmF0ZToKLSAgICBOb25Qcm9wZXJ0
eVRyYW5zaXRpb24gc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbihWTSYpIGNvbnN0Owor
ICAgIFRyYW5zaXRpb25LaW5kIHN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRpb24oVk0mKSBj
b25zdDsKIHB1YmxpYzoKICAgICAvLyBZb3Ugc2hvdWxkIG9ubHkgY2FsbCBpc1N0cnVjdHVyZUV4
dGVuc2libGUoKSB3aGVuOgogICAgIC8vIC0gUGVyZm9ybWluZyB0aGlzIGNoZWNrIGluIGEgd2F5
IHRoYXQgaXNuJ3QgZGVzY3JpYmVkIGluIHRoZSBzcGVjaWZpY2F0aW9uIApAQCAtMTAzNiwxOSAr
MTAzMCwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRl
Y2lkZWRUb0ludDMyKFZNJik7CiAgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydFVuZGVjaWRl
ZFRvRG91YmxlKFZNJik7CiAgICAgQ29udGlndW91c0pTVmFsdWVzIGNvbnZlcnRVbmRlY2lkZWRU
b0NvbnRpZ3VvdXMoVk0mKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0Fy
cmF5U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdl
KiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mLCBUcmFuc2l0aW9uS2luZCk7CiAg
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mKTsKICAg
ICAgICAgCiAgICAgQ29udGlndW91c0RvdWJsZXMgY29udmVydEludDMyVG9Eb3VibGUoVk0mKTsK
ICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydEludDMyVG9Db250aWd1b3VzKFZNJik7Ci0g
ICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3RvcmFnZShWTSYsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdlKiBjb252ZXJ0SW50MzJUb0FycmF5U3Rv
cmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQz
MlRvQXJyYXlTdG9yYWdlKFZNJik7CiAKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVydERv
dWJsZVRvQ29udGlndW91cyhWTSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRv
QXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAg
ICBBcnJheVN0b3JhZ2UqIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZShWTSYpOwogICAgICAg
ICAKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0m
LCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRp
Z3VvdXNUb0FycmF5U3RvcmFnZShWTSYsIFRyYW5zaXRpb25LaW5kKTsKICAgICBBcnJheVN0b3Jh
Z2UqIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0b3JhZ2UoVk0mKTsKIAogICAgICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5o
CShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09i
amVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzY0LDYgKzM2NCwxMSBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KIAorICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKKyAgICAvLyBzdHJ1Y3R1
cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5l
dyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQorICAgIC8vIHdlIHdhbnQuCisgICAgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZSh2bSwg
c3RydWN0dXJlKTsKKwogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRyaWJ1dGVzOwogICAgIG9mZnNl
dCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1cnJlbnRBdHRyaWJ1dGVzKTsK
ICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAgLTM3Niw3ICszODEsNyBAQCBB
TFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAgICAgICAgIC8vIEZJWE1F
OiBDaGVjayBhdHRyaWJ1dGVzIGFnYWluc3QgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vz
c29yT3JWYWx1ZS4gQ2hhbmdpbmcgR2V0dGVyU2V0dGVyIHNob3VsZCB3b3JrIHcvbyB0cmFuc2l0
aW9uLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE0MzQyCiAgICAgICAgIGlmIChtb2RlID09IFB1dE1vZGVEZWZpbmVPd25Qcm9wZXJ0eSAmJiAo
YXR0cmlidXRlcyAhPSBjdXJyZW50QXR0cmlidXRlcyB8fCAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZhbHVlKSkpCi0gICAgICAgICAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbih2
bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpKTsKKyAgICAgICAgICAgIHNl
dFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgJmRlZmVycmVkV2F0Y2hwb2ludEZp
cmUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5zZXRFeGlzdGluZ1Byb3BlcnR5
KHRoaXMsIG9mZnNldCk7CiAKQEAgLTM4NSwxMSArMzkwLDYgQEAgQUxXQVlTX0lOTElORSBib29s
IEpTT2JqZWN0OjpwdXREaXJlY3RJbgogCiAgICAgaWYgKChtb2RlID09IFB1dE1vZGVQdXQpICYm
ICFpc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3YXRjaHBvaW50IHRvIGZpcmUg
YWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCi0gICAgLy8gc3RydWN0dXJlLiBUaGlzIGFs
bG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZlIGlmIHRoZSBuZXcgc3RydWN0dXJl
IGlzIHRoZSBvbmUKLSAgICAvLyB3ZSB3YW50LgotICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNp
dGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZpcmUodm0sIHN0cnVjdHVyZSk7
CiAgICAgCiAgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjphZGROZXdQcm9wZXJ0eVRyYW5z
aXRpb24oCiAgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywg
b2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hwb2ludEZpcmUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAy
NjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03OCwyMiArNzgsMjIgQEAgaW5saW5lIHZvaWQgU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlOjpzZQogICAgIG1fZGF0YSA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oaW1w
bCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29sIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5zaWduZWQgYXR0cmlidXRl
cywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6
OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIFRy
YW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKSBjb25zdAogewogICAgIGlmIChpc1VzaW5nU2lu
Z2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHNpbmdsZVRyYW5z
aXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJhbnNpdGlvbi0+bV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9uLT5pc1Byb3BlcnR5RGVs
ZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAgIHJldHVybiB0cmFuc2l0
aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJh
bnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYg
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbktpbmQoKSA9PSB0cmFuc2l0aW9uS2luZDsKICAgICB9Ci0g
ICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXko
cmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCB0cmFuc2l0
aW9uS2luZCkpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFi
bGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29s
IGlzQWRkaXRpb24pIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1cmVUcmFuc2l0aW9u
VGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBU
cmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCkgY29uc3QKIHsKICAgICBpZiAoaXNVc2luZ1Np
bmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBzaW5nbGVUcmFu
c2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0cmFuc2l0aW9uLT5tX3Ry
YW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24tPnRyYW5zaXRpb25Qcm9w
ZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRpb24tPmlzUHJvcGVydHlE
ZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFuc2l0aW9uIDogbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0
cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvbktpbmQoKSA9
PSB0cmFuc2l0aW9uS2luZCkgPyB0cmFuc2l0aW9uIDogbnVsbHB0cjsKICAgICB9Ci0gICAgcmV0
dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBh
dHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJl
VHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCB0cmFuc2l0aW9uS2lu
ZCkpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6YWRkKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMTQsNyArMTE0LDcgQEAgdm9pZCBTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6OmFkZChWTSYgdgogICAgIH0KIAogICAgIC8vIEFkZCB0aGUgc3RydWN0dXJl
IHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhh
c2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0
dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1Y3R1cmUtPmlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAgbWFwKCktPnNldChTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblBy
b3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
KCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSksIHN0cnVjdHVyZSk7CiB9CiAKIHZvaWQg
U3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yNDQsMTMgKzI0NCwxMyBAQCBTdHJ1Y3R1
cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0SGFzVW5kZXJzY29yZVBy
b3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJhbnNp
dGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0
aW9uS2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4dGVuc2lvbnMoZmFsc2UpOwog
ICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlm
aWVkKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVk
KGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShmYWxzZSk7CiAgICAgc2V0UHJvdGVj
dFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOwotICAgIHNldElzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0s
IGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAg
CkBAIC0yODIsMTMgKzI4MiwxMyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0pCiAgICAg
c2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNl
KTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1
ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFu
c2l0aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4
dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0
YXRpY1Byb3BlcnRpZXNSZWlmaWVkKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hwb2lu
dElzTGlrZWx5VG9CZUZpcmVkKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShmYWxz
ZSk7CiAgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2Up
OwotICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRy
YW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwg
aW52YWxpZE9mZnNldCk7CiAgCkBAIC0zMjAsMTIgKzMyMCwxMiBAQCBTdHJ1Y3R1cmU6OlN0cnVj
dHVyZShWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVy
dHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKHByZXZpb3VzLT5oYXNVbmRlcnNjb3JlUHJvdG9Qcm9w
ZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8oKSk7CiAgICAgc2V0SXNRdWlja1Byb3BlcnR5QWNj
ZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHByZXZpb3VzLT5pc1F1aWNrUHJvcGVydHlBY2Nlc3NB
bGxvd2VkRm9yRW51bWVyYXRpb24oKSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmli
dXRlcygwKTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7
CiAgICAgc2V0RGlkUHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPmRpZFByZXZlbnRFeHRlbnNp
b25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAgc2V0U3RhdGljUHJvcGVy
dGllc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKCkpOwogICAgIHNl
dEhhc0JlZW5EaWN0aW9uYXJ5KHByZXZpb3VzLT5oYXNCZWVuRGljdGlvbmFyeSgpKTsKICAgICBz
ZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7Ci0gICAgc2V0
SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAgc2V0VHJhbnNpdGlvbk9m
ZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0KHZtLCBpbnZhbGlkT2Zm
c2V0KTsKICAKQEAgLTQ0NCw2ICs0NDQsNyBAQCBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1h
dGVyaWFsaXplUHJvCiAgICAgICAgICAgICB0YWJsZS0+YWRkRGVsZXRlZE9mZnNldChzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
fQorICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Byb3BlcnR5QWRkaXRpb25UcmFuc2l0aW9u
KCkpOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0
aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3Ry
dWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5l
eHRPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkp
OwogICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0
dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwpAQCAtNDcyLDggKzQ3Myw3IEBAIFN0cnVjdHVyZSog
U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNE
aWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2JqZWN0KCkpOwogCi0gICAg
Y29uc3RleHByIGJvb2wgaXNBZGRpdGlvbiA9IHRydWU7Ci0gICAgaWYgKFN0cnVjdHVyZSogZXhp
c3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQodWlkLCBh
dHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJh
bnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHVpZCwgYXR0cmlidXRl
cywgVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb24pKSB7CiAgICAgICAgIHZhbGlkYXRl
T2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCBleGlzdGluZ1Ry
YW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZzZXQgPSBleGlzdGluZ1Ry
YW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKTsKICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKQEAgLTU3MSw2ICs1NzEsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YWRkTmV3
UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1
ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+
Q29weU9uV3JpdGUpOwogICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9
IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVy
dHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25L
aW5kKFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eUFkZGl0aW9uKTsKICAgICB0cmFuc2l0aW9uLT5z
ZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9uZUlm
UGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUt
Pm1heE9mZnNldCgpKTsKIApAQCAtNjA3LDkgKzYwOCw4IEBAIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpyZW1vdmVQcm9wZXJ0eVRyYW4KICAgICBBU1NFUlQoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJs
ZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNPYmplY3QoKSk7CiAKLSAg
ICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0aW9uID0gZmFsc2U7CiAgICAgb2Zmc2V0ID0gaW52YWxp
ZE9mZnNldDsKLSAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1
cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0ZXMs
IGlzQWRkaXRpb24pKSB7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0g
c3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRy
aWJ1dGVzLCBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikpIHsKICAgICAgICAgdmFs
aWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIGV4aXN0
aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIG9mZnNldCA9IGV4aXN0
aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpOwogICAgICAgICByZXR1cm4gZXhpc3Rp
bmdUcmFuc2l0aW9uOwpAQCAtNjY3LDkgKzY2Nyw5IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpy
ZW1vdmVOZXdQcm9wZXJ0eVQKIAogICAgIHRyYW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01v
ZGVJbmNsdWRpbmdIaXN0b3J5KHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9y
eSgpICYgfkNvcHlPbldyaXRlKTsKICAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0
eU5hbWUgPSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlv
bktpbmQoVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5RGVsZXRpb24pOwogICAgIHRyYW5zaXRpb24t
PnNldFByb3BlcnR5VGFibGUodm0sIHN0cnVjdHVyZS0+dGFrZVByb3BlcnR5VGFibGVPckNsb25l
SWZQaW5uZWQodm0pKTsKICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwotICAgIHRyYW5zaXRpb24tPnNldElzUHJvcGVydHlEZWxldGlvblRy
YW5zaXRpb24odHJ1ZSk7CiAKICAgICBvZmZzZXQgPSB0cmFuc2l0aW9uLT5yZW1vdmUodm0sIHBy
b3BlcnR5TmFtZSk7CiAgICAgQVNTRVJUKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KTsKQEAgLTcw
NywzMCArNzA3LDU4IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEK
ICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJp
YnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVy
dHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykKK1N0cnVjdHVyZSogU3Ry
dWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIERl
ZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAg
ICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgewotICAgICAgICBT
dHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVyZSk7CisgICAgYXV0byBz
ZXRFbnRyeUF0dHJpYnV0ZXMgPSBbJl0oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAg
UHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUo
dm0pLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAgICAgICAgQVNTRVJUKGVudHJ5KTsKKyAg
ICAgICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworCisgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgc3RydWN0
dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygpOworCisgICAgICAgIGlmIChhdHRy
aWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQorICAgICAgICAgICAgc3RydWN0
dXJlLT5zZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2Up
OworICAgIH07CisKKyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgp
KSB7CisgICAgICAgIHNldEVudHJ5QXR0cmlidXRlcyhzdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1
Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVy
ZTsKKyAgICB9CisKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAg
ICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5z
aXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVpZCgpLCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9u
S2luZDo6UHJvcGVydHlBdHRyaWJ1dGVDaGFuZ2UpKSB7CisgICAgICAgICAgICBjaGVja09mZnNl
dChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgZXhpc3RpbmdUcmFuc2l0
aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAgICAgICAgICAgIGV4aXN0aW5nVHJhbnNpdGlvbi0+
Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJh
bnNpdGlvbjsKKyAgICAgICAgfQogCi0gICAgICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOwotICAgICAgICB0cmFuc2l0
aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlvbi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKLSAgICAg
ICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsK
LSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVyZSA9IHRyYW5zaXRpb247CisgICAgICAgIGlmIChz
dHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudEVzdGltYXRlKCkgPiBzX21heFRyYW5zaXRpb25MZW5n
dGgpIHsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvQ2FjaGVhYmxlRGlj
dGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgICAgICAgICAg
c2V0RW50cnlBdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHRyYW5z
aXRpb247CisgICAgICAgIH0KICAgICB9CiAKLSAgICBQcm9wZXJ0eU1hcEVudHJ5KiBlbnRyeSA9
IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9wZXJ0eU5hbWUudWlk
KCkpOwotICAgIEFTU0VSVChlbnRyeSk7Ci0gICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsK
IAotICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5KQotICAg
ICAgICBzdHJ1Y3R1cmUtPnNldENvbnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgUHJv
cGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmlu
Zyh2bSk7CisgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayks
IHZtLCB0YWJsZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBzdHJ1Y3R1cmUt
Pm1heE9mZnNldCgpKTsKKyAgICB0cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUg
PSBwcm9wZXJ0eU5hbWUudWlkKCk7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9u
S2luZChUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlBdHRyaWJ1dGVDaGFuZ2UpOwogCi0gICAgaWYg
KGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pCi0gICAgICAgIHN0cnVj
dHVyZS0+c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNl
KTsKKyAgICBzZXRFbnRyeUF0dHJpYnV0ZXModHJhbnNpdGlvbik7CisgICAgY2hlY2tPZmZzZXQo
dHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpLCB0cmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0
eSgpKTsKKyAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgR0NT
YWZlQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihzdHJ1Y3R1cmUtPm1fbG9jaywgdm0uaGVhcCk7
CisgICAgICAgIHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuYWRkKHZtLCB0cmFuc2l0aW9u
KTsKKyAgICB9CiAKLSAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAg
ICByZXR1cm4gc3RydWN0dXJlOworICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVu
Y3koKTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgRGlj
dGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZp
cmUqIGRlZmVycmVkKQpAQCAtNzYyLDE3ICs3OTAsMTcgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
OnRvVW5jYWNoZWFibGVEaWN0aQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6c2VhbFRyYW5zaXRp
b24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICByZXR1cm4gbm9uUHJvcGVy
dHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U2VhbCk7
CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFuc2l0
aW9uS2luZDo6U2VhbCk7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJlOjpmcmVlemVUcmFuc2l0
aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAgcmV0dXJuIG5vblByb3Bl
cnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkZyZWV6
ZSk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFu
c2l0aW9uS2luZDo6RnJlZXplKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnByZXZlbnRF
eHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewotICAg
IHJldHVybiBub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgTm9uUHJvcGVydHlU
cmFuc2l0aW9uOjpQcmV2ZW50RXh0ZW5zaW9ucyk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6UHJldmVudEV4dGVuc2lvbnMp
OwogfQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9wZXJ0eVRhYmxlT3JDbG9u
ZUlmUGlubmVkKFZNJiB2bSkKQEAgLTc5MCwxNSArODE4LDEzIEBAIFByb3BlcnR5VGFibGUqIFN0
cnVjdHVyZTo6dGFrZVByb3BlcnR5VGEKICAgICByZXR1cm4gbWF0ZXJpYWxpemVQcm9wZXJ0eVRh
YmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxlKTsKIH0KIAotU3RydWN0dXJlKiBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6
Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwg
VHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbktpbmQpCiB7Ci0gICAgdW5zaWduZWQgYXR0cmlidXRl
cyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7CiAgICAgSW5kZXhpbmdUeXBlIGluZGV4
aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5pbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKICAgICAKICAgICBT
dHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKLSAgICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0
aW9uID0gdHJ1ZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkgJiYgKGV4aXN0
aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KG51bGxwdHIs
IGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKSkgewotICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFu
c2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyk7Cisg
ICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlzdGluZ1RyYW5zaXRpb24g
PSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChudWxscHRyLCAwLCB0cmFuc2l0aW9u
S2luZCkpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25L
aW5kKCkgPT0gdHJhbnNpdGlvbktpbmQpOwogICAgICAgICBBU1NFUlQoZXhpc3RpbmdUcmFuc2l0
aW9uLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5kZXhpbmdNb2RlSW5jbHVk
aW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5zaXRpb247CiAgICAgfQpA
QCAtODA2LDcgKzgzMiw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5z
aXQKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAgICAgU3RydWN0dXJlKiB0
cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIHRyYW5zaXRpb24tPnNldFRy
YW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CisgICAgdHJhbnNpdGlvbi0+
c2V0VHJhbnNpdGlvbktpbmQodHJhbnNpdGlvbktpbmQpOwogICAgIHRyYW5zaXRpb24tPm1fYmxv
Yi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5nTW9kZUluY2x1ZGluZ0hp
c3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnModHJhbnNpdGlvbktpbmQp
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlz
aW9uIDI2NTI3NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJl
KFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0aWMg
U3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVD
b25jdXJyZW50bHkoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eU9mZnNldCYpOwog
ICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1
Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0
Y2hwb2ludEZpcmUmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBh
dHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0
dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRj
aHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgU3Ry
dWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
RGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAg
ICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
ID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogc2Vh
bFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CiAgICAgc3Rh
dGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJl
Kik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiwgU3Ry
dWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBz
dGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93KFZNJiwgU3RydWN0dXJl
KiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9w
ZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBUcmFuc2l0aW9uS2luZCk7CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFuc2l0aW9uU2xv
dyhWTSYsIFN0cnVjdHVyZSosIFRyYW5zaXRpb25LaW5kKTsKIAogICAgIEpTX0VYUE9SVF9QUklW
QVRFIGJvb2wgaXNTZWFsZWQoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSBib29sIGlzRnJv
emVuKFZNJik7CkBAIC02OTEsNyArNjkxLDcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0IyN1cHBl
ck5hbWUodHlwZSBuZXdWYWx1ZSkgXAogICAgIHtcCiAgICAgICAgIG1fYml0RmllbGQgJj0gfihz
XyMjbG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAotICAgICAgICBtX2JpdEZpZWxkIHw9IChu
ZXdWYWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtcCisgICAgICAgIG1fYml0
RmllbGQgfD0gKHN0YXRpY19jYXN0PHVpbnQzMl90PihuZXdWYWx1ZSkgJiBzXyMjbG93ZXJOYW1l
IyNNYXNrKSA8PCBvZmZzZXQ7XAogICAgIH0KIAogICAgIERFRklORV9CSVRGSUVMRChEaWN0aW9u
YXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAyLCAwKTsKQEAgLTY5OSw3
ICs2OTksOCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc0dldHRlclNl
dHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIDEsIDMpOwogICAgIERF
RklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4
Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJvcGVydGllc0V4Y2x1ZGlu
Z1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgaXNRdWlja1Byb3BlcnR5
QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCBJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2Vk
Rm9yRW51bWVyYXRpb24sIDEsIDUpOwotICAgIERFRklORV9CSVRGSUVMRCh1bnNpZ25lZCwgdHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywg
MTQsIDYpOworICAgIERFRklORV9CSVRGSUVMRChUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVz
LCB0cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzLCA4LCA2KTsKKyAgICBERUZJTkVfQklURklFTEQoVHJhbnNpdGlvbktpbmQsIHRyYW5zaXRp
b25LaW5kLCBUcmFuc2l0aW9uS2luZCwgNiwgMTQpOwogICAgIERFRklORV9CSVRGSUVMRChib29s
LCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lvbnMsIDEsIDIwKTsKICAg
ICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlkVHJhbnNpdGlvbiwgMSwg
MjEpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9wZXJ0aWVzUmVpZmllZCwg
U3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDIyKTsKQEAgLTcxMCw5ICs3MTEsMTIgQEAgcHVi
bGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGljdGlvbmFyeSwgSGFzQmVl
bkRpY3Rpb25hcnksIDEsIDI3KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgcHJvdGVjdFBy
b3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVU
cmFuc2l0aW9uaW5nLCAxLCAyOCk7CiAgICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGhhc1VuZGVy
c2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywgSGFzVW5kZXJzY29yZVBy
b3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAxLCAyOSk7Ci0gICAgREVGSU5FX0JJ
VEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIElzUHJvcGVydHlEZWxl
dGlvblRyYW5zaXRpb24sIDEsIDMwKTsKIAogICAgIHN0YXRpY19hc3NlcnQoc19iaXRXaWR0aE9m
VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyA8PSBzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5
QXR0cmlidXRlcykgKiA4KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNfYml0V2lkdGhPZlRyYW5zaXRp
b25LaW5kIDw9IHNpemVvZihUcmFuc2l0aW9uS2luZCkgKiA4KTsKKworICAgIGJvb2wgaXNQcm9w
ZXJ0eUFkZGl0aW9uVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRyYW5zaXRpb25LaW5kKCkg
PT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb247IH0KKyAgICBib29sIGlzUHJvcGVy
dHlEZWxldGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiB0cmFuc2l0aW9uS2luZCgpID09
IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uOyB9CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDI2NTI3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgU3RydWN0dXJlOjpmb3JFYWNoUHJv
cGVydHlDb25jdXJyZW4KIAogICAgICAgICBzZWVuUHJvcGVydGllcy5hZGQoc3RydWN0dXJlLT5t
X3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCkpOwogCi0gICAgICAgIGlmIChzdHJ1Y3R1cmUt
PmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSkKKyAgICAgICAgaWYgKCFzdHJ1Y3R1cmUt
PmlzUHJvcGVydHlBZGRpdGlvblRyYW5zaXRpb24oKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
CiAgICAgICAgIGlmICghZnVuY3RvcihQcm9wZXJ0eU1hcEVudHJ5KHN0cnVjdHVyZS0+bV90cmFu
c2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwg
c3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpKSkgewpAQCAtNjA4LDcg
KzYwOCw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBTdHJ1Y3R1cmU6OnNob3VsZENvbnYKICAgICBy
ZXR1cm4gIWFPYmogJiYgIWJPYmo7CiB9CiAKLWlubGluZSBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6
bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uS2luZCkKK2lubGluZSBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUs
IFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKQogewogICAgIEluZGV4aW5nVHlwZSBpbmRl
eGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5ID0gbmV3SW5kZXhpbmdUeXBlKHN0cnVjdHVyZS0+aW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSgpLCB0cmFuc2l0aW9uS2luZCk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5z
aXRpb25UYWJsZS5oCShyZXZpc2lvbiAyNjUyNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTA1ICszNSwxMDUgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1
Y3R1cmU7CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8g
d2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzID0gdWludDhfdDsKK2NvbnN0ZXhwciB1aW50OF90IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0
aW9uID0gMSA8PCA0OwogCi0vLyBTdXBwb3J0IGZvciBhdHRyaWJ1dGVzIHVzZWQgdG8gaW5kaWNh
dGUgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KLS8vIElmIGFueSBvZiB0
aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBwb3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAu
Ci1lbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVuc2lnbmVkIHsKLSAgICBBbGxv
Y2F0ZVVuZGVjaWRlZCwKLSAgICBBbGxvY2F0ZUludDMyLAotICAgIEFsbG9jYXRlRG91YmxlLAot
ICAgIEFsbG9jYXRlQ29udGlndW91cywKLSAgICBBbGxvY2F0ZUFycmF5U3RvcmFnZSwKLSAgICBB
bGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UsCi0gICAgU3dpdGNoVG9TbG93UHV0QXJyYXlTdG9y
YWdlLAotICAgIEFkZEluZGV4ZWRBY2Nlc3NvcnMsCi0gICAgUHJldmVudEV4dGVuc2lvbnMsCi0g
ICAgU2VhbCwKLSAgICBGcmVlemUKK2VudW0gY2xhc3MgVHJhbnNpdGlvbktpbmQgOiB1aW50OF90
IHsKKyAgICBVbmtub3duID0gICAgICAgICAgICAgICAgICAgICAwLAorICAgIFByb3BlcnR5QWRk
aXRpb24gPSAgICAgICAgICAgIDEsCisgICAgUHJvcGVydHlEZWxldGlvbiA9ICAgICAgICAgICAg
MiwKKyAgICBQcm9wZXJ0eUF0dHJpYnV0ZUNoYW5nZSA9ICAgICAzLAorCisgICAgLy8gU3VwcG9y
dCBmb3IgdHJhbnNpdGlvbnMgbm90IHJlbGF0ZWQgdG8gcHJvcGVydGllcy4KKyAgICAvLyBJZiBh
bnkgb2YgdGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3Vs
ZCBiZSAwLgorICAgIEFsbG9jYXRlVW5kZWNpZGVkID0gICAgICAgICAgIDAgfCBGaXJzdE5vblBy
b3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBbGxvY2F0ZUludDMyID0gICAgICAgICAgICAgICAxIHwg
Rmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24sCisgICAgQWxsb2NhdGVEb3VibGUgPSAgICAgICAg
ICAgICAgMiB8IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0aW9uLAorICAgIEFsbG9jYXRlQ29udGln
dW91cyA9ICAgICAgICAgIDMgfCBGaXJzdE5vblByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBbGxv
Y2F0ZUFycmF5U3RvcmFnZSA9ICAgICAgICA0IHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24s
CisgICAgQWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlID0gNSB8IEZpcnN0Tm9uUHJvcGVydHlU
cmFuc2l0aW9uLAorICAgIFN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSA9IDYgfCBGaXJzdE5v
blByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBBZGRJbmRleGVkQWNjZXNzb3JzID0gICAgICAgICA3
IHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb24sCisgICAgUHJldmVudEV4dGVuc2lvbnMgPSAg
ICAgICAgICAgOCB8IEZpcnN0Tm9uUHJvcGVydHlUcmFuc2l0aW9uLAorICAgIFNlYWwgPSAgICAg
ICAgICAgICAgICAgICAgICAgIDkgfCBGaXJzdE5vblByb3BlcnR5VHJhbnNpdGlvbiwKKyAgICBG
cmVlemUgPSAgICAgICAgICAgICAgICAgICAgIDEwIHwgRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRp
b24sCiB9OwotdXNpbmcgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyA9IHVpbnQxNl90Owog
Ci1pbmxpbmUgdW5zaWduZWQgdG9BdHRyaWJ1dGVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFu
c2l0aW9uKQotewotICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHJhbnNpdGlvbikg
KyBGaXJzdEludGVybmFsQXR0cmlidXRlOwotfQotCi1pbmxpbmUgYm9vbCBjaGFuZ2VzSW5kZXhp
bmdUeXBlKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgY2hh
bmdlc0luZGV4aW5nVHlwZShUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uKQogewogICAgIHN3aXRj
aCAodHJhbnNpdGlvbikgewotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZVVuZGVjaWRlZDoKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQz
MjoKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGU6Ci0gICAg
Y2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czoKLSAgICBjYXNl
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICBj
YXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgot
ICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBZGRJbmRleGVkQWNjZXNzb3JzOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlVW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlSW50MzI6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2Nh
dGVEb3VibGU6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgor
ICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgIGNhc2Ug
VHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIFRy
YW5zaXRpb25LaW5kOjpTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBUcmFu
c2l0aW9uS2luZDo6QWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotaW5saW5lIElu
ZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3Bl
cnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGlu
Z1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFsbG9jYXRlVW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRl
VW5kZWNpZGVkOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUp
KTsKICAgICAgICAgcmV0dXJuIG9sZFR5cGUgfCBVbmRlY2lkZWRTaGFwZTsKLSAgICBjYXNlIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMjoKKyAgICBjYXNlIFRyYW5zaXRpb25L
aW5kOjpBbGxvY2F0ZUludDMyOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVz
KG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBvbGRUeXBlID09IENvcHlPbldy
aXRlQXJyYXlXaXRoSW50MzIpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SW5kZXhpbmdT
aGFwZUFuZFdyaXRhYmlsaXR5TWFzaykgfCBJbnQzMlNoYXBlOwotICAgIGNhc2UgTm9uUHJvcGVy
dHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZToKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpB
bGxvY2F0ZURvdWJsZToKICAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRU
eXBlKSB8fCBoYXNVbmRlY2lkZWQob2xkVHlwZSkgfHwgaGFzSW50MzIob2xkVHlwZSkgfHwgb2xk
VHlwZSA9PSBDb3B5T25Xcml0ZUFycmF5V2l0aERvdWJsZSk7CiAgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IERvdWJsZVNoYXBlOwot
ICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAg
Y2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgogICAgICAgICBBU1NFUlQo
IWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8
fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgb2xkVHlwZSA9PSBD
b3B5T25Xcml0ZUFycmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUg
JiB+SW5kZXhpbmdTaGFwZUFuZFdyaXRhYmlsaXR5TWFzaykgfCBDb250aWd1b3VzU2hhcGU7Ci0g
ICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NF
UlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBl
KSB8fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGln
dW91cyhvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBl
QW5kV3JpdGFiaWxpdHlNYXNrKSB8IEFycmF5U3RvcmFnZVNoYXBlOwotICAgIGNhc2UgTm9uUHJv
cGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBU
cmFuc2l0aW9uS2luZDo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NF
UlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBl
KSB8fCBoYXNJbnQzMihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGln
dW91cyhvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBl
QW5kV3JpdGFiaWxpdHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKLSAgICBjYXNl
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAg
IGNhc2UgVHJhbnNpdGlvbktpbmQ6OlN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAg
ICAgQVNTRVJUKGhhc0FycmF5U3RvcmFnZShvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xk
VHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0
b3JhZ2VTaGFwZTsKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWRkSW5kZXhlZEFj
Y2Vzc29yczoKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpBZGRJbmRleGVkQWNjZXNzb3JzOgog
ICAgICAgICByZXR1cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogICAgIGRl
ZmF1bHQ6CiAgICAgICAgIHJldHVybiBvbGRUeXBlOwogICAgIH0KIH0KIAotaW5saW5lIGJvb2wg
cHJldmVudHNFeHRlbnNpb25zKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5s
aW5lIGJvb2wgcHJldmVudHNFeHRlbnNpb25zKFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7
CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OlByZXZlbnRFeHRlbnNpb25zOgotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpT
ZWFsOgotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpGcmVlemU6CisgICAgY2FzZSBU
cmFuc2l0aW9uS2luZDo6UHJldmVudEV4dGVuc2lvbnM6CisgICAgY2FzZSBUcmFuc2l0aW9uS2lu
ZDo6U2VhbDoKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAK
LWlubGluZSBib29sIHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKE5vblByb3BlcnR5VHJh
bnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgc2V0c0RvbnREZWxldGVPbkFsbFByb3Bl
cnRpZXMoVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRp
b24pIHsKLSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U2VhbDoKLSAgICBjYXNlIE5v
blByb3BlcnR5VHJhbnNpdGlvbjo6RnJlZXplOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OlNl
YWw6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6RnJlZXplOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1pbmxp
bmUgYm9vbCBzZXRzUmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyhOb25Qcm9wZXJ0eVRy
YW5zaXRpb24gdHJhbnNpdGlvbikKK2lubGluZSBib29sIHNldHNSZWFkT25seU9uTm9uQWNjZXNz
b3JQcm9wZXJ0aWVzKFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0
cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkZyZWV6ZToKKyAg
ICBjYXNlIFRyYW5zaXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NiwyNyArMTQ2LDI4IEBAIGNs
YXNzIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgCiAjaWYgQ1BVKEFERFJFU1M2NCkK
ICAgICBzdHJ1Y3QgSGFzaCB7Ci0gICAgICAgIC8vIExvZ2ljYWxseSwgS2V5IGlzIGEgdHVwbGUg
b2YgKDEpIFVuaXF1ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGFuZCAo
MykgYm9vbCBpc0FkZGl0aW9uLgotICAgICAgICAvLyBXZSBlbmNvZGUgKDIpIGFuZCAoMykgaW50
byAoMSkncyBlbXB0eSBiaXRzIHNpbmNlIGEgcG9pbnRlciBpcyA0OGJpdCBhbmQgbG93ZXIgMyBi
aXRzIGFyZSB1c2FibGUgYmVjYXVzZSBvZiBhbGlnbm1lbnQuCisgICAgICAgIC8vIExvZ2ljYWxs
eSwgS2V5IGlzIGEgdHVwbGUgb2YgKDEpIFVuaXF1ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGFuZCAoMykgdHJhbnNpdGlvbktpbmQuCiAgICAgICAgIHN0cnVjdCBLZXkg
ewogICAgICAgICAgICAgZnJpZW5kIHN0cnVjdCBIYXNoOwogICAgICAgICAgICAgc3RhdGljX2Fz
c2VydChXVEZfT1NfQ09OU1RBTlRfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEggPD0gNDgpOwotICAg
ICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgaXNBZGRpdGlvbk1hc2sgPSAxVUxM
OwotICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgo
MVVMTCA8PCA0OCkgLSAxKSAmICh+aXNBZGRpdGlvbk1hc2spOwogICAgICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1bnNpZ25lZCBhdHRyaWJ1dGVzU2hpZnQgPSA0ODsKKyAgICAgICAgICAgIHN0
YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgdHJhbnNpdGlvbktpbmRTaGlmdCA9IDU2OworICAgICAg
ICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgxVUxMIDw8IGF0
dHJpYnV0ZXNTaGlmdCkgLSAxOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRy
X3QgaGFzaFRhYmxlRGVsZXRlZFZhbHVlID0gMHgyOwotICAgICAgICAgICAgc3RhdGljX2Fzc2Vy
dChzaXplb2YoVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4IDw9IDE2KTsKKyAgICAg
ICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMp
ICogOCA8PSA4KTsKKyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25L
aW5kKSAqIDggPD0gOCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSA8IGFsaWdub2YoVW5pcXVlZFN0cmluZ0ltcGwpKTsKIAotICAgICAgICAgICAgLy8g
SGlnaGVzdCAxNiBiaXRzIGFyZSBmb3IgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcy4KLSAg
ICAgICAgICAgIC8vIExvd2VzdCAxIGJpdCBpcyBmb3IgaXNBZGRpdGlvbiBmbGFnLgorICAgICAg
ICAgICAgLy8gSGlnaGVzdCA4IGJpdHMgYXJlIGZvciBUcmFuc2l0aW9uS2luZDsgbmV4dCA4IGJl
bG9uZyB0byBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLgogICAgICAgICAgICAgLy8gUmVt
YWluaW5nIGJpdHMgYXJlIGZvciBVbmlxdWVkU3RyaW5nSW1wbCouCi0gICAgICAgICAgICBLZXko
VW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRp
dGlvbikKLSAgICAgICAgICAgICAgICA6IG1fZW5jb2RlZERhdGEoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oaW1wbCkgfCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PihhdHRyaWJ1dGVzKSA8PCBhdHRy
aWJ1dGVzU2hpZnQpIHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaXNBZGRpdGlvbikgJiBpc0Fk
ZGl0aW9uTWFzaykpCisgICAgICAgICAgICBLZXkoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVu
c2lnbmVkIGF0dHJpYnV0ZXMsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKQorICAgICAg
ICAgICAgICAgIDogbV9lbmNvZGVkRGF0YShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbXBsKSB8
IChzdGF0aWNfY2FzdDx1aW50cHRyX3Q+KGF0dHJpYnV0ZXMpIDw8IGF0dHJpYnV0ZXNTaGlmdCkg
fCAoc3RhdGljX2Nhc3Q8dWludHB0cl90Pih0cmFuc2l0aW9uS2luZCkgPDwgdHJhbnNpdGlvbktp
bmRTaGlmdCkpCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGltcGwgPT0g
dGhpcy0+aW1wbCgpKTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNBZGRpdGlvbiA9PSB0aGlz
LT5pc0FkZGl0aW9uKCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzIDw9IFVJ
TlQ4X01BWCk7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gdGhpcy0+YXR0
cmlidXRlcygpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQodHJhbnNpdGlvbktpbmQgIT0gVHJh
bnNpdGlvbktpbmQ6OlVua25vd24pOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9u
S2luZCA9PSB0aGlzLT50cmFuc2l0aW9uS2luZCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAg
ICAgICAgS2V5KCkgPSBkZWZhdWx0OwpAQCAtMTc4LDggKzE3OSw4IEBAIGNsYXNzIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGVkRGF0YSA9PSBoYXNoVGFibGVEZWxldGVkVmFs
dWU7IH0KIAogICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJl
dHVybiBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihtX2VuY29kZWREYXRhICYgc3Ry
aW5nTWFzayk7IH0KLSAgICAgICAgICAgIGJvb2wgaXNBZGRpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5jb2RlZERhdGEgJiBpc0FkZGl0aW9uTWFzazsgfQotICAgICAgICAgICAgdW5zaWduZWQg
YXR0cmlidXRlcygpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZERhdGEgPj4gYXR0cmlidXRlc1No
aWZ0OyB9CisgICAgICAgICAgICBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGF0dHJpYnV0
ZXMoKSBjb25zdCB7IHJldHVybiAobV9lbmNvZGVkRGF0YSA+PiBhdHRyaWJ1dGVzU2hpZnQpICYg
VUlOVDhfTUFYOyB9CisgICAgICAgICAgICBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCgp
IGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFRyYW5zaXRpb25LaW5kPihtX2VuY29kZWREYXRh
ID4+IHRyYW5zaXRpb25LaW5kU2hpZnQpOyB9CiAKICAgICAgICAgICAgIGZyaWVuZCBib29sIG9w
ZXJhdG9yPT0oY29uc3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCiAgICAgICAgICAgICB7CkBAIC0y
MTAsMTIgKzIxMSwxMiBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIH07
CiAjZWxzZQogICAgIHN0cnVjdCBIYXNoIHsKLSAgICAgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBs
ZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBib29sPjsKKyAgICAgICAgdXNpbmcgS2V5
ID0gc3RkOjp0dXBsZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBUcmFuc2l0aW9uS2lu
ZD47CiAgICAgICAgIHVzaW5nIEtleVRyYWl0cyA9IEhhc2hUcmFpdHM8S2V5PjsKICAgICAgICAg
CiAgICAgICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEtleSYgcCkKICAgICAgICAgewot
ICAgICAgICAgICAgcmV0dXJuIFB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChzdGQ6
OmdldDwwPihwKSkgKyBzdGQ6OmdldDwxPihwKTsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNo
PFVuaXF1ZWRTdHJpbmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4o
cCkgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RkOjpnZXQ8Mj4ocCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCkBA
IC0yNDksOCArMjUwLDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYWRkKFZNJiwgU3Ry
dWN0dXJlKik7Ci0gICAgYm9vbCBjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQo
VW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24p
IGNvbnN0OworICAgIGJvb2wgY29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZCkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5p
cXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZCkgY29u
c3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vh
a093bmVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406557</attachid>
            <date>2020-08-13 16:44:15 -0700</date>
            <delta_ts>2020-08-13 20:10:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200814024413.patch</filename>
            <type>text/plain</type>
            <size>52778</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU2MzYpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0cmlidXRl
cy5qczogQWRkZWQuCisKIDIwMjAtMDgtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZv
cndhcmRpbmdQcm94eQpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJv
cGVydHktcHJldmlvdXMtYXR0cmlidXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9yZWRlZmluZS1wcm9wZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVzLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZGVmaW5lLXByb3BlcnR5LXBy
ZXZpb3VzLWF0dHJpYnV0ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAordmFy
IGRlc2MxID0ge3ZhbHVlOiAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNv
bmZpZ3VyYWJsZTogdHJ1ZX07Cit2YXIgZGVzYzIgPSB7dmFsdWU6IDEsIHdyaXRhYmxlOiBmYWxz
ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHZhciBvYmogPSB7Zm9vOiAxfTsKKworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBkZXNjMSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iaiwgImZvbyIsIGRlc2MyKTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2Jq
LCAiZm9vIiwgZGVzYzEpOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBk
ZXNjMik7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRlc2MxKTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAiZm9vIiwgZGVzYzIpOworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU2MzYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzggQEAKKzIwMjAtMDgt
MTMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIENh
Y2hlIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbigpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4OTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoOgorCisgICAgICAg
IDEuIFJld29ya3MgZW5jb2Rpbmcgb2YgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpL
ZXkgdG8gZW5hYmxlIHN0b3JpbmcgYXR0cmlidXRlCisgICAgICAgICAgIGNoYW5nZSB0cmFuc2l0
aW9ucyBpbiBhIHRyYW5zaXRpb24gdGFibGUuIFNpbmNlIHRhYmxlIGVudHJ5IGF0dHJpYnV0ZXMg
YXJlIGFsd2F5cworICAgICAgICAgICB1aW50OF90LCByZW1haW5pbmcgOCBiaXRzIGFyZSB1c2Vk
IGZvciBUcmFuc2l0aW9uS2luZCB0byBhY2NvbW9kYXRlIG5vbi1wcm9wZXJ0eQorICAgICAgICAg
ICB0cmFuc2l0aW9ucywgcmVtb3ZpbmcgYSBiaXQgaGFja3kgdG9BdHRyaWJ1dGVzKCkgYW5kIHV0
aWxpemF0aW9uIG9mIHVudXNlZCBwb2ludGVyCisgICAgICAgICAgIGJpdHMuIEl0IGFsc28gaW50
cm9kdWNlcyBUcmFuc2l0aW9uS2luZDo6VW5rbm93biB3ZSBjYW4gdmFsaWRhdGUgYWdhaW5zdCwg
cmVtb3ZpbmcKKyAgICAgICAgICAgYSBwb3RlbnRpYWxseSB1bnNhZmUgImFkZGl0aW9uIHRyYW5z
aXRpb24gYXMgYSBkZWZhdWx0Ii4KKworICAgICAgICAyLiBGb3IgYSBub24tZGljdGlvbmF0eSBz
dHJ1Y3R1cmUsIHNhdmVzIGF0dHJpYnV0ZSBjaGFuZ2UgdHJhbnNpdGlvbnMgKHdpdGggbWF0ZXJp
YWxpemVkCisgICAgICAgICAgIHByb3BlcnR5IHRhYmxlcykgdG8gYSB0cmFuc2l0aW9uIHRhYmxl
LCBtYWtpbmcgcmVkZWZpbml0aW9uIHRvIHByZXZpb3VzIGF0dHRyaWJ1dGVzCisgICAgICAgICAg
IGEgZmFzdCBwYXRoLiBJZiB0aGVyZSBhcmUgdG9vIG1hbnkgdHJhbnNpdGlvbnMsIHRoZSBzdHJ1
Y3R1cmUgYmVjb21lcyBhIGRpY3Rpb25hcnksCisgICAgICAgICAgIGZpcmluZyB0aGUgdHJhbnNp
dGlvbiB3YXRjaHBvaW50LiBUaGlzIGFkdmFuY2VzIHByb3ZpZGVkIG1pY3JvYmVuY2htYXJrIGJ5
IH45MCUsCisgICAgICAgICAgIGFuZCBwcm9ncmVzc2VzIFNwZWVkb21ldGVyMi9FbWJlckpTLURl
YnVnLVRvZG9NVkMgYnkgfjEyJSAofjUlIG92ZXIgcjI2NDU3MykuCisKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6Om5vdGlmeVByZXNlbmNl
T2ZJbmRleGVkQWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRp
YWxVbmRlY2lkZWQpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbEludDMy
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNyZWF0ZUluaXRpYWxEb3VibGUpOgorICAgICAg
ICAoSlNDOjpKU09iamVjdDo6Y3JlYXRlSW5pdGlhbENvbnRpZ3VvdXMpOgorICAgICAgICAoSlND
OjpKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvSW50MzIpOgorICAgICAgICAoSlNDOjpKU09i
amVjdDo6Y29udmVydFVuZGVjaWRlZFRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNvbnZlcnRVbmRlY2lkZWRUb0NvbnRpZ3VvdXMpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6
Y29udmVydFVuZGVjaWRlZFRvQXJyYXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRJ
bnQzMlRvQ29udGlndW91cyk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0SW50MzJU
b0FycmF5U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0RG91YmxlVG9D
b250aWd1b3VzKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnREb3VibGVUb0FycmF5
U3RvcmFnZSk6CisgICAgICAgIChKU0M6OkpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJy
YXlTdG9yYWdlKToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OmNvbnZlcnRGcm9tQ29weU9uV3Jp
dGUpOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6c3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdl
KToKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnN1Z2dlc3RlZEFycmF5U3RvcmFnZVRyYW5zaXRp
b24gY29uc3QpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPYmplY3QuaDoKKyAgICAgICAgKiBydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0
SW50ZXJuYWwpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpjb250YWlucyBjb25zdCk6CisgICAgICAgIChK
U0M6OlN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6Z2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjphZGQpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6
OlN0cnVjdHVyZSk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm9wZXJ0
eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXRpb25U
b0V4aXN0aW5nU3RydWN0dXJlSW1wbCk6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YWRkTmV3
UHJvcGVydHlUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVQcm9w
ZXJ0eVRyYW5zaXRpb25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVJbXBsKToKKyAgICAgICAgKEpTQzo6
U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpT
dHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1
Y3R1cmU6OnNlYWxUcmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpmcmVlemVU
cmFuc2l0aW9uKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpwcmV2ZW50RXh0ZW5zaW9uc1Ry
YW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlv
blNsb3cpOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6Zm9yRWFjaFBy
b3BlcnR5Q29uY3VycmVudGx5KToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxl
Lmg6CisgICAgICAgIChKU0M6OmNoYW5nZXNJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpu
ZXdJbmRleGluZ1R5cGUpOgorICAgICAgICAoSlNDOjpwcmV2ZW50c0V4dGVuc2lvbnMpOgorICAg
ICAgICAoSlNDOjpzZXRzRG9udERlbGV0ZU9uQWxsUHJvcGVydGllcyk6CisgICAgICAgIChKU0M6
OnNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVzKToKKyAgICAgICAgKEpTQzo6U3Ry
dWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OktleSk6CisgICAgICAgIChKU0M6OlN0
cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5OjphdHRyaWJ1dGVzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OnRyYW5zaXRp
b25LaW5kIGNvbnN0KToKKyAgICAgICAgKEpTQzo6dG9BdHRyaWJ1dGVzKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6U3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXk6OmlzQWRkaXRp
b24gY29uc3QpOiBEZWxldGVkLgorCiAyMDIwLTA4LTEyICBLZWl0aCBSb2xsaW4gIDxrcm9sbGlu
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIG5lZWQgZm9yIGRlZmluaW5nIFVTRV9O
RVdfQlVJTERfU1lTVEVNCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNw
cAkocmV2aXNpb24gMjY1NjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFw
aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MjYsOCArMTcyNiw3IEBAIE1ldGhvZE9mR2V0dGlu
Z0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1ldGgKIAogYm9vbCBHcmFwaDo6Z2V0UmVnRXhwUHJvdG90
eXBlUHJvcGVydHkoSlNPYmplY3QqIHJlZ0V4cFByb3RvdHlwZSwgU3RydWN0dXJlKiByZWdFeHBQ
cm90b3R5cGVTdHJ1Y3R1cmUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUmIHJldHVy
bkpTVmFsdWUpCiB7Ci0gICAgdW5zaWduZWQgYXR0cmlidXRlc1VudXNlZDsKLSAgICBQcm9wZXJ0
eU9mZnNldCBvZmZzZXQgPSByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRs
eSh1aWQsIGF0dHJpYnV0ZXNVbnVzZWQpOworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHJl
Z0V4cFByb3RvdHlwZVN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFp
c1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0LmNwcAkocmV2aXNpb24gMjY1NjM2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDc4LDcgKzEwNzgsNyBAQCB2b2lkIEpTT2JqZWN0Ojpub3RpZnlQcmVzZW5j
ZU9mSW5kZXhlZEFjCiAgICAgaWYgKG1heUludGVyY2VwdEluZGV4ZWRBY2Nlc3Nlcyh2bSkpCiAg
ICAgICAgIHJldHVybjsKICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9u
UHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRp
b246OkFkZEluZGV4ZWRBY2Nlc3NvcnMpKTsKKyAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVy
ZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBUcmFuc2l0aW9uS2lu
ZDo6QWRkSW5kZXhlZEFjY2Vzc29ycykpOwogICAgIAogICAgIGlmICghbWF5QmVQcm90b3R5cGUo
KSkKICAgICAgICAgcmV0dXJuOwpAQCAtMTExMCw3ICsxMTEwLDcgQEAgQnV0dGVyZmx5KiBKU09i
amVjdDo6Y3JlYXRlSW5pdGlhbFVuZGVjaQogICAgIEJ1dHRlcmZseSogbmV3QnV0dGVyZmx5ID0g
Y3JlYXRlSW5pdGlhbEluZGV4ZWRTdG9yYWdlKHZtLCBsZW5ndGgpOwogICAgIFN0cnVjdHVyZUlE
IG9sZFN0cnVjdHVyZUlEID0gdGhpcy0+c3RydWN0dXJlSUQoKTsKICAgICBTdHJ1Y3R1cmUqIG9s
ZFN0cnVjdHVyZSA9IHZtLmdldFN0cnVjdHVyZShvbGRTdHJ1Y3R1cmVJRCk7Ci0gICAgU3RydWN0
dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
b2xkU3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlVW5kZWNpZGVkKTsK
KyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFu
c2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZVVuZGVjaWRl
ZCk7CiAgICAgbnVrZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQs
IG5ld0J1dHRlcmZseSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAg
IHJldHVybiBuZXdCdXR0ZXJmbHk7CkBAIC0xMTI0LDcgKzExMjQsNyBAQCBDb250aWd1b3VzSlNW
YWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRpCiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGln
dW91cygpLmF0KHRoaXMsIGkpLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAg
ICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAgICAg
U3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQp
OwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRy
YW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0
ZUludDMyKTsKKyAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6bm9uUHJv
cGVydHlUcmFuc2l0aW9uKHZtLCBvbGRTdHJ1Y3R1cmUsIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0
ZUludDMyKTsKICAgICBudWtlU3RydWN0dXJlQW5kU2V0QnV0dGVyZmx5KHZtLCBvbGRTdHJ1Y3R1
cmVJRCwgbmV3QnV0dGVyZmx5KTsKICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7
CiAgICAgcmV0dXJuIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CkBAIC0xMTM4LDcg
KzExMzgsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y3JlYXRlSW5pdGlhCiAgICAg
ICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpLmF0KHRoaXMsIGkpID0gUE5hTjsK
ICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJRCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAg
ICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJl
SUQpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0
eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxv
Y2F0ZURvdWJsZSk7CisgICAgU3RydWN0dXJlKiBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6Om5v
blByb3BlcnR5VHJhbnNpdGlvbih2bSwgb2xkU3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6QWxs
b2NhdGVEb3VibGUpOwogICAgIG51a2VTdHJ1Y3R1cmVBbmRTZXRCdXR0ZXJmbHkodm0sIG9sZFN0
cnVjdHVyZUlELCBuZXdCdXR0ZXJmbHkpOwogICAgIHNldFN0cnVjdHVyZSh2bSwgbmV3U3RydWN0
dXJlKTsKICAgICByZXR1cm4gbmV3QnV0dGVyZmx5LT5jb250aWd1b3VzRG91YmxlKCk7CkBAIC0x
MTUyLDcgKzExNTIsNyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNyZWF0ZUluaXRp
CiAgICAgICAgIG5ld0J1dHRlcmZseS0+Y29udGlndW91cygpLmF0KHRoaXMsIGkpLnNldFdpdGhv
dXRXcml0ZUJhcnJpZXIoSlNWYWx1ZSgpKTsKICAgICBTdHJ1Y3R1cmVJRCBvbGRTdHJ1Y3R1cmVJ
RCA9IHRoaXMtPnN0cnVjdHVyZUlEKCk7CiAgICAgU3RydWN0dXJlKiBvbGRTdHJ1Y3R1cmUgPSB2
bS5nZXRTdHJ1Y3R1cmUob2xkU3RydWN0dXJlSUQpOwotICAgIFN0cnVjdHVyZSogbmV3U3RydWN0
dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9sZFN0cnVjdHVyZSwg
Tm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpOworICAgIFN0cnVjdHVy
ZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIG9s
ZFN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQ29udGlndW91cyk7CiAgICAgbnVr
ZVN0cnVjdHVyZUFuZFNldEJ1dHRlcmZseSh2bSwgb2xkU3RydWN0dXJlSUQsIG5ld0J1dHRlcmZs
eSk7CiAgICAgc2V0U3RydWN0dXJlKHZtLCBuZXdTdHJ1Y3R1cmUpOwogICAgIHJldHVybiBuZXdC
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKQEAgLTEyMDcsNyArMTIwNyw3IEBAIENvbnRpZ3VvdXNK
U1ZhbHVlcyBKU09iamVjdDo6Y29udmVydFVuZGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBidXR0
ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBidXR0ZXJmbHktPmNvbnRpZ3Vv
dXMoKS5hdCh0aGlzLCBpKS5zZXRXaXRob3V0V3JpdGVCYXJyaWVyKEpTVmFsdWUoKSk7CiAKLSAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlSW50MzIpKTsKKyAg
ICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBz
dHJ1Y3R1cmUodm0pLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVJbnQzMikpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0ludDMyKCk7CiB9CiAKQEAgLTEyMTksNyArMTIxOSw3
IEBAIENvbnRpZ3VvdXNEb3VibGVzIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWMKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBidXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpOyBpLS07KQogICAgICAgICBidXR0
ZXJmbHktPmNvbnRpZ3VvdXNEb3VibGUoKS5hdCh0aGlzLCBpKSA9IFBOYU47CiAgICAgCi0gICAg
c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSkpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZURvdWJsZSkpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC0xMjMyLDcgKzEyMzIs
NyBAQCBDb250aWd1b3VzSlNWYWx1ZXMgSlNPYmplY3Q6OmNvbnZlcnRVbmRlCiAgICAgICAgIGJ1
dHRlcmZseS0+Y29udGlndW91cygpLmF0KHRoaXMsIGkpLnNldFdpdGhvdXRXcml0ZUJhcnJpZXIo
SlNWYWx1ZSgpKTsKIAogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgc2V0U3RydWN0
dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlKHZt
KSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKKyAgICBzZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzKSk7CiAgICAgcmV0dXJu
IG1fYnV0dGVyZmx5LT5jb250aWd1b3VzKCk7CiB9CiAKQEAgLTEyNTksNyArMTI1OSw3IEBAIEFy
cmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnN0cnVjdENvbnZlcnQKICAgICByZXR1cm4gbmV3U3Rv
cmFnZTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29udmVydFVuZGVjaWRlZFRvQXJy
YXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJh
eVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0VW5kZWNpZGVkVG9BcnJheVN0b3JhZ2UoVk0mIHZt
LCBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uKQogewogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5o
ZWFwKTsKICAgICBBU1NFUlQoaGFzVW5kZWNpZGVkKGluZGV4aW5nVHlwZSgpKSk7CkBAIC0xMzAy
LDcgKzEzMDIsNyBAQCBDb250aWd1b3VzRG91YmxlcyBKU09iamVjdDo6Y29udmVydEludDMyCiAg
ICAgICAgICpjdXJyZW50QXNEb3VibGUgPSB2LmFzSW50MzIoKTsKICAgICB9CiAgICAgCi0gICAg
c2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlKHZtKSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZURvdWJsZSkpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZURvdWJsZSkpOwogICAgIHJldHVy
biBtX2J1dHRlcmZseS0+Y29udGlndW91c0RvdWJsZSgpOwogfQogCkBAIC0xMzEwLDExICsxMzEw
LDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVydEludDMKIHsKICAgICBB
U1NFUlQoaGFzSW50MzIoaW5kZXhpbmdUeXBlKCkpKTsKICAgICAKLSAgICBzZXRTdHJ1Y3R1cmUo
dm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBO
b25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOworICAgIHNldFN0cnVj
dHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSh2
bSksIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICByZXR1cm4gbV9i
dXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09iamVjdDo6Y29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJh
bnNpdGlvbikKK0FycmF5U3RvcmFnZSogSlNPYmplY3Q6OmNvbnZlcnRJbnQzMlRvQXJyYXlTdG9y
YWdlKFZNJiB2bSwgVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRl
ZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhhc0ludDMyKGluZGV4aW5nVHlwZSgpKSk7CkBA
IC0xMzYxLDExICsxMzYxLDExIEBAIENvbnRpZ3VvdXNKU1ZhbHVlcyBKU09iamVjdDo6Y29udmVy
dERvdWIKICAgICB9CiAgICAgCiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICBzZXRT
dHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1
cmUodm0pLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91cykpOworICAg
IHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0
cnVjdHVyZSh2bSksIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXMpKTsKICAgICBy
ZXR1cm4gbV9idXR0ZXJmbHktPmNvbnRpZ3VvdXMoKTsKIH0KIAotQXJyYXlTdG9yYWdlKiBKU09i
amVjdDo6Y29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpjb252ZXJ0RG91Ymxl
VG9BcnJheVN0b3JhZ2UoVk0mIHZtLCBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uKQogewogICAg
IERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICBBU1NFUlQoaGFzRG91YmxlKGluZGV4aW5n
VHlwZSgpKSk7CkBAIC0xMzk2LDcgKzEzOTYsNyBAQCBBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0RG91YmxlVG9BCiAgICAgcmV0dXJuIGNvbnZlcnREb3VibGVUb0FycmF5U3RvcmFnZSh2
bSwgc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbih2bSkpOwogfQogCi1BcnJheVN0b3Jh
Z2UqIEpTT2JqZWN0Ojpjb252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiB2bSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb24pCitBcnJheVN0b3JhZ2UqIEpTT2JqZWN0Ojpj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiB2bSwgVHJhbnNpdGlvbktpbmQgdHJh
bnNpdGlvbikKIHsKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgQVNTRVJUKGhh
c0NvbnRpZ3VvdXMoaW5kZXhpbmdUeXBlKCkpKTsKQEAgLTE1NDAsMTcgKzE1NDAsMTcgQEAgdm9p
ZCBKU09iamVjdDo6Y29udmVydEZyb21Db3B5T25Xcml0ZShWTQogICAgIGdjU2FmZU1lbWNweShu
ZXdCdXR0ZXJmbHktPnByb3BlcnR5U3RvcmFnZSgpLCBvbGRCdXR0ZXJmbHktPnByb3BlcnR5U3Rv
cmFnZSgpLCBvbGRCdXR0ZXJmbHktPnZlY3Rvckxlbmd0aCgpICogc2l6ZW9mKEpTVmFsdWUpICsg
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSk7CiAKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwot
ICAgIE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uID0gKFsmXSAoKSB7CisgICAgVHJh
bnNpdGlvbktpbmQgdHJhbnNpdGlvbiA9IChbJl0gKCkgewogICAgICAgICBzd2l0Y2ggKGluZGV4
aW5nVHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXlXaXRoSW50MzI6Ci0gICAgICAgICAgICBy
ZXR1cm4gTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUludDMyOworICAgICAgICAgICAg
cmV0dXJuIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUludDMyOwogICAgICAgICBjYXNlIEFycmF5
V2l0aERvdWJsZToKLSAgICAgICAgICAgIHJldHVybiBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFs
bG9jYXRlRG91YmxlOworICAgICAgICAgICAgcmV0dXJuIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0
ZURvdWJsZTsKICAgICAgICAgY2FzZSBBcnJheVdpdGhDb250aWd1b3VzOgotICAgICAgICAgICAg
cmV0dXJuIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3VzOworICAgICAg
ICAgICAgcmV0dXJuIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXM7CiAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAg
ICAgICAgICAgcmV0dXJuIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVDb250aWd1b3Vz
OworICAgICAgICAgICAgcmV0dXJuIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZUNvbnRpZ3VvdXM7
CiAgICAgICAgIH0KICAgICB9KSgpOwogICAgIFN0cnVjdHVyZUlEIG9sZFN0cnVjdHVyZUlEID0g
c3RydWN0dXJlSUQoKTsKQEAgLTE3ODUsMjQgKzE3ODUsMjQgQEAgdm9pZCBKU09iamVjdDo6c3dp
dGNoVG9TbG93UHV0QXJyYXlTdG9yYQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQUxMX1VO
REVDSURFRF9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY29udmVydFVuZGVjaWRlZFRvQXJyYXlT
dG9yYWdlKHZtLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3Rv
cmFnZSk7CisgICAgICAgIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZSh2bSwgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIEFMTF9JTlQzMl9JTkRFWElOR19UWVBFUzoKLSAgICAgICAgY29u
dmVydEludDMyVG9BcnJheVN0b3JhZ2Uodm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2Nh
dGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29udmVydEludDMyVG9BcnJheVN0b3Jh
Z2Uodm0sIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2UpOwogICAg
ICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBBTExfRE9VQkxFX0lOREVYSU5HX1RZUEVT
OgotICAgICAgICBjb252ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2Uodm0sIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlKTsKKyAgICAgICAgY29udmVydERv
dWJsZVRvQXJyYXlTdG9yYWdlKHZtLCBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVTbG93UHV0QXJy
YXlTdG9yYWdlKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQUxMX0NPTlRJ
R1VPVVNfSU5ERVhJTkdfVFlQRVM6Ci0gICAgICAgIGNvbnZlcnRDb250aWd1b3VzVG9BcnJheVN0
b3JhZ2Uodm0sIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9y
YWdlKTsKKyAgICAgICAgY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZSh2bSwgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZSk7CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAKICAgICBjYXNlIE5vbkFycmF5V2l0aEFycmF5U3RvcmFnZToKICAgICBjYXNlIEFy
cmF5V2l0aEFycmF5U3RvcmFnZTogewotICAgICAgICBTdHJ1Y3R1cmUqIG5ld1N0cnVjdHVyZSA9
IFN0cnVjdHVyZTo6bm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUodm0pLCBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OlN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZSk7CisgICAgICAg
IFN0cnVjdHVyZSogbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRp
b24odm0sIHN0cnVjdHVyZSh2bSksIFRyYW5zaXRpb25LaW5kOjpTd2l0Y2hUb1Nsb3dQdXRBcnJh
eVN0b3JhZ2UpOwogICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIG5ld1N0cnVjdHVyZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KQEAgLTM5MDQsMTIgKzM5MDQsMTIgQEAgYm9vbCBKU09iamVjdDo6
bmVlZHNTbG93UHV0SW5kZXhpbmcoVk0mIAogICAgIHJldHVybiBhbnlPYmplY3RJbkNoYWluTWF5
SW50ZXJjZXB0SW5kZXhlZEFjY2Vzc2VzKHZtKSB8fCBnbG9iYWxPYmplY3Qodm0pLT5pc0hhdmlu
Z0FCYWRUaW1lKCk7CiB9CiAKLU5vblByb3BlcnR5VHJhbnNpdGlvbiBKU09iamVjdDo6c3VnZ2Vz
dGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbihWTSYgdm0pIGNvbnN0CitUcmFuc2l0aW9uS2luZCBK
U09iamVjdDo6c3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNpdGlvbihWTSYgdm0pIGNvbnN0CiB7
CiAgICAgaWYgKG5lZWRzU2xvd1B1dEluZGV4aW5nKHZtKSkKLSAgICAgICAgcmV0dXJuIE5vblBy
b3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOworICAgICAgICBy
ZXR1cm4gVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZTsKICAgICAK
LSAgICByZXR1cm4gTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUFycmF5U3RvcmFnZTsK
KyAgICByZXR1cm4gVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNP
YmplY3QuaAkocmV2aXNpb24gMjY1NjM2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODQsMTIgKzg0LDYgQEAgZXh0ZXJuIEpT
X0VYUE9SVF9QUklWQVRFIGNvbnN0IEFTQ0lJTGl0ZQogZXh0ZXJuIEpTX0VYUE9SVF9QUklWQVRF
IGNvbnN0IEFTQ0lJTGl0ZXJhbCBVbmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlRW51bWVyYWJp
bGl0eUVycm9yOwogZXh0ZXJuIEpTX0VYUE9SVF9QUklWQVRFIGNvbnN0IEFTQ0lJTGl0ZXJhbCBV
bmNvbmZpZ3VyYWJsZVByb3BlcnR5Q2hhbmdlV3JpdGFiaWxpdHlFcnJvcjsKIAotQ09NUElMRV9B
U1NFUlQoUHJvcGVydHlBdHRyaWJ1dGU6Ok5vbmUgPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBO
b25lX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotQ09NUElMRV9BU1NFUlQoUHJv
cGVydHlBdHRyaWJ1dGU6OlJlYWRPbmx5IDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgUmVhZE9u
bHlfaXNfYmVsb3dfRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSk7Ci1DT01QSUxFX0FTU0VSVChQcm9w
ZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0gPCBGaXJzdEludGVybmFsQXR0cmlidXRlLCBEb250RW51
bV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLUNPTVBJTEVfQVNTRVJUKFByb3Bl
cnR5QXR0cmlidXRlOjpEb250RGVsZXRlIDwgRmlyc3RJbnRlcm5hbEF0dHJpYnV0ZSwgRG9udERl
bGV0ZV9pc19iZWxvd19GaXJzdEludGVybmFsQXR0cmlidXRlKTsKLUNPTVBJTEVfQVNTRVJUKFBy
b3BlcnR5QXR0cmlidXRlOjpBY2Nlc3NvciA8IEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUsIEFjY2Vz
c29yX2lzX2JlbG93X0ZpcnN0SW50ZXJuYWxBdHRyaWJ1dGUpOwotCiBjbGFzcyBKU0ZpbmFsT2Jq
ZWN0OwogCiAjaWYgQVNTRVJUX0VOQUJMRUQKQEAgLTgyNCw3ICs4MTgsNyBAQCBwdWJsaWM6CiAg
ICAgYm9vbCBuZWVkc1Nsb3dQdXRJbmRleGluZyhWTSYpIGNvbnN0OwogCiBwcml2YXRlOgotICAg
IE5vblByb3BlcnR5VHJhbnNpdGlvbiBzdWdnZXN0ZWRBcnJheVN0b3JhZ2VUcmFuc2l0aW9uKFZN
JikgY29uc3Q7CisgICAgVHJhbnNpdGlvbktpbmQgc3VnZ2VzdGVkQXJyYXlTdG9yYWdlVHJhbnNp
dGlvbihWTSYpIGNvbnN0OwogcHVibGljOgogICAgIC8vIFlvdSBzaG91bGQgb25seSBjYWxsIGlz
U3RydWN0dXJlRXh0ZW5zaWJsZSgpIHdoZW46CiAgICAgLy8gLSBQZXJmb3JtaW5nIHRoaXMgY2hl
Y2sgaW4gYSB3YXkgdGhhdCBpc24ndCBkZXNjcmliZWQgaW4gdGhlIHNwZWNpZmljYXRpb24gCkBA
IC0xMDMyLDE5ICsxMDI2LDE5IEBAIHByb3RlY3RlZDoKICAgICBDb250aWd1b3VzSlNWYWx1ZXMg
Y29udmVydFVuZGVjaWRlZFRvSW50MzIoVk0mKTsKICAgICBDb250aWd1b3VzRG91YmxlcyBjb252
ZXJ0VW5kZWNpZGVkVG9Eb3VibGUoVk0mKTsKICAgICBDb250aWd1b3VzSlNWYWx1ZXMgY29udmVy
dFVuZGVjaWRlZFRvQ29udGlndW91cyhWTSYpOwotICAgIEFycmF5U3RvcmFnZSogY29udmVydFVu
ZGVjaWRlZFRvQXJyYXlTdG9yYWdlKFZNJiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBB
cnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFnZShWTSYsIFRyYW5zaXRp
b25LaW5kKTsKICAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRVbmRlY2lkZWRUb0FycmF5U3RvcmFn
ZShWTSYpOwogICAgICAgICAKICAgICBDb250aWd1b3VzRG91YmxlcyBjb252ZXJ0SW50MzJUb0Rv
dWJsZShWTSYpOwogICAgIENvbnRpZ3VvdXNKU1ZhbHVlcyBjb252ZXJ0SW50MzJUb0NvbnRpZ3Vv
dXMoVk0mKTsKLSAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQzMlRvQXJyYXlTdG9yYWdlKFZN
JiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBBcnJheVN0b3JhZ2UqIGNvbnZlcnRJbnQz
MlRvQXJyYXlTdG9yYWdlKFZNJiwgVHJhbnNpdGlvbktpbmQpOwogICAgIEFycmF5U3RvcmFnZSog
Y29udmVydEludDMyVG9BcnJheVN0b3JhZ2UoVk0mKTsKIAogICAgIENvbnRpZ3VvdXNKU1ZhbHVl
cyBjb252ZXJ0RG91YmxlVG9Db250aWd1b3VzKFZNJik7Ci0gICAgQXJyYXlTdG9yYWdlKiBjb252
ZXJ0RG91YmxlVG9BcnJheVN0b3JhZ2UoVk0mLCBOb25Qcm9wZXJ0eVRyYW5zaXRpb24pOworICAg
IEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZNJiwgVHJhbnNpdGlv
bktpbmQpOwogICAgIEFycmF5U3RvcmFnZSogY29udmVydERvdWJsZVRvQXJyYXlTdG9yYWdlKFZN
Jik7CiAgICAgICAgIAotICAgIEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5
U3RvcmFnZShWTSYsIE5vblByb3BlcnR5VHJhbnNpdGlvbik7CisgICAgQXJyYXlTdG9yYWdlKiBj
b252ZXJ0Q29udGlndW91c1RvQXJyYXlTdG9yYWdlKFZNJiwgVHJhbnNpdGlvbktpbmQpOwogICAg
IEFycmF5U3RvcmFnZSogY29udmVydENvbnRpZ3VvdXNUb0FycmF5U3RvcmFnZShWTSYpOwogCiAg
ICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmplY3RJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPYmpl
Y3RJbmxpbmVzLmgJKHJldmlzaW9uIDI2NTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDEx
IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogCisgICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5zaXRp
b24gd2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAorICAg
IC8vIHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2
ZSBpZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lCisgICAgLy8gd2Ugd2FudC4KKyAgICBE
ZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9p
bnRGaXJlKHZtLCBzdHJ1Y3R1cmUpOworCiAgICAgdW5zaWduZWQgY3VycmVudEF0dHJpYnV0ZXM7
CiAgICAgb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXQodm0sIHByb3BlcnR5TmFtZSwgY3VycmVudEF0
dHJpYnV0ZXMpOwogICAgIGlmIChvZmZzZXQgIT0gaW52YWxpZE9mZnNldCkgewpAQCAtMzc2LDcg
KzM4MSw3IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KICAgICAg
ICAgLy8gRklYTUU6IENoZWNrIGF0dHJpYnV0ZXMgYWdhaW5zdCBQcm9wZXJ0eUF0dHJpYnV0ZTo6
Q3VzdG9tQWNjZXNzb3JPclZhbHVlLiBDaGFuZ2luZyBHZXR0ZXJTZXR0ZXIgc2hvdWxkIHdvcmsg
dy9vIHRyYW5zaXRpb24uCiAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTQzNDIKICAgICAgICAgaWYgKG1vZGUgPT0gUHV0TW9kZURlZmluZU93blBy
b3BlcnR5ICYmIChhdHRyaWJ1dGVzICE9IGN1cnJlbnRBdHRyaWJ1dGVzIHx8IChhdHRyaWJ1dGVz
ICYgUHJvcGVydHlBdHRyaWJ1dGU6OkFjY2Vzc29yT3JDdXN0b21BY2Nlc3Nvck9yVmFsdWUpKSkK
LSAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VU
cmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcykpOworICAg
ICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5z
aXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVzLCAmZGVmZXJyZWRX
YXRjaHBvaW50RmlyZSkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBzbG90LnNldEV4aXN0
aW5nUHJvcGVydHkodGhpcywgb2Zmc2V0KTsKIApAQCAtMzg1LDExICszOTAsNiBAQCBBTFdBWVNf
SU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdEluCiAKICAgICBpZiAoKG1vZGUgPT0gUHV0
TW9kZVB1dCkgJiYgIWlzU3RydWN0dXJlRXh0ZW5zaWJsZSh2bSkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIC8vIFdlIHdhbnQgdGhlIHN0cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9p
bnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBoYXMgc3dpdGNoZWQKLSAgICAvLyBzdHJ1Y3R1
cmUuIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNocG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5l
dyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZQotICAgIC8vIHdlIHdhbnQuCi0gICAgRGVmZXJyZWRTdHJ1
Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRXYXRjaHBvaW50RmlyZSh2bSwg
c3RydWN0dXJlKTsKICAgICAKICAgICBuZXdTdHJ1Y3R1cmUgPSBTdHJ1Y3R1cmU6OmFkZE5ld1By
b3BlcnR5VHJhbnNpdGlvbigKICAgICAgICAgdm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBh
dHRyaWJ1dGVzLCBvZmZzZXQsIHNsb3QuY29udGV4dCgpLCAmZGVmZXJyZWRXYXRjaHBvaW50Rmly
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5jcHAJ
KHJldmlzaW9uIDI2NTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVj
dHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA4LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDIwIEFsZXhleSBTaHZheWthIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+LgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03OCwyMiArNzksMjIgQEAgaW5saW5lIHZv
aWQgU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpzZQogICAgIG1fZGF0YSA9IGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4oaW1wbCkgfCBVc2luZ1NpbmdsZVNsb3RGbGFnOwogfQogCi1ib29sIFN0cnVj
dHVyZVRyYW5zaXRpb25UYWJsZTo6Y29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqIHJlcCwgdW5z
aWduZWQgYXR0cmlidXRlcywgYm9vbCBpc0FkZGl0aW9uKSBjb25zdAorYm9vbCBTdHJ1Y3R1cmVU
cmFuc2l0aW9uVGFibGU6OmNvbnRhaW5zKFVuaXF1ZWRTdHJpbmdJbXBsKiByZXAsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKSBjb25zdAogewogICAg
IGlmIChpc1VzaW5nU2luZ2xlU2xvdCgpKSB7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHNpbmdsZVRyYW5zaXRpb24oKTsKLSAgICAgICAgcmV0dXJuIHRyYW5zaXRpb24gJiYgdHJh
bnNpdGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID09IHJlcCAmJiB0cmFuc2l0aW9uLT50
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0gYXR0cmlidXRlcyAmJiB0cmFuc2l0aW9u
LT5pc1Byb3BlcnR5RGVsZXRpb25UcmFuc2l0aW9uKCkgPT0gIWlzQWRkaXRpb247CisgICAgICAg
IHJldHVybiB0cmFuc2l0aW9uICYmIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygpID09
IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+dHJhbnNpdGlvbktpbmQoKSA9PSB0cmFuc2l0aW9u
S2luZDsKICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRh
YmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJu
IG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRy
aWJ1dGVzLCB0cmFuc2l0aW9uS2luZCkpOwogfQogCi1pbmxpbmUgU3RydWN0dXJlKiBTdHJ1Y3R1
cmVUcmFuc2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25lZCBh
dHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0CitpbmxpbmUgU3RydWN0dXJlKiBTdHJ1
Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmdldChVbmlxdWVkU3RyaW5nSW1wbCogcmVwLCB1bnNpZ25l
ZCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCkgY29uc3QKIHsKICAg
ICBpZiAoaXNVc2luZ1NpbmdsZVNsb3QoKSkgewogICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRp
b24gPSBzaW5nbGVUcmFuc2l0aW9uKCk7Ci0gICAgICAgIHJldHVybiAodHJhbnNpdGlvbiAmJiB0
cmFuc2l0aW9uLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUgPT0gcmVwICYmIHRyYW5zaXRpb24t
PnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoKSA9PSBhdHRyaWJ1dGVzICYmIHRyYW5zaXRp
b24tPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSA9PSAhaXNBZGRpdGlvbikgPyB0cmFu
c2l0aW9uIDogbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuICh0cmFuc2l0aW9uICYmIHRyYW5zaXRp
b24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9PSByZXAgJiYgdHJhbnNpdGlvbi0+dHJhbnNp
dGlvblByb3BlcnR5QXR0cmlidXRlcygpID09IGF0dHJpYnV0ZXMgJiYgdHJhbnNpdGlvbi0+dHJh
bnNpdGlvbktpbmQoKSA9PSB0cmFuc2l0aW9uS2luZCkgPyB0cmFuc2l0aW9uIDogbnVsbHB0cjsK
ICAgICB9Ci0gICAgcmV0dXJuIG1hcCgpLT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpI
YXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSk7CisgICAgcmV0dXJuIG1hcCgp
LT5nZXQoU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlOjpIYXNoOjpLZXkocmVwLCBhdHRyaWJ1dGVz
LCB0cmFuc2l0aW9uS2luZCkpOwogfQogCiB2b2lkIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6
YWRkKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCkBAIC0xMTQsNyArMTE1LDcgQEAgdm9p
ZCBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6OmFkZChWTSYgdgogICAgIH0KIAogICAgIC8vIEFk
ZCB0aGUgc3RydWN0dXJlIHRvIHRoZSBtYXAuCi0gICAgbWFwKCktPnNldChTdHJ1Y3R1cmVUcmFu
c2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblByb3BlcnR5TmFt
ZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCksICFzdHJ1
Y3R1cmUtPmlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSksIHN0cnVjdHVyZSk7CisgICAg
bWFwKCktPnNldChTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleShzdHJ1Y3R1cmUt
Pm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZS5nZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzKCksIHN0cnVjdHVyZS0+dHJhbnNpdGlvbktpbmQoKSksIHN0cnVjdHVy
ZSk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjpkdW1wU3RhdGlzdGljcygpCkBAIC0yNDQsMTMgKzI0
NSwxMyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqCiAgICAgc2V0
SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKGZhbHNlKTsK
ICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24odHJ1ZSk7
CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFuc2l0
aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4dGVu
c2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFN0YXRp
Y1Byb3BlcnRpZXNSZWlmaWVkKGZhbHNlKTsKICAgICBzZXRUcmFuc2l0aW9uV2F0Y2hwb2ludElz
TGlrZWx5VG9CZUZpcmVkKGZhbHNlKTsKICAgICBzZXRIYXNCZWVuRGljdGlvbmFyeShmYWxzZSk7
CiAgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcoZmFsc2UpOwot
ICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFsc2UpOwogICAgIHNldFRyYW5z
aXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNldE1heE9mZnNldCh2bSwgaW52
YWxpZE9mZnNldCk7CiAgCkBAIC0yODIsMTMgKzI4MywxMyBAQCBTdHJ1Y3R1cmU6OlN0cnVjdHVy
ZShWTSYgdm0pCiAgICAgc2V0SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmln
aW5hbFByb3RvKGZhbHNlKTsKICAgICBzZXRJc1F1aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9y
RW51bWVyYXRpb24odHJ1ZSk7CiAgICAgc2V0VHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcygw
KTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0aW9uS2luZDo6VW5rbm93bik7CiAgICAg
c2V0RGlkUHJldmVudEV4dGVuc2lvbnMoZmFsc2UpOwogICAgIHNldERpZFRyYW5zaXRpb24oZmFs
c2UpOwogICAgIHNldFN0YXRpY1Byb3BlcnRpZXNSZWlmaWVkKGZhbHNlKTsKICAgICBzZXRUcmFu
c2l0aW9uV2F0Y2hwb2ludElzTGlrZWx5VG9CZUZpcmVkKGZhbHNlKTsKICAgICBzZXRIYXNCZWVu
RGljdGlvbmFyeShmYWxzZSk7CiAgICAgc2V0UHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5z
aXRpb25pbmcoZmFsc2UpOwotICAgIHNldElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oZmFs
c2UpOwogICAgIHNldFRyYW5zaXRpb25PZmZzZXQodm0sIGludmFsaWRPZmZzZXQpOwogICAgIHNl
dE1heE9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgCkBAIC0zMjAsMTIgKzMyMSwxMiBAQCBT
dHJ1Y3R1cmU6OlN0cnVjdHVyZShWTSYgdm0sIFN0cnVjdHVyZSogCiAgICAgc2V0SGFzVW5kZXJz
Y29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvKHByZXZpb3VzLT5oYXNVbmRl
cnNjb3JlUHJvdG9Qcm9wZXJ0eUV4Y2x1ZGluZ09yaWdpbmFsUHJvdG8oKSk7CiAgICAgc2V0SXNR
dWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKHByZXZpb3VzLT5pc1F1aWNr
UHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oKSk7CiAgICAgc2V0VHJhbnNpdGlv
blByb3BlcnR5QXR0cmlidXRlcygwKTsKKyAgICBzZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0aW9u
S2luZDo6VW5rbm93bik7CiAgICAgc2V0RGlkUHJldmVudEV4dGVuc2lvbnMocHJldmlvdXMtPmRp
ZFByZXZlbnRFeHRlbnNpb25zKCkpOwogICAgIHNldERpZFRyYW5zaXRpb24odHJ1ZSk7CiAgICAg
c2V0U3RhdGljUHJvcGVydGllc1JlaWZpZWQocHJldmlvdXMtPnN0YXRpY1Byb3BlcnRpZXNSZWlm
aWVkKCkpOwogICAgIHNldEhhc0JlZW5EaWN0aW9uYXJ5KHByZXZpb3VzLT5oYXNCZWVuRGljdGlv
bmFyeSgpKTsKICAgICBzZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhm
YWxzZSk7Ci0gICAgc2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbihmYWxzZSk7CiAgICAg
c2V0VHJhbnNpdGlvbk9mZnNldCh2bSwgaW52YWxpZE9mZnNldCk7CiAgICAgc2V0TWF4T2Zmc2V0
KHZtLCBpbnZhbGlkT2Zmc2V0KTsKICAKQEAgLTQ0NCw2ICs0NDUsNyBAQCBQcm9wZXJ0eVRhYmxl
KiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvCiAgICAgICAgICAgICB0YWJsZS0+YWRkRGVsZXRl
ZE9mZnNldChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CiAgICAgICAgICAgICBjb250
aW51ZTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5pc1Byb3BlcnR5QWRk
aXRpb25UcmFuc2l0aW9uKCkpOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5IGVudHJ5KHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRp
b25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkpOwog
ICAgICAgICBhdXRvIG5leHRPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChzdHJ1Y3R1cmUtPmlu
bGluZUNhcGFjaXR5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRPZmZzZXQsIG5leHRP
ZmZzZXQgPT0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwpAQCAtNDcyLDggKzQ3NCw3
IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjphZGRQcm9wZXJ0eVRyYW5zaXQKICAgICBBU1NFUlQo
IXN0cnVjdHVyZS0+aXNEaWN0aW9uYXJ5KCkpOwogICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlzT2Jq
ZWN0KCkpOwogCi0gICAgY29uc3RleHByIGJvb2wgaXNBZGRpdGlvbiA9IHRydWU7Ci0gICAgaWYg
KFN0cnVjdHVyZSogZXhpc3RpbmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25U
YWJsZS5nZXQodWlkLCBhdHRyaWJ1dGVzLCBpc0FkZGl0aW9uKSkgeworICAgIGlmIChTdHJ1Y3R1
cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0
KHVpZCwgYXR0cmlidXRlcywgVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb24pKSB7CiAg
ICAgICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNl
dCgpLCBleGlzdGluZ1RyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBvZmZz
ZXQgPSBleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKTsKICAgICAgICAgcmV0
dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKQEAgLTU3MSw2ICs1NzIsNyBAQCBTdHJ1Y3R1cmUqIFN0
cnVjdHVyZTo6YWRkTmV3UHJvcGVydHlUcmFuCiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldElu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnkoc3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRp
bmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUpOwogICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlv
blByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKICAgICB0cmFuc2l0aW9uLT5zZXRU
cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOworICAgIHRyYW5zaXRpb24t
PnNldFRyYW5zaXRpb25LaW5kKFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eUFkZGl0aW9uKTsKICAg
ICB0cmFuc2l0aW9uLT5zZXRQcm9wZXJ0eVRhYmxlKHZtLCBzdHJ1Y3R1cmUtPnRha2VQcm9wZXJ0
eVRhYmxlT3JDbG9uZUlmUGlubmVkKHZtKSk7CiAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0
KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKIApAQCAtNjA3LDkgKzYwOSw4IEBAIFN0cnVj
dHVyZSogU3RydWN0dXJlOjpyZW1vdmVQcm9wZXJ0eVRyYW4KICAgICBBU1NFUlQoIXN0cnVjdHVy
ZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+aXNP
YmplY3QoKSk7CiAKLSAgICBjb25zdGV4cHIgYm9vbCBpc0FkZGl0aW9uID0gZmFsc2U7CiAgICAg
b2Zmc2V0ID0gaW52YWxpZE9mZnNldDsKLSAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5z
aXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChwcm9wZXJ0eU5hbWUudWlk
KCksIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKSB7CisgICAgaWYgKFN0cnVjdHVyZSogZXhpc3Rp
bmdUcmFuc2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlO
YW1lLnVpZCgpLCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlEZWxldGlvbikp
IHsKICAgICAgICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9u
T2Zmc2V0KCksIGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAg
IG9mZnNldCA9IGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgpOwogICAgICAg
ICByZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOwpAQCAtNjQ0LDExICs2NDUsNyBAQCBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlUCiAgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6
OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUs
IHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAgICAgQVNTRVJUKHN0cnVjdHVyZS0+Z2V0Q29uY3Vy
cmVudGx5KHByb3BlcnR5TmFtZS51aWQoKSkgIT0gaW52YWxpZE9mZnNldCk7CiAKLSAgICBpbnQg
dHJhbnNpdGlvbkNvdW50ID0gMDsKLSAgICBmb3IgKGF1dG8qIHMgPSBzdHJ1Y3R1cmU7IHMgJiYg
dHJhbnNpdGlvbkNvdW50IDw9IHNfbWF4VHJhbnNpdGlvbkxlbmd0aDsgcyA9IHMtPnByZXZpb3Vz
SUQoKSkKLSAgICAgICAgKyt0cmFuc2l0aW9uQ291bnQ7Ci0KLSAgICBpZiAodHJhbnNpdGlvbkNv
dW50ID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7CisgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNp
dGlvbkNvdW50SGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0
ZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSk7CiAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNp
dGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBk
ZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CkBAIC02
NjcsOSArNjY0LDkgQEAgU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3BlcnR5VAog
CiAgICAgdHJhbnNpdGlvbi0+bV9ibG9iLnNldEluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3Rvcnko
c3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgJiB+Q29weU9uV3JpdGUp
OwogICAgIHRyYW5zaXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFt
ZS51aWQoKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uS2luZChUcmFuc2l0aW9uS2lu
ZDo6UHJvcGVydHlEZWxldGlvbik7CiAgICAgdHJhbnNpdGlvbi0+c2V0UHJvcGVydHlUYWJsZSh2
bSwgc3RydWN0dXJlLT50YWtlUHJvcGVydHlUYWJsZU9yQ2xvbmVJZlBpbm5lZCh2bSkpOwogICAg
IHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJlLT5tYXhPZmZzZXQoKSk7Ci0g
ICAgdHJhbnNpdGlvbi0+c2V0SXNQcm9wZXJ0eURlbGV0aW9uVHJhbnNpdGlvbih0cnVlKTsKIAog
ICAgIG9mZnNldCA9IHRyYW5zaXRpb24tPnJlbW92ZSh2bSwgcHJvcGVydHlOYW1lKTsKICAgICBB
U1NFUlQob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpOwpAQCAtNzA3LDMwICs3MDQsNzYgQEAgU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmNoYW5nZVByb3RvdHlwZVRyYQogICAgIHJldHVybiB0cmFuc2l0
aW9uOwogfQogCi1TdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQorU3RydWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNo
YW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1l
IHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFu
c2l0aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQogewotICAgIGlmICghc3RydWN0dXJlLT5p
c1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7Ci0gICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IGNyZWF0ZSh2bSwgc3RydWN0dXJlKTsKKyAgICBhdXRvIHNldEVudHJ5QXR0cmlidXRlcyA9
IFsmXShTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkgeworICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5KiBl
bnRyeSA9IHN0cnVjdHVyZS0+ZW5zdXJlUHJvcGVydHlUYWJsZSh2bSktPmdldChwcm9wZXJ0eU5h
bWUudWlkKCkpOworICAgICAgICBBU1NFUlQoZW50cnkpOworICAgICAgICBlbnRyeS0+YXR0cmli
dXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgfTsKKworICAgIGF1dG8gc2V0U3RydWN0dXJlRmxhZ3Mg
PSBbJl0oU3RydWN0dXJlKiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQ
cm9wZXJ0eUF0dHJpYnV0ZTo6UmVhZE9ubHkpCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldENv
bnRhaW5zUmVhZE9ubHlQcm9wZXJ0aWVzKCk7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJv
cGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQorICAgICAgICAgICAgc3RydWN0dXJlLT5zZXRJc1F1
aWNrUHJvcGVydHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24oZmFsc2UpOworICAgIH07CisK
KyAgICBpZiAoc3RydWN0dXJlLT5pc1VuY2FjaGVhYmxlRGljdGlvbmFyeSgpKSB7CisgICAgICAg
IHNldEVudHJ5QXR0cmlidXRlcyhzdHJ1Y3R1cmUpOworICAgICAgICBzZXRTdHJ1Y3R1cmVGbGFn
cyhzdHJ1Y3R1cmUpOworICAgICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3ko
KTsKKyAgICAgICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICB9CisKKyAgICBpZiAoIXN0cnVjdHVy
ZS0+aXNEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgaWYgKFN0cnVjdHVyZSogZXhpc3RpbmdUcmFu
c2l0aW9uID0gc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5nZXQocHJvcGVydHlOYW1lLnVp
ZCgpLCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZDo6UHJvcGVydHlBdHRyaWJ1dGVDaGFuZ2Up
KSB7CisgICAgICAgICAgICB2YWxpZGF0ZU9mZnNldChleGlzdGluZ1RyYW5zaXRpb24tPnRyYW5z
aXRpb25PZmZzZXQoKSwgZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmxpbmVDYXBhY2l0eSgpKTsKKyAg
ICAgICAgICAgIGV4aXN0aW5nVHJhbnNpdGlvbi0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOwor
ICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nVHJhbnNpdGlvbjsKKyAgICAgICAgfQogCi0gICAg
ICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3RydWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZv
clBpbm5pbmcodm0pOwotICAgICAgICB0cmFuc2l0aW9uLT5waW4oaG9sZExvY2sodHJhbnNpdGlv
bi0+bV9sb2NrKSwgdm0sIHRhYmxlKTsKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0
KHZtLCBzdHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKLSAgICAgICAgCi0gICAgICAgIHN0cnVjdHVy
ZSA9IHRyYW5zaXRpb247CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Db3VudEhh
c092ZXJmbG93ZWQoKSkgeworICAgICAgICAgICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHN0cnVj
dHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKKyAgICAgICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlv
biA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZl
cnJlZCk7CisgICAgICAgICAgICBBU1NFUlQoc3RydWN0dXJlICE9IHRyYW5zaXRpb24pOworICAg
ICAgICAgICAgc2V0RW50cnlBdHRyaWJ1dGVzKHRyYW5zaXRpb24pOworICAgICAgICAgICAgc2V0
U3RydWN0dXJlRmxhZ3ModHJhbnNpdGlvbik7CisgICAgICAgICAgICByZXR1cm4gdHJhbnNpdGlv
bjsKKyAgICAgICAgfQogICAgIH0KIAotICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3Ry
dWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7
CisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOworCisg
ICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRyYW5zaXRpb24tPm1fbG9j
ayk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFu
c2l0aW9uaW5nKHRydWUpOworICAgIH0KKworICAgIFByb3BlcnR5VGFibGUqIHRhYmxlID0gc3Ry
dWN0dXJlLT5jb3B5UHJvcGVydHlUYWJsZUZvclBpbm5pbmcodm0pOworICAgIHRyYW5zaXRpb24t
PnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgIHRyYW5z
aXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAg
ICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OworICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25LaW5kKFRyYW5zaXRpb25LaW5kOjpQcm9w
ZXJ0eUF0dHJpYnV0ZUNoYW5nZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBz
dHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKKworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0g
dGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAg
ZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIHRyYW5zaXRpb24tPnNldFRyYW5z
aXRpb25PZmZzZXQodm0sIGVudHJ5LT5vZmZzZXQpOworICAgIHNldFN0cnVjdHVyZUZsYWdzKHRy
YW5zaXRpb24pOwogCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMo
KTsKLQotICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQot
ICAgICAgICBzdHJ1Y3R1cmUtPnNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB0cmFuc2l0
aW9uLT5zZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CiAK
KyAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRp
b24tPmlubGluZUNhcGFjaXR5KCkpOworICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5h
ZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KKyAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENv
bnNpc3RlbmN5KCk7CiAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0g
ICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQpAQCAtNzYyLDE3ICs4MDUsMTcgQEAgU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnRvVW5jYWNoZWFibGVEaWN0aQogCiBTdHJ1Y3R1cmUqIFN0cnVjdHVy
ZTo6c2VhbFRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKLSAgICBy
ZXR1cm4gbm9uUHJvcGVydHlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6U2VhbCk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3Ry
dWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6U2VhbCk7CiB9CiAKIFN0cnVjdHVyZSogU3RydWN0dXJl
OjpmcmVlemVUcmFuc2l0aW9uKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7Ci0gICAg
cmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkZyZWV6ZSk7CisgICAgcmV0dXJuIG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwg
c3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6RnJlZXplKTsKIH0KIAogU3RydWN0dXJlKiBTdHJ1
Y3R1cmU6OnByZXZlbnRFeHRlbnNpb25zVHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogewotICAgIHJldHVybiBub25Qcm9wZXJ0eVRyYW5zaXRpb24odm0sIHN0cnVjdHVy
ZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpQcmV2ZW50RXh0ZW5zaW9ucyk7CisgICAgcmV0dXJu
IG5vblByb3BlcnR5VHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBUcmFuc2l0aW9uS2luZDo6UHJl
dmVudEV4dGVuc2lvbnMpOwogfQogCiBQcm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6OnRha2VQcm9w
ZXJ0eVRhYmxlT3JDbG9uZUlmUGlubmVkKFZNJiB2bSkKQEAgLTc5MCwxNSArODMzLDEzIEBAIFBy
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6dGFrZVByb3BlcnR5VGEKICAgICByZXR1cm4gbWF0ZXJp
YWxpemVQcm9wZXJ0eVRhYmxlKHZtLCBzZXRQcm9wZXJ0eVRhYmxlKTsKIH0KIAotU3RydWN0dXJl
KiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgTm9uUHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQorU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6Om5vblByb3BlcnR5VHJhbnNpdGlvblNsb3coVk0mIHZtLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbktpbmQpCiB7Ci0gICAgdW5z
aWduZWQgYXR0cmlidXRlcyA9IHRvQXR0cmlidXRlcyh0cmFuc2l0aW9uS2luZCk7CiAgICAgSW5k
ZXhpbmdUeXBlIGluZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUo
c3RydWN0dXJlLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5k
KTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbjsKLSAgICBjb25zdGV4
cHIgYm9vbCBpc0FkZGl0aW9uID0gdHJ1ZTsKLSAgICBpZiAoIXN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkgJiYgKGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uVGFi
bGUuZ2V0KG51bGxwdHIsIGF0dHJpYnV0ZXMsIGlzQWRkaXRpb24pKSkgewotICAgICAgICBBU1NF
UlQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKCkgPT0g
YXR0cmlidXRlcyk7CisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgpICYmIChleGlz
dGluZ1RyYW5zaXRpb24gPSBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChudWxscHRy
LCAwLCB0cmFuc2l0aW9uS2luZCkpKSB7CisgICAgICAgIEFTU0VSVChleGlzdGluZ1RyYW5zaXRp
b24tPnRyYW5zaXRpb25LaW5kKCkgPT0gdHJhbnNpdGlvbktpbmQpOwogICAgICAgICBBU1NFUlQo
ZXhpc3RpbmdUcmFuc2l0aW9uLT5pbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCkgPT0gaW5k
ZXhpbmdNb2RlSW5jbHVkaW5nSGlzdG9yeSk7CiAgICAgICAgIHJldHVybiBleGlzdGluZ1RyYW5z
aXRpb247CiAgICAgfQpAQCAtODA2LDcgKzg0Nyw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpu
b25Qcm9wZXJ0eVRyYW5zaXQKICAgICBEZWZlckdDIGRlZmVyR0Modm0uaGVhcCk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1cmUpOwotICAgIHRy
YW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7Cisg
ICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvbktpbmQodHJhbnNpdGlvbktpbmQpOwogICAgIHRy
YW5zaXRpb24tPm1fYmxvYi5zZXRJbmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KGluZGV4aW5n
TW9kZUluY2x1ZGluZ0hpc3RvcnkpOwogICAgIAogICAgIGlmIChwcmV2ZW50c0V4dGVuc2lvbnMo
dHJhbnNpdGlvbktpbmQpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmgJKHJldmlzaW9uIDI2NTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsMTQgKzE5NywxNCBAQCBwdWJs
aWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4
aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlPZmZzZXQm
KTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRpb25Gcm9tRXhp
c3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCBQcm9w
ZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3RvdHlwZVRyYW5z
aXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJyZWRTdHJ1Y3R1
cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0
aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwg
UHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBEZWZlcnJlZFN0cnVjdHVy
ZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUq
ID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJsZURpY3Rpb25h
cnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9u
V2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGlj
IFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKICAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBmcmVlemVUcmFuc2l0aW9uKFZNJiwgU3RydWN0
dXJlKik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcHJldmVudEV4dGVuc2lvbnNUcmFuc2l0aW9u
KFZNJiwgU3RydWN0dXJlKik7Ci0gICAgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVydHlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb25TbG93
KFZNJiwgU3RydWN0dXJlKiwgTm9uUHJvcGVydHlUcmFuc2l0aW9uKTsKKyAgICBzdGF0aWMgU3Ry
dWN0dXJlKiBub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBUcmFuc2l0aW9u
S2luZCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogbm9uUHJvcGVy
dHlUcmFuc2l0aW9uU2xvdyhWTSYsIFN0cnVjdHVyZSosIFRyYW5zaXRpb25LaW5kKTsKIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIGJvb2wgaXNTZWFsZWQoVk0mKTsKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBib29sIGlzRnJvemVuKFZNJik7CkBAIC02OTEsNyArNjkxLDcgQEAgcHVibGljOgogICAg
IHZvaWQgc2V0IyN1cHBlck5hbWUodHlwZSBuZXdWYWx1ZSkgXAogICAgIHtcCiAgICAgICAgIG1f
Yml0RmllbGQgJj0gfihzXyMjbG93ZXJOYW1lIyNNYXNrIDw8IG9mZnNldCk7XAotICAgICAgICBt
X2JpdEZpZWxkIHw9IChuZXdWYWx1ZSAmIHNfIyNsb3dlck5hbWUjI01hc2spIDw8IG9mZnNldDtc
CisgICAgICAgIG1fYml0RmllbGQgfD0gKHN0YXRpY19jYXN0PHVpbnQzMl90PihuZXdWYWx1ZSkg
JiBzXyMjbG93ZXJOYW1lIyNNYXNrKSA8PCBvZmZzZXQ7XAogICAgIH0KIAogICAgIERFRklORV9C
SVRGSUVMRChEaWN0aW9uYXJ5S2luZCwgZGljdGlvbmFyeUtpbmQsIERpY3Rpb25hcnlLaW5kLCAy
LCAwKTsKQEAgLTY5OSw3ICs2OTksOCBAQCBwdWJsaWM6CiAgICAgREVGSU5FX0JJVEZJRUxEKGJv
b2wsIGhhc0dldHRlclNldHRlclByb3BlcnRpZXMsIEhhc0dldHRlclNldHRlclByb3BlcnRpZXMs
IDEsIDMpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNSZWFkT25seU9yR2V0dGVyU2V0
dGVyUHJvcGVydGllc0V4Y2x1ZGluZ1Byb3RvLCBIYXNSZWFkT25seU9yR2V0dGVyU2V0dGVyUHJv
cGVydGllc0V4Y2x1ZGluZ1Byb3RvLCAxLCA0KTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwg
aXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uLCBJc1F1aWNrUHJvcGVy
dHlBY2Nlc3NBbGxvd2VkRm9yRW51bWVyYXRpb24sIDEsIDUpOwotICAgIERFRklORV9CSVRGSUVM
RCh1bnNpZ25lZCwgdHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcywgVHJhbnNpdGlvblByb3Bl
cnR5QXR0cmlidXRlcywgMTQsIDYpOworICAgIERFRklORV9CSVRGSUVMRChUcmFuc2l0aW9uUHJv
cGVydHlBdHRyaWJ1dGVzLCB0cmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLCBUcmFuc2l0aW9u
UHJvcGVydHlBdHRyaWJ1dGVzLCA4LCA2KTsKKyAgICBERUZJTkVfQklURklFTEQoVHJhbnNpdGlv
bktpbmQsIHRyYW5zaXRpb25LaW5kLCBUcmFuc2l0aW9uS2luZCwgNiwgMTQpOwogICAgIERFRklO
RV9CSVRGSUVMRChib29sLCBkaWRQcmV2ZW50RXh0ZW5zaW9ucywgRGlkUHJldmVudEV4dGVuc2lv
bnMsIDEsIDIwKTsKICAgICBERUZJTkVfQklURklFTEQoYm9vbCwgZGlkVHJhbnNpdGlvbiwgRGlk
VHJhbnNpdGlvbiwgMSwgMjEpOwogICAgIERFRklORV9CSVRGSUVMRChib29sLCBzdGF0aWNQcm9w
ZXJ0aWVzUmVpZmllZCwgU3RhdGljUHJvcGVydGllc1JlaWZpZWQsIDEsIDIyKTsKQEAgLTcxMCw5
ICs3MTEsMTIgQEAgcHVibGljOgogICAgIERFRklORV9CSVRGSUVMRChib29sLCBoYXNCZWVuRGlj
dGlvbmFyeSwgSGFzQmVlbkRpY3Rpb25hcnksIDEsIDI3KTsKICAgICBERUZJTkVfQklURklFTEQo
Ym9vbCwgcHJvdGVjdFByb3BlcnR5VGFibGVXaGlsZVRyYW5zaXRpb25pbmcsIFByb3RlY3RQcm9w
ZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nLCAxLCAyOCk7CiAgICAgREVGSU5FX0JJVEZJRUxE
KGJvb2wsIGhhc1VuZGVyc2NvcmVQcm90b1Byb3BlcnR5RXhjbHVkaW5nT3JpZ2luYWxQcm90bywg
SGFzVW5kZXJzY29yZVByb3RvUHJvcGVydHlFeGNsdWRpbmdPcmlnaW5hbFByb3RvLCAxLCAyOSk7
Ci0gICAgREVGSU5FX0JJVEZJRUxEKGJvb2wsIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24s
IElzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24sIDEsIDMwKTsKIAogICAgIHN0YXRpY19hc3Nl
cnQoc19iaXRXaWR0aE9mVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcyA8PSBzaXplb2YoVHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4KTsKKyAgICBzdGF0aWNfYXNzZXJ0KHNfYml0
V2lkdGhPZlRyYW5zaXRpb25LaW5kIDw9IHNpemVvZihUcmFuc2l0aW9uS2luZCkgKiA4KTsKKwor
ICAgIGJvb2wgaXNQcm9wZXJ0eUFkZGl0aW9uVHJhbnNpdGlvbigpIGNvbnN0IHsgcmV0dXJuIHRy
YW5zaXRpb25LaW5kKCkgPT0gVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QWRkaXRpb247IH0KKyAg
ICBib29sIGlzUHJvcGVydHlEZWxldGlvblRyYW5zaXRpb24oKSBjb25zdCB7IHJldHVybiB0cmFu
c2l0aW9uS2luZCgpID09IFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eURlbGV0aW9uOyB9CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKQEAgLTc5Miw2
ICs3OTYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNGb3JNYXhP
ZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAorICAgIEFMV0FZ
U19JTkxJTkUgYm9vbCB0cmFuc2l0aW9uQ291bnRIYXNPdmVyZmxvd2VkKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGludCB0cmFuc2l0aW9uQ291bnQgPSAwOworICAgICAgICBmb3IgKGF1dG8qIHN0
cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5wcmV2aW91
c0lEKCkpIHsKKyAgICAgICAgICAgIGlmICgrK3RyYW5zaXRpb25Db3VudCA+IHNfbWF4VHJhbnNp
dGlvbkxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIGlzVmFsaWQoSlNHbG9iYWxP
YmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4sIEpTT2JqZWN0KiBi
YXNlKSBjb25zdDsKIAogICAgIC8vIFlvdSBoYXZlIHRvIGhvbGQgdGhlIHN0cnVjdHVyZSBsb2Nr
IHRvIGRvIHRoZXNlLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N0cnVjdHVyZUlubGluZXMuaAkocmV2aXNpb24gMjY1NjM2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02MDgs
NyArNjA4LDcgQEAgQUxXQVlTX0lOTElORSBib29sIFN0cnVjdHVyZTo6c2hvdWxkQ29udgogICAg
IHJldHVybiAhYU9iaiAmJiAhYk9iajsKIH0KIAotaW5saW5lIFN0cnVjdHVyZSogU3RydWN0dXJl
Ojpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgTm9u
UHJvcGVydHlUcmFuc2l0aW9uIHRyYW5zaXRpb25LaW5kKQoraW5saW5lIFN0cnVjdHVyZSogU3Ry
dWN0dXJlOjpub25Qcm9wZXJ0eVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgVHJhbnNpdGlvbktpbmQgdHJhbnNpdGlvbktpbmQpCiB7CiAgICAgSW5kZXhpbmdUeXBlIGlu
ZGV4aW5nTW9kZUluY2x1ZGluZ0hpc3RvcnkgPSBuZXdJbmRleGluZ1R5cGUoc3RydWN0dXJlLT5p
bmRleGluZ01vZGVJbmNsdWRpbmdIaXN0b3J5KCksIHRyYW5zaXRpb25LaW5kKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJhbnNpdGlvblRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlVHJh
bnNpdGlvblRhYmxlLmgJKHJldmlzaW9uIDI2NTYzNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N0cnVjdHVyZVRyYW5zaXRpb25UYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSwxMSArMzUsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBKU0NlbGw7CiBjbGFzcyBTdHJ1
Y3R1cmU7CiAKLXN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgRmlyc3RJbnRlcm5hbEF0dHJpYnV0
ZSA9IDEgPDwgNjsgLy8gVXNlIGZvciB0cmFuc2l0aW9ucyB0aGF0IGRvbid0IGhhdmUgdG8gZG8g
d2l0aCBwcm9wZXJ0eSBhZGRpdGlvbnMuCit1c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1
dGVzID0gdWludDhfdDsKIAotLy8gU3VwcG9ydCBmb3IgYXR0cmlidXRlcyB1c2VkIHRvIGluZGlj
YXRlIHRyYW5zaXRpb25zIG5vdCByZWxhdGVkIHRvIHByb3BlcnRpZXMuCi0vLyBJZiBhbnkgb2Yg
dGhlc2UgYXJlIHVzZWQsIHRoZSBzdHJpbmcgcG9ydGlvbiBvZiB0aGUga2V5IHNob3VsZCBiZSAw
LgotZW51bSBjbGFzcyBOb25Qcm9wZXJ0eVRyYW5zaXRpb24gOiB1bnNpZ25lZCB7CitlbnVtIGNs
YXNzIFRyYW5zaXRpb25LaW5kIDogdWludDhfdCB7CisgICAgVW5rbm93biwKKyAgICBQcm9wZXJ0
eUFkZGl0aW9uLAorICAgIFByb3BlcnR5RGVsZXRpb24sCisgICAgUHJvcGVydHlBdHRyaWJ1dGVD
aGFuZ2UsCisKKyAgICAvLyBTdXBwb3J0IGZvciB0cmFuc2l0aW9ucyBub3QgcmVsYXRlZCB0byBw
cm9wZXJ0aWVzLgorICAgIC8vIElmIGFueSBvZiB0aGVzZSBhcmUgdXNlZCwgdGhlIHN0cmluZyBw
b3J0aW9uIG9mIHRoZSBrZXkgc2hvdWxkIGJlIDAuCiAgICAgQWxsb2NhdGVVbmRlY2lkZWQsCiAg
ICAgQWxsb2NhdGVJbnQzMiwKICAgICBBbGxvY2F0ZURvdWJsZSwKQEAgLTUwLDkwICs1NSw4NiBA
QCBlbnVtIGNsYXNzIE5vblByb3BlcnR5VHJhbnNpdGlvbiA6IHVuc2lnCiAgICAgQWRkSW5kZXhl
ZEFjY2Vzc29ycywKICAgICBQcmV2ZW50RXh0ZW5zaW9ucywKICAgICBTZWFsLAotICAgIEZyZWV6
ZQorICAgIEZyZWV6ZSwKIH07Ci11c2luZyBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzID0g
dWludDE2X3Q7CiAKLWlubGluZSB1bnNpZ25lZCB0b0F0dHJpYnV0ZXMoTm9uUHJvcGVydHlUcmFu
c2l0aW9uIHRyYW5zaXRpb24pCi17Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
cmFuc2l0aW9uKSArIEZpcnN0SW50ZXJuYWxBdHRyaWJ1dGU7Ci19CitzdGF0aWMgY29uc3RleHBy
IGF1dG8gRmlyc3ROb25Qcm9wZXJ0eVRyYW5zaXRpb25LaW5kID0gVHJhbnNpdGlvbktpbmQ6OkFs
bG9jYXRlVW5kZWNpZGVkOwogCi1pbmxpbmUgYm9vbCBjaGFuZ2VzSW5kZXhpbmdUeXBlKE5vblBy
b3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgY2hhbmdlc0luZGV4aW5n
VHlwZShUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uKQogewogICAgIHN3aXRjaCAodHJhbnNpdGlv
bikgewotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZVVuZGVjaWRlZDoK
LSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVJbnQzMjoKLSAgICBjYXNl
IE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWxsb2NhdGVEb3VibGU6Ci0gICAgY2FzZSBOb25Qcm9w
ZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQ29udGlndW91czoKLSAgICBjYXNlIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6QWxsb2NhdGVBcnJheVN0b3JhZ2U6Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRy
YW5zaXRpb246OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKLSAgICBjYXNlIE5vblByb3Bl
cnR5VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgotICAgIGNhc2UgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBZGRJbmRleGVkQWNjZXNzb3JzOgorICAgIGNhc2UgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlVW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFs
bG9jYXRlSW50MzI6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVEb3VibGU6Cisg
ICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgorICAgIGNhc2UgVHJh
bnNpdGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgVHJhbnNpdGlvbktp
bmQ6OkFsbG9jYXRlU2xvd1B1dEFycmF5U3RvcmFnZToKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5k
OjpTd2l0Y2hUb1Nsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6
QWRkSW5kZXhlZEFjY2Vzc29yczoKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIH0KIAotaW5saW5lIEluZGV4aW5nVHlwZSBu
ZXdJbmRleGluZ1R5cGUoSW5kZXhpbmdUeXBlIG9sZFR5cGUsIE5vblByb3BlcnR5VHJhbnNpdGlv
biB0cmFuc2l0aW9uKQoraW5saW5lIEluZGV4aW5nVHlwZSBuZXdJbmRleGluZ1R5cGUoSW5kZXhp
bmdUeXBlIG9sZFR5cGUsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNo
ICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRl
VW5kZWNpZGVkOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OkFsbG9jYXRlVW5kZWNpZGVkOgog
ICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpKTsKICAgICAgICAg
cmV0dXJuIG9sZFR5cGUgfCBVbmRlY2lkZWRTaGFwZTsKLSAgICBjYXNlIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6QWxsb2NhdGVJbnQzMjoKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0
ZUludDMyOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8
IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBvbGRUeXBlID09IENvcHlPbldyaXRlQXJyYXlXaXRo
SW50MzIpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SW5kZXhpbmdTaGFwZUFuZFdyaXRh
YmlsaXR5TWFzaykgfCBJbnQzMlNoYXBlOwotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9u
OjpBbGxvY2F0ZURvdWJsZToKKyAgICBjYXNlIFRyYW5zaXRpb25LaW5kOjpBbGxvY2F0ZURvdWJs
ZToKICAgICAgICAgQVNTRVJUKCFoYXNJbmRleGVkUHJvcGVydGllcyhvbGRUeXBlKSB8fCBoYXNV
bmRlY2lkZWQob2xkVHlwZSkgfHwgaGFzSW50MzIob2xkVHlwZSkgfHwgb2xkVHlwZSA9PSBDb3B5
T25Xcml0ZUFycmF5V2l0aERvdWJsZSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRl
eGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IERvdWJsZVNoYXBlOwotICAgIGNhc2UgTm9u
UHJvcGVydHlUcmFuc2l0aW9uOjpBbGxvY2F0ZUNvbnRpZ3VvdXM6CisgICAgY2FzZSBUcmFuc2l0
aW9uS2luZDo6QWxsb2NhdGVDb250aWd1b3VzOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4ZWRQ
cm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBoYXNJbnQzMihv
bGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgb2xkVHlwZSA9PSBDb3B5T25Xcml0ZUFy
cmF5V2l0aENvbnRpZ3VvdXMpOwogICAgICAgICByZXR1cm4gKG9sZFR5cGUgJiB+SW5kZXhpbmdT
aGFwZUFuZFdyaXRhYmlsaXR5TWFzaykgfCBDb250aWd1b3VzU2hhcGU7Ci0gICAgY2FzZSBOb25Q
cm9wZXJ0eVRyYW5zaXRpb246OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgorICAgIGNhc2UgVHJhbnNp
dGlvbktpbmQ6OkFsbG9jYXRlQXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4
ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBoYXNJbnQz
MihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGlndW91cyhvbGRUeXBl
KSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxp
dHlNYXNrKSB8IEFycmF5U3RvcmFnZVNoYXBlOwotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0
aW9uOjpBbGxvY2F0ZVNsb3dQdXRBcnJheVN0b3JhZ2U6CisgICAgY2FzZSBUcmFuc2l0aW9uS2lu
ZDo6QWxsb2NhdGVTbG93UHV0QXJyYXlTdG9yYWdlOgogICAgICAgICBBU1NFUlQoIWhhc0luZGV4
ZWRQcm9wZXJ0aWVzKG9sZFR5cGUpIHx8IGhhc1VuZGVjaWRlZChvbGRUeXBlKSB8fCBoYXNJbnQz
MihvbGRUeXBlKSB8fCBoYXNEb3VibGUob2xkVHlwZSkgfHwgaGFzQ29udGlndW91cyhvbGRUeXBl
KSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRleGluZ1NoYXBlQW5kV3JpdGFiaWxp
dHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsKLSAgICBjYXNlIE5vblByb3BlcnR5
VHJhbnNpdGlvbjo6U3dpdGNoVG9TbG93UHV0QXJyYXlTdG9yYWdlOgorICAgIGNhc2UgVHJhbnNp
dGlvbktpbmQ6OlN3aXRjaFRvU2xvd1B1dEFycmF5U3RvcmFnZToKICAgICAgICAgQVNTRVJUKGhh
c0FycmF5U3RvcmFnZShvbGRUeXBlKSk7CiAgICAgICAgIHJldHVybiAob2xkVHlwZSAmIH5JbmRl
eGluZ1NoYXBlQW5kV3JpdGFiaWxpdHlNYXNrKSB8IFNsb3dQdXRBcnJheVN0b3JhZ2VTaGFwZTsK
LSAgICBjYXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6QWRkSW5kZXhlZEFjY2Vzc29yczoKKyAg
ICBjYXNlIFRyYW5zaXRpb25LaW5kOjpBZGRJbmRleGVkQWNjZXNzb3JzOgogICAgICAgICByZXR1
cm4gb2xkVHlwZSB8IE1heUhhdmVJbmRleGVkQWNjZXNzb3JzOwogICAgIGRlZmF1bHQ6CiAgICAg
ICAgIHJldHVybiBvbGRUeXBlOwogICAgIH0KIH0KIAotaW5saW5lIGJvb2wgcHJldmVudHNFeHRl
bnNpb25zKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFuc2l0aW9uKQoraW5saW5lIGJvb2wgcHJl
dmVudHNFeHRlbnNpb25zKFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNo
ICh0cmFuc2l0aW9uKSB7Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OlByZXZlbnRF
eHRlbnNpb25zOgotICAgIGNhc2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpTZWFsOgotICAgIGNh
c2UgTm9uUHJvcGVydHlUcmFuc2l0aW9uOjpGcmVlemU6CisgICAgY2FzZSBUcmFuc2l0aW9uS2lu
ZDo6UHJldmVudEV4dGVuc2lvbnM6CisgICAgY2FzZSBUcmFuc2l0aW9uS2luZDo6U2VhbDoKKyAg
ICBjYXNlIFRyYW5zaXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiB9CiAKLWlubGluZSBib29s
IHNldHNEb250RGVsZXRlT25BbGxQcm9wZXJ0aWVzKE5vblByb3BlcnR5VHJhbnNpdGlvbiB0cmFu
c2l0aW9uKQoraW5saW5lIGJvb2wgc2V0c0RvbnREZWxldGVPbkFsbFByb3BlcnRpZXMoVHJhbnNp
dGlvbktpbmQgdHJhbnNpdGlvbikKIHsKICAgICBzd2l0Y2ggKHRyYW5zaXRpb24pIHsKLSAgICBj
YXNlIE5vblByb3BlcnR5VHJhbnNpdGlvbjo6U2VhbDoKLSAgICBjYXNlIE5vblByb3BlcnR5VHJh
bnNpdGlvbjo6RnJlZXplOgorICAgIGNhc2UgVHJhbnNpdGlvbktpbmQ6OlNlYWw6CisgICAgY2Fz
ZSBUcmFuc2l0aW9uS2luZDo6RnJlZXplOgogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBkZWZh
dWx0OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogfQogCi1pbmxpbmUgYm9vbCBzZXRz
UmVhZE9ubHlPbk5vbkFjY2Vzc29yUHJvcGVydGllcyhOb25Qcm9wZXJ0eVRyYW5zaXRpb24gdHJh
bnNpdGlvbikKK2lubGluZSBib29sIHNldHNSZWFkT25seU9uTm9uQWNjZXNzb3JQcm9wZXJ0aWVz
KFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb24pCiB7CiAgICAgc3dpdGNoICh0cmFuc2l0aW9uKSB7
Ci0gICAgY2FzZSBOb25Qcm9wZXJ0eVRyYW5zaXRpb246OkZyZWV6ZToKKyAgICBjYXNlIFRyYW5z
aXRpb25LaW5kOjpGcmVlemU6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE0NiwyNyArMTQ3LDI4IEBAIGNsYXNzIFN0cnVjdHVy
ZVRyYW5zaXRpb25UYWJsZSB7CiAgICAgCiAjaWYgQ1BVKEFERFJFU1M2NCkKICAgICBzdHJ1Y3Qg
SGFzaCB7Ci0gICAgICAgIC8vIExvZ2ljYWxseSwgS2V5IGlzIGEgdHVwbGUgb2YgKDEpIFVuaXF1
ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGFuZCAoMykgYm9vbCBpc0Fk
ZGl0aW9uLgotICAgICAgICAvLyBXZSBlbmNvZGUgKDIpIGFuZCAoMykgaW50byAoMSkncyBlbXB0
eSBiaXRzIHNpbmNlIGEgcG9pbnRlciBpcyA0OGJpdCBhbmQgbG93ZXIgMyBiaXRzIGFyZSB1c2Fi
bGUgYmVjYXVzZSBvZiBhbGlnbm1lbnQuCisgICAgICAgIC8vIExvZ2ljYWxseSwgS2V5IGlzIGEg
dHVwbGUgb2YgKDEpIFVuaXF1ZWRTdHJpbmdJbXBsKiwgKDIpIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IGFuZCAoMykgdHJhbnNpdGlvbktpbmQuCiAgICAgICAgIHN0cnVjdCBLZXkgewogICAgICAgICAg
ICAgZnJpZW5kIHN0cnVjdCBIYXNoOwogICAgICAgICAgICAgc3RhdGljX2Fzc2VydChXVEZfT1Nf
Q09OU1RBTlRfRUZGRUNUSVZFX0FERFJFU1NfV0lEVEggPD0gNDgpOwotICAgICAgICAgICAgc3Rh
dGljIGNvbnN0ZXhwciB1aW50cHRyX3QgaXNBZGRpdGlvbk1hc2sgPSAxVUxMOwotICAgICAgICAg
ICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgoMVVMTCA8PCA0OCkg
LSAxKSAmICh+aXNBZGRpdGlvbk1hc2spOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1
bnNpZ25lZCBhdHRyaWJ1dGVzU2hpZnQgPSA0ODsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdGV4
cHIgdW5zaWduZWQgdHJhbnNpdGlvbktpbmRTaGlmdCA9IDU2OworICAgICAgICAgICAgc3RhdGlj
IGNvbnN0ZXhwciB1aW50cHRyX3Qgc3RyaW5nTWFzayA9ICgxVUxMIDw8IGF0dHJpYnV0ZXNTaGlm
dCkgLSAxOwogICAgICAgICAgICAgc3RhdGljIGNvbnN0ZXhwciB1aW50cHRyX3QgaGFzaFRhYmxl
RGVsZXRlZFZhbHVlID0gMHgyOwotICAgICAgICAgICAgc3RhdGljX2Fzc2VydChzaXplb2YoVHJh
bnNpdGlvblByb3BlcnR5QXR0cmlidXRlcykgKiA4IDw9IDE2KTsKKyAgICAgICAgICAgIHN0YXRp
Y19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMpICogOCA8PSA4KTsK
KyAgICAgICAgICAgIHN0YXRpY19hc3NlcnQoc2l6ZW9mKFRyYW5zaXRpb25LaW5kKSAqIDggPD0g
OCk7CiAgICAgICAgICAgICBzdGF0aWNfYXNzZXJ0KGhhc2hUYWJsZURlbGV0ZWRWYWx1ZSA8IGFs
aWdub2YoVW5pcXVlZFN0cmluZ0ltcGwpKTsKIAotICAgICAgICAgICAgLy8gSGlnaGVzdCAxNiBi
aXRzIGFyZSBmb3IgVHJhbnNpdGlvblByb3BlcnR5QXR0cmlidXRlcy4KLSAgICAgICAgICAgIC8v
IExvd2VzdCAxIGJpdCBpcyBmb3IgaXNBZGRpdGlvbiBmbGFnLgorICAgICAgICAgICAgLy8gSGln
aGVzdCA4IGJpdHMgYXJlIGZvciBUcmFuc2l0aW9uS2luZDsgbmV4dCA4IGJlbG9uZyB0byBUcmFu
c2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzLgogICAgICAgICAgICAgLy8gUmVtYWluaW5nIGJpdHMg
YXJlIGZvciBVbmlxdWVkU3RyaW5nSW1wbCouCi0gICAgICAgICAgICBLZXkoVW5pcXVlZFN0cmlu
Z0ltcGwqIGltcGwsIHVuc2lnbmVkIGF0dHJpYnV0ZXMsIGJvb2wgaXNBZGRpdGlvbikKLSAgICAg
ICAgICAgICAgICA6IG1fZW5jb2RlZERhdGEoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oaW1wbCkg
fCAoc3RhdGljX2Nhc3Q8dWludHB0cl90PihhdHRyaWJ1dGVzKSA8PCBhdHRyaWJ1dGVzU2hpZnQp
IHwgKHN0YXRpY19jYXN0PHVpbnRwdHJfdD4oaXNBZGRpdGlvbikgJiBpc0FkZGl0aW9uTWFzaykp
CisgICAgICAgICAgICBLZXkoVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwsIHVuc2lnbmVkIGF0dHJp
YnV0ZXMsIFRyYW5zaXRpb25LaW5kIHRyYW5zaXRpb25LaW5kKQorICAgICAgICAgICAgICAgIDog
bV9lbmNvZGVkRGF0YShiaXR3aXNlX2Nhc3Q8dWludHB0cl90PihpbXBsKSB8IChzdGF0aWNfY2Fz
dDx1aW50cHRyX3Q+KGF0dHJpYnV0ZXMpIDw8IGF0dHJpYnV0ZXNTaGlmdCkgfCAoc3RhdGljX2Nh
c3Q8dWludHB0cl90Pih0cmFuc2l0aW9uS2luZCkgPDwgdHJhbnNpdGlvbktpbmRTaGlmdCkpCiAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGltcGwgPT0gdGhpcy0+aW1wbCgp
KTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNBZGRpdGlvbiA9PSB0aGlzLT5pc0FkZGl0aW9u
KCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChhdHRyaWJ1dGVzIDw9IFVJTlQ4X01BWCk7CiAg
ICAgICAgICAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZXMgPT0gdGhpcy0+YXR0cmlidXRlcygpKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQodHJhbnNpdGlvbktpbmQgIT0gVHJhbnNpdGlvbktpbmQ6
OlVua25vd24pOworICAgICAgICAgICAgICAgIEFTU0VSVCh0cmFuc2l0aW9uS2luZCA9PSB0aGlz
LT50cmFuc2l0aW9uS2luZCgpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgS2V5KCkg
PSBkZWZhdWx0OwpAQCAtMTc4LDggKzE4MCw4IEBAIGNsYXNzIFN0cnVjdHVyZVRyYW5zaXRpb25U
YWJsZSB7CiAgICAgICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9lbmNvZGVkRGF0YSA9PSBoYXNoVGFibGVEZWxldGVkVmFsdWU7IH0KIAogICAg
ICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIGltcGwoKSBjb25zdCB7IHJldHVybiBiaXR3aXNl
X2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihtX2VuY29kZWREYXRhICYgc3RyaW5nTWFzayk7IH0K
LSAgICAgICAgICAgIGJvb2wgaXNBZGRpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZERh
dGEgJiBpc0FkZGl0aW9uTWFzazsgfQotICAgICAgICAgICAgdW5zaWduZWQgYXR0cmlidXRlcygp
IGNvbnN0IHsgcmV0dXJuIG1fZW5jb2RlZERhdGEgPj4gYXR0cmlidXRlc1NoaWZ0OyB9CisgICAg
ICAgICAgICBUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMoKSBjb25zdCB7
IHJldHVybiAobV9lbmNvZGVkRGF0YSA+PiBhdHRyaWJ1dGVzU2hpZnQpICYgVUlOVDhfTUFYOyB9
CisgICAgICAgICAgICBUcmFuc2l0aW9uS2luZCB0cmFuc2l0aW9uS2luZCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRpY19jYXN0PFRyYW5zaXRpb25LaW5kPihtX2VuY29kZWREYXRhID4+IHRyYW5zaXRp
b25LaW5kU2hpZnQpOyB9CiAKICAgICAgICAgICAgIGZyaWVuZCBib29sIG9wZXJhdG9yPT0oY29u
c3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCiAgICAgICAgICAgICB7CkBAIC0yMTAsMTIgKzIxMiwx
MiBAQCBjbGFzcyBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGUgewogICAgIH07CiAjZWxzZQogICAg
IHN0cnVjdCBIYXNoIHsKLSAgICAgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBsZTxVbmlxdWVkU3Ry
aW5nSW1wbCosIHVuc2lnbmVkLCBib29sPjsKKyAgICAgICAgdXNpbmcgS2V5ID0gc3RkOjp0dXBs
ZTxVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkLCBUcmFuc2l0aW9uS2luZD47CiAgICAgICAg
IHVzaW5nIEtleVRyYWl0cyA9IEhhc2hUcmFpdHM8S2V5PjsKICAgICAgICAgCiAgICAgICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEtleSYgcCkKICAgICAgICAgewotICAgICAgICAgICAg
cmV0dXJuIFB0ckhhc2g8VW5pcXVlZFN0cmluZ0ltcGwqPjo6aGFzaChzdGQ6OmdldDwwPihwKSkg
KyBzdGQ6OmdldDwxPihwKTsKKyAgICAgICAgICAgIHJldHVybiBQdHJIYXNoPFVuaXF1ZWRTdHJp
bmdJbXBsKj46Omhhc2goc3RkOjpnZXQ8MD4ocCkpICsgc3RkOjpnZXQ8MT4ocCkgKyBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oc3RkOjpnZXQ8Mj4ocCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgS2V5JiBhLCBjb25zdCBLZXkmIGIpCkBAIC0yNDksOCArMjUx
LDggQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgYWRkKFZNJiwgU3RydWN0dXJlKik7Ci0g
ICAgYm9vbCBjb250YWlucyhVbmlxdWVkU3RyaW5nSW1wbCosIHVuc2lnbmVkIGF0dHJpYnV0ZXMs
IGJvb2wgaXNBZGRpdGlvbikgY29uc3Q7Ci0gICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmlu
Z0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBib29sIGlzQWRkaXRpb24pIGNvbnN0OworICAg
IGJvb2wgY29udGFpbnMoVW5pcXVlZFN0cmluZ0ltcGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBU
cmFuc2l0aW9uS2luZCkgY29uc3Q7CisgICAgU3RydWN0dXJlKiBnZXQoVW5pcXVlZFN0cmluZ0lt
cGwqLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBUcmFuc2l0aW9uS2luZCkgY29uc3Q7CiAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFNpbmdsZVNsb3RUcmFuc2l0aW9uV2Vha093bmVyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406566</attachid>
            <date>2020-08-13 20:10:55 -0700</date>
            <delta_ts>2020-08-13 20:14:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200814061054.patch</filename>
            <type>text/plain</type>
            <size>13644</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU2NDEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgKiBtaWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJldmlvdXMtYXR0cmlidXRl
cy5qczogQWRkZWQuCisKIDIwMjAtMDgtMTIgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5j
b20+CiAKICAgICAgICAgSW5saW5lIGNhY2hlIFJlcGxhY2UgYW5kIFNldHRlcnMgb24gUHVyZUZv
cndhcmRpbmdQcm94eQpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJv
cGVydHktcHJldmlvdXMtYXR0cmlidXRlcy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9yZWRlZmluZS1wcm9wZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVzLmpzCShub25l
eGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3JlZGVmaW5lLXByb3BlcnR5LXBy
ZXZpb3VzLWF0dHJpYnV0ZXMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAordmFy
IGRlc2MxID0ge3ZhbHVlOiAxLCB3cml0YWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogZmFsc2UsIGNv
bmZpZ3VyYWJsZTogdHJ1ZX07Cit2YXIgZGVzYzIgPSB7dmFsdWU6IDEsIHdyaXRhYmxlOiBmYWxz
ZSwgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlfTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHZhciBvYmogPSB7Zm9vOiAxfTsKKworICAgIE9iamVj
dC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBkZXNjMSk7CisgICAgT2JqZWN0LmRlZmluZVBy
b3BlcnR5KG9iaiwgImZvbyIsIGRlc2MyKTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2Jq
LCAiZm9vIiwgZGVzYzEpOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBk
ZXNjMik7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRlc2MxKTsKKyAg
ICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAiZm9vIiwgZGVzYzIpOworfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNjU2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMjAtMDgt
MTMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgorCisgICAgICAgIENh
Y2hlIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbigpCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTQ4OTAKKworICAgICAgICBSZXZp
ZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIFdpdGggdGhpcyBjaGFuZ2UsIGEgbm9u
LWRpY3Rpb25hcnkgc3RydWN0dXJlIGFkZHMgYXR0cmlidXRlLWNoYW5nZSB0cmFuc2l0aW9ucwor
ICAgICAgICB0byB0cmFuc2l0aW9uIHRhYmxlLCBtYWtpbmcgcmVkZWZpbml0aW9uIHRvIHByZXZp
b3VzIGF0dHRyaWJ1dGVzIGEgZmFzdCBwYXRoLgorCisgICAgICAgIEFmdGVyIHRvbyBtYW55IHRy
YW5zaXRpb25zLCB0aGUgc3RydWN0dXJlIGJlY29tZXMgYSBkaWN0aW9uYXJ5LCBmaXJpbmcgdGhl
CisgICAgICAgIHRyYW5zaXRpb24gd2F0Y2hwb2ludC4gQXR0cmlidXRlLWNoYW5nZSB0cmFuc2l0
aW9ucyBwaW4gdGhlaXIgcHJvcGVydHkgdGFibGVzLAorICAgICAgICBwcmV2ZW50aW5nIGZvckVh
Y2hQcm9wZXJ0eUNvbmN1cnJlbnRseSgpIHRyYXZlcnNhbC4KKworICAgICAgICBUaGlzIHBhdGNo
IGFkdmFuY2VzIHByb3ZpZGVkIG1pY3JvYmVuY2htYXJrIGJ5IH45MCUgYW5kIHByb2dyZXNzZXMK
KyAgICAgICAgU3BlZWRvbWV0ZXIyL0VtYmVySlMtRGVidWctVG9kb01WQyBieSB+MTIlICh+NSUg
b3ZlciByMjY0NTczKS4KKworICAgICAgICBObyBiZWhhdmlvciBjaGFuZ2UuCisKKyAgICAgICAg
KiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBoOjpnZXRSZWdFeHBQ
cm90b3R5cGVQcm9wZXJ0eSk6CisgICAgICAgICogcnVudGltZS9KU09iamVjdElubGluZXMuaDoK
KyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERpcmVjdEludGVybmFsKToKKyAgICAgICAgKiBy
dW50aW1lL1N0cnVjdHVyZS5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6bWF0ZXJpYWxp
emVQcm9wZXJ0eVRhYmxlKToKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjpyZW1vdmVOZXdQcm9w
ZXJ0eVRyYW5zaXRpb24pOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5n
ZVRyYW5zaXRpb24pOgorICAgICAgICAqIHJ1bnRpbWUvU3RydWN0dXJlLmg6CisKIDIwMjAtMDgt
MTMgIEFsZXhleSBTaHZheWthICA8c2h2YWlrYWxlc2hAZ21haWwuY29tPgogCiAgICAgICAgIFJl
d29yayBTdHJ1Y3R1cmVUcmFuc2l0aW9uVGFibGU6Okhhc2g6OktleSBlbmNvZGluZwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDI2NTY0MSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzI2LDggKzE3MjYsNyBAQCBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlIEdyYXBoOjpt
ZXRoCiAKIGJvb2wgR3JhcGg6OmdldFJlZ0V4cFByb3RvdHlwZVByb3BlcnR5KEpTT2JqZWN0KiBy
ZWdFeHBQcm90b3R5cGUsIFN0cnVjdHVyZSogcmVnRXhwUHJvdG90eXBlU3RydWN0dXJlLCBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkLCBKU1ZhbHVlJiByZXR1cm5KU1ZhbHVlKQogewotICAgIHVuc2ln
bmVkIGF0dHJpYnV0ZXNVbnVzZWQ7Ci0gICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0ID0gcmVnRXhw
UHJvdG90eXBlU3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlkLCBhdHRyaWJ1dGVzVW51c2Vk
KTsKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1cmUt
PmdldENvbmN1cnJlbnRseSh1aWQpOwogICAgIGlmICghaXNWYWxpZE9mZnNldChvZmZzZXQpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT2JqZWN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCShyZXZpc2lvbiAyNjU2NDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09iamVjdElubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMzY0LDYgKzM2NCwxMCBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVj
dEluCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAorICAgIC8vIFdlIHdhbnQgdGhlIHN0
cnVjdHVyZSB0cmFuc2l0aW9uIHdhdGNocG9pbnQgdG8gZmlyZSBhZnRlciB0aGlzIG9iamVjdCBo
YXMgc3dpdGNoZWQgc3RydWN0dXJlLgorICAgIC8vIFRoaXMgYWxsb3dzIGFkYXB0aXZlIHdhdGNo
cG9pbnRzIHRvIG9ic2VydmUgaWYgdGhlIG5ldyBzdHJ1Y3R1cmUgaXMgdGhlIG9uZSB3ZSB3YW50
LgorICAgIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVk
V2F0Y2hwb2ludEZpcmUodm0sIHN0cnVjdHVyZSk7CisKICAgICB1bnNpZ25lZCBjdXJyZW50QXR0
cmlidXRlczsKICAgICBvZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldCh2bSwgcHJvcGVydHlOYW1lLCBj
dXJyZW50QXR0cmlidXRlcyk7CiAgICAgaWYgKG9mZnNldCAhPSBpbnZhbGlkT2Zmc2V0KSB7CkBA
IC0zNzYsNyArMzgwLDcgQEAgQUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJ
bgogICAgICAgICAvLyBGSVhNRTogQ2hlY2sgYXR0cmlidXRlcyBhZ2FpbnN0IFByb3BlcnR5QXR0
cmlidXRlOjpDdXN0b21BY2Nlc3Nvck9yVmFsdWUuIENoYW5naW5nIEdldHRlclNldHRlciBzaG91
bGQgd29yayB3L28gdHJhbnNpdGlvbi4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTIxNDM0MgogICAgICAgICBpZiAobW9kZSA9PSBQdXRNb2RlRGVm
aW5lT3duUHJvcGVydHkgJiYgKGF0dHJpYnV0ZXMgIT0gY3VycmVudEF0dHJpYnV0ZXMgfHwgKGF0
dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6QWNjZXNzb3JPckN1c3RvbUFjY2Vzc29yT3JW
YWx1ZSkpKQotICAgICAgICAgICAgc2V0U3RydWN0dXJlKHZtLCBTdHJ1Y3R1cmU6OmF0dHJpYnV0
ZUNoYW5nZVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBhdHRyaWJ1dGVz
KSk7CisgICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hh
bmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMsICZk
ZWZlcnJlZFdhdGNocG9pbnRGaXJlKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNsb3Qu
c2V0RXhpc3RpbmdQcm9wZXJ0eSh0aGlzLCBvZmZzZXQpOwogCkBAIC0zODUsMTEgKzM4OSw2IEBA
IEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0SW4KIAogICAgIGlmICgobW9k
ZSA9PSBQdXRNb2RlUHV0KSAmJiAhaXNTdHJ1Y3R1cmVFeHRlbnNpYmxlKHZtKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgLy8gV2Ugd2FudCB0aGUgc3RydWN0dXJlIHRyYW5zaXRpb24g
d2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhhcyBzd2l0Y2hlZAotICAgIC8v
IHN0cnVjdHVyZS4gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hwb2ludHMgdG8gb2JzZXJ2ZSBp
ZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lCi0gICAgLy8gd2Ugd2FudC4KLSAgICBEZWZl
cnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSBkZWZlcnJlZFdhdGNocG9pbnRG
aXJlKHZtLCBzdHJ1Y3R1cmUpOwogICAgIAogICAgIG5ld1N0cnVjdHVyZSA9IFN0cnVjdHVyZTo6
YWRkTmV3UHJvcGVydHlUcmFuc2l0aW9uKAogICAgICAgICB2bSwgc3RydWN0dXJlLCBwcm9wZXJ0
eU5hbWUsIGF0dHJpYnV0ZXMsIG9mZnNldCwgc2xvdC5jb250ZXh0KCksICZkZWZlcnJlZFdhdGNo
cG9pbnRGaXJlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVy
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0
dXJlLmNwcAkocmV2aXNpb24gMjY1NjQxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3RydWN0dXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDgtMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMjAgQWxleGV5IFNodmF5a2EgPHNodmFpa2FsZXNoQGdtYWlsLmNv
bT4uCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0NCw2ICs0NDUsNyBAQCBQ
cm9wZXJ0eVRhYmxlKiBTdHJ1Y3R1cmU6Om1hdGVyaWFsaXplUHJvCiAgICAgICAgICAgICB0YWJs
ZS0+YWRkRGVsZXRlZE9mZnNldChzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CiAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQorICAgICAgICBBU1NFUlQoc3RydWN0dXJlLT5p
c1Byb3BlcnR5QWRkaXRpb25UcmFuc2l0aW9uKCkpOwogICAgICAgICBQcm9wZXJ0eU1hcEVudHJ5
IGVudHJ5KHN0cnVjdHVyZS0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lLmdldCgpLCBzdHJ1Y3R1
cmUtPnRyYW5zaXRpb25PZmZzZXQoKSwgc3RydWN0dXJlLT50cmFuc2l0aW9uUHJvcGVydHlBdHRy
aWJ1dGVzKCkpOwogICAgICAgICBhdXRvIG5leHRPZmZzZXQgPSB0YWJsZS0+bmV4dE9mZnNldChz
dHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKG5leHRP
ZmZzZXQsIG5leHRPZmZzZXQgPT0gc3RydWN0dXJlLT50cmFuc2l0aW9uT2Zmc2V0KCkpOwpAQCAt
NjQzLDExICs2NDUsNyBAQCBTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6cmVtb3ZlTmV3UHJvcGVydHlU
CiAgICAgQVNTRVJUKCFTdHJ1Y3R1cmU6OnJlbW92ZVByb3BlcnR5VHJhbnNpdGlvbkZyb21FeGlz
dGluZ1N0cnVjdHVyZShzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgb2Zmc2V0KSk7CiAgICAgQVNT
RVJUKHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHByb3BlcnR5TmFtZS51aWQoKSkgIT0gaW52
YWxpZE9mZnNldCk7CiAKLSAgICBpbnQgdHJhbnNpdGlvbkNvdW50ID0gMDsKLSAgICBmb3IgKGF1
dG8qIHMgPSBzdHJ1Y3R1cmU7IHMgJiYgdHJhbnNpdGlvbkNvdW50IDw9IHNfbWF4VHJhbnNpdGlv
bkxlbmd0aDsgcyA9IHMtPnByZXZpb3VzSUQoKSkKLSAgICAgICAgKyt0cmFuc2l0aW9uQ291bnQ7
Ci0KLSAgICBpZiAodHJhbnNpdGlvbkNvdW50ID4gc19tYXhUcmFuc2l0aW9uTGVuZ3RoKSB7Cisg
ICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50SGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAg
ICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzdHJ1Y3R1cmUtPmluZGV4aW5nTW9kZSgpKSk7CiAg
ICAgICAgIFN0cnVjdHVyZSogdHJhbnNpdGlvbiA9IHRvVW5jYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbih2bSwgc3RydWN0dXJlLCBkZWZlcnJlZCk7CiAgICAgICAgIEFTU0VSVChzdHJ1Y3R1
cmUgIT0gdHJhbnNpdGlvbik7CkBAIC03MDYsMzAgKzcwNCw3OSBAQCBTdHJ1Y3R1cmUqIFN0cnVj
dHVyZTo6Y2hhbmdlUHJvdG90eXBlVHJhCiAgICAgcmV0dXJuIHRyYW5zaXRpb247CiB9CiAKLVN0
cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiB2bSwgU3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCitTdHJ1Y3R1cmUqIFN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlv
bihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
LCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBv
aW50RmlyZSogZGVmZXJyZWQpCiB7Ci0gICAgaWYgKCFzdHJ1Y3R1cmUtPmlzVW5jYWNoZWFibGVE
aWN0aW9uYXJ5KCkpIHsKLSAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZt
LCBzdHJ1Y3R1cmUpOworICAgIGF1dG8gc2V0RW50cnlBdHRyaWJ1dGVzID0gWyZdKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7CisgICAgICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0gc3RydWN0
dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7Cisg
ICAgICAgIEFTU0VSVChlbnRyeSk7CisgICAgICAgIGVudHJ5LT5hdHRyaWJ1dGVzID0gYXR0cmli
dXRlczsKKyAgICB9OworCisgICAgYXV0byBzZXRTdHJ1Y3R1cmVGbGFncyA9IFsmXShTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkgeworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmli
dXRlOjpSZWFkT25seSkKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25s
eVByb3BlcnRpZXMoKTsKKyAgICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0
ZTo6RG9udEVudW0pCisgICAgICAgICAgICBzdHJ1Y3R1cmUtPnNldElzUXVpY2tQcm9wZXJ0eUFj
Y2Vzc0FsbG93ZWRGb3JFbnVtZXJhdGlvbihmYWxzZSk7CisgICAgfTsKKworICAgIGlmIChzdHJ1
Y3R1cmUtPmlzVW5jYWNoZWFibGVEaWN0aW9uYXJ5KCkpIHsKKyAgICAgICAgc2V0RW50cnlBdHRy
aWJ1dGVzKHN0cnVjdHVyZSk7CisgICAgICAgIHNldFN0cnVjdHVyZUZsYWdzKHN0cnVjdHVyZSk7
CisgICAgICAgIHN0cnVjdHVyZS0+Y2hlY2tPZmZzZXRDb25zaXN0ZW5jeSgpOworICAgICAgICBy
ZXR1cm4gc3RydWN0dXJlOworICAgIH0KKworICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkgeworICAgICAgICBpZiAoU3RydWN0dXJlKiBleGlzdGluZ1RyYW5zaXRpb24gPSBzdHJ1
Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmdldChwcm9wZXJ0eU5hbWUudWlkKCksIGF0dHJpYnV0
ZXMsIFRyYW5zaXRpb25LaW5kOjpQcm9wZXJ0eUF0dHJpYnV0ZUNoYW5nZSkpIHsKKyAgICAgICAg
ICAgIHZhbGlkYXRlT2Zmc2V0KGV4aXN0aW5nVHJhbnNpdGlvbi0+dHJhbnNpdGlvbk9mZnNldCgp
LCBleGlzdGluZ1RyYW5zaXRpb24tPmlubGluZUNhcGFjaXR5KCkpOworICAgICAgICAgICAgZXhp
c3RpbmdUcmFuc2l0aW9uLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBy
ZXR1cm4gZXhpc3RpbmdUcmFuc2l0aW9uOworICAgICAgICB9CiAKLSAgICAgICAgUHJvcGVydHlU
YWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQcm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7
Ci0gICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2
bSwgdGFibGUpOwotICAgICAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0cnVjdHVy
ZS0+bWF4T2Zmc2V0KCkpOwotICAgICAgICAKLSAgICAgICAgc3RydWN0dXJlID0gdHJhbnNpdGlv
bjsKKyAgICAgICAgaWYgKHN0cnVjdHVyZS0+dHJhbnNpdGlvbkNvdW50SGFzT3ZlcmZsb3dlZCgp
KSB7CisgICAgICAgICAgICBBU1NFUlQoIWlzQ29weU9uV3JpdGUoc3RydWN0dXJlLT5pbmRleGlu
Z01vZGUoKSkpOworICAgICAgICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hl
YWJsZURpY3Rpb25hcnlUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKKyAgICAg
ICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUgIT0gdHJhbnNpdGlvbik7CisgICAgICAgICAgICBzZXRF
bnRyeUF0dHJpYnV0ZXModHJhbnNpdGlvbik7CisgICAgICAgICAgICBzZXRTdHJ1Y3R1cmVGbGFn
cyh0cmFuc2l0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2l0aW9uOworICAgICAgICB9
CisgICAgfQorCisgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gY3JlYXRlKHZtLCBzdHJ1Y3R1
cmUpOworCisgICAgeworICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHRyYW5zaXRp
b24tPm1fbG9jayk7CisgICAgICAgIHRyYW5zaXRpb24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxl
V2hpbGVUcmFuc2l0aW9uaW5nKHRydWUpOwogICAgIH0KIAotICAgIFByb3BlcnR5TWFwRW50cnkq
IGVudHJ5ID0gc3RydWN0dXJlLT5lbnN1cmVQcm9wZXJ0eVRhYmxlKHZtKS0+Z2V0KHByb3BlcnR5
TmFtZS51aWQoKSk7CisgICAgUHJvcGVydHlUYWJsZSogdGFibGUgPSBzdHJ1Y3R1cmUtPmNvcHlQ
cm9wZXJ0eVRhYmxlRm9yUGlubmluZyh2bSk7CisgICAgaWYgKHN0cnVjdHVyZS0+aXNEaWN0aW9u
YXJ5KCkpCisgICAgICAgIHRyYW5zaXRpb24tPnBpbihob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xv
Y2spLCB2bSwgdGFibGUpOworICAgIGVsc2UKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluRm9yQ2Fj
aGluZyhob2xkTG9jayh0cmFuc2l0aW9uLT5tX2xvY2spLCB2bSwgdGFibGUpOworICAgIHRyYW5z
aXRpb24tPm1fdHJhbnNpdGlvblByb3BlcnR5TmFtZSA9IHByb3BlcnR5TmFtZS51aWQoKTsKKyAg
ICB0cmFuc2l0aW9uLT5zZXRUcmFuc2l0aW9uUHJvcGVydHlBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
OworICAgIHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25LaW5kKFRyYW5zaXRpb25LaW5kOjpQcm9w
ZXJ0eUF0dHJpYnV0ZUNoYW5nZSk7CisgICAgdHJhbnNpdGlvbi0+c2V0TWF4T2Zmc2V0KHZtLCBz
dHJ1Y3R1cmUtPm1heE9mZnNldCgpKTsKKworICAgIFByb3BlcnR5TWFwRW50cnkqIGVudHJ5ID0g
dGFibGUtPmdldChwcm9wZXJ0eU5hbWUudWlkKCkpOwogICAgIEFTU0VSVChlbnRyeSk7CiAgICAg
ZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzOworICAgIHRyYW5zaXRpb24tPnNldFRyYW5z
aXRpb25PZmZzZXQodm0sIGVudHJ5LT5vZmZzZXQpOworICAgIHNldFN0cnVjdHVyZUZsYWdzKHRy
YW5zaXRpb24pOwogCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6UmVh
ZE9ubHkpCi0gICAgICAgIHN0cnVjdHVyZS0+c2V0Q29udGFpbnNSZWFkT25seVByb3BlcnRpZXMo
KTsKLQotICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkRvbnRFbnVtKQot
ICAgICAgICBzdHJ1Y3R1cmUtPnNldElzUXVpY2tQcm9wZXJ0eUFjY2Vzc0FsbG93ZWRGb3JFbnVt
ZXJhdGlvbihmYWxzZSk7CisgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKKyAgICB0cmFuc2l0
aW9uLT5zZXRQcm90ZWN0UHJvcGVydHlUYWJsZVdoaWxlVHJhbnNpdGlvbmluZyhmYWxzZSk7CiAK
KyAgICBjaGVja09mZnNldCh0cmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCksIHRyYW5zaXRp
b24tPmlubGluZUNhcGFjaXR5KCkpOworICAgIGlmICghc3RydWN0dXJlLT5pc0RpY3Rpb25hcnko
KSkgeworICAgICAgICBHQ1NhZmVDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHN0cnVjdHVyZS0+
bV9sb2NrLCB2bS5oZWFwKTsKKyAgICAgICAgc3RydWN0dXJlLT5tX3RyYW5zaXRpb25UYWJsZS5h
ZGQodm0sIHRyYW5zaXRpb24pOworICAgIH0KKyAgICB0cmFuc2l0aW9uLT5jaGVja09mZnNldENv
bnNpc3RlbmN5KCk7CiAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7Ci0g
ICAgcmV0dXJuIHN0cnVjdHVyZTsKKyAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAogU3RydWN0
dXJlKiBTdHJ1Y3R1cmU6OnRvRGljdGlvbmFyeVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgRGljdGlvbmFyeUtpbmQga2luZCwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0
aW9uV2F0Y2hwb2ludEZpcmUqIGRlZmVycmVkKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3RydWN0dXJlLmgJKHJldmlzaW9uIDI2NTY0MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3
LDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHJlbW92ZVByb3BlcnR5VHJhbnNp
dGlvbkZyb21FeGlzdGluZ1N0cnVjdHVyZShTdHJ1Y3R1cmUqLCBQcm9wZXJ0eU5hbWUsIFByb3Bl
cnR5T2Zmc2V0Jik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlQ29uY3VycmVudGx5KFN0cnVjdHVyZSosIFByb3BlcnR5
TmFtZSwgUHJvcGVydHlPZmZzZXQmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiBjaGFuZ2VQcm90
b3R5cGVUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgSlNWYWx1ZSBwcm90b3R5cGUsIERlZmVy
cmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlJik7Ci0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihWTSYsIFN0
cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogYXR0cmlidXRlQ2hhbmdlVHJhbnNpdGlvbihW
TSYsIFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcywgRGVmZXJy
ZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgc3RhdGljIFN0cnVjdHVyZSogdG9DYWNoZWFibGVEaWN0aW9uYXJ5VHJh
bnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNo
cG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIHRvVW5jYWNoZWFi
bGVEaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYsIFN0cnVjdHVyZSosIERlZmVycmVkU3RydWN0dXJl
VHJhbnNpdGlvbldhdGNocG9pbnRGaXJlKiA9IG51bGxwdHIpOwogICAgIEpTX0VYUE9SVF9QUklW
QVRFIHN0YXRpYyBTdHJ1Y3R1cmUqIHNlYWxUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKik7CkBA
IC03OTYsNiArNzk2LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBudW1iZXJPZlNsb3Rz
Rm9yTWF4T2Zmc2V0KG1heE9mZnNldCgpLCBtX2lubGluZUNhcGFjaXR5KTsKICAgICB9CiAKKyAg
ICBBTFdBWVNfSU5MSU5FIGJvb2wgdHJhbnNpdGlvbkNvdW50SGFzT3ZlcmZsb3dlZCgpIGNvbnN0
CisgICAgeworICAgICAgICBpbnQgdHJhbnNpdGlvbkNvdW50ID0gMDsKKyAgICAgICAgZm9yIChh
dXRvKiBzdHJ1Y3R1cmUgPSB0aGlzOyBzdHJ1Y3R1cmU7IHN0cnVjdHVyZSA9IHN0cnVjdHVyZS0+
cHJldmlvdXNJRCgpKSB7CisgICAgICAgICAgICBpZiAoKyt0cmFuc2l0aW9uQ291bnQgPiBzX21h
eFRyYW5zaXRpb25MZW5ndGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCiAgICAgYm9vbCBpc1ZhbGlkKEpT
R2xvYmFsT2JqZWN0KiwgU3RydWN0dXJlQ2hhaW4qIGNhY2hlZFByb3RvdHlwZUNoYWluLCBKU09i
amVjdCogYmFzZSkgY29uc3Q7CiAKICAgICAvLyBZb3UgaGF2ZSB0byBob2xkIHRoZSBzdHJ1Y3R1
cmUgbG9jayB0byBkbyB0aGVzZS4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>406567</attachid>
            <date>2020-08-13 20:14:39 -0700</date>
            <delta_ts>2020-08-13 21:11:14 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-214890-20200814061438.patch</filename>
            <type>text/plain</type>
            <size>13643</size>
            <attacher name="Alexey Shvayka">ashvayka</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNjU2NDEpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEyIEBACisyMDIwLTA4LTEzICBBbGV4ZXkgU2h2YXlrYSAgPHNodmFpa2FsZXNo
QGdtYWlsLmNvbT4KKworICAgICAgICBDYWNoZSBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRy
YW5zaXRpb24oKQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE0ODkwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVraS4KKworICAgICAg
ICAqIG1pY3JvYmVuY2htYXJrcy9yZWRlZmluZS1wcm9wZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVz
LmpzOiBBZGRlZC4KKwogMjAyMC0wOC0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNv
bT4KIAogICAgICAgICBJbmxpbmUgY2FjaGUgUmVwbGFjZSBhbmQgU2V0dGVycyBvbiBQdXJlRm9y
d2FyZGluZ1Byb3h5CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9yZWRlZmluZS1wcm9w
ZXJ0eS1wcmV2aW91cy1hdHRyaWJ1dGVzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWljcm9i
ZW5jaG1hcmtzL3JlZGVmaW5lLXByb3BlcnR5LXByZXZpb3VzLWF0dHJpYnV0ZXMuanMJKG5vbmV4
aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcmVkZWZpbmUtcHJvcGVydHktcHJl
dmlvdXMtYXR0cmlidXRlcy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzIEBACit2YXIg
ZGVzYzEgPSB7dmFsdWU6IDEsIHdyaXRhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiBmYWxzZSwgY29u
ZmlndXJhYmxlOiB0cnVlfTsKK3ZhciBkZXNjMiA9IHt2YWx1ZTogMSwgd3JpdGFibGU6IGZhbHNl
LCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWV9OworCitmb3IgKHZhciBpID0g
MDsgaSA8IDFlNTsgKytpKSB7CisgICAgdmFyIG9iaiA9IHtmb286IDF9OworCisgICAgT2JqZWN0
LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRlc2MxKTsKKyAgICBPYmplY3QuZGVmaW5lUHJv
cGVydHkob2JqLCAiZm9vIiwgZGVzYzIpOworICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmos
ICJmb28iLCBkZXNjMSk7CisgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwgImZvbyIsIGRl
c2MyKTsKKyAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCAiZm9vIiwgZGVzYzEpOworICAg
IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosICJmb28iLCBkZXNjMik7Cit9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI2NTY0MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzMiBAQAorMjAyMC0wOC0x
MyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CisKKyAgICAgICAgQ2Fj
aGUgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNDg5MAorCisgICAgICAgIFJldmll
d2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgV2l0aCB0aGlzIGNoYW5nZSwgYSBub24t
ZGljdGlvbmFyeSBzdHJ1Y3R1cmUgYWRkcyBhdHRyaWJ1dGUtY2hhbmdlIHRyYW5zaXRpb25zCisg
ICAgICAgIHRvIHRyYW5zaXRpb24gdGFibGUsIG1ha2luZyByZWRlZmluaXRpb24gdG8gcHJldmlv
dXMgYXR0dHJpYnV0ZXMgYSBmYXN0IHBhdGguCisKKyAgICAgICAgQWZ0ZXIgdG9vIG1hbnkgdHJh
bnNpdGlvbnMsIHRoZSBzdHJ1Y3R1cmUgYmVjb21lcyBhIGRpY3Rpb25hcnksIGZpcmluZyB0aGUK
KyAgICAgICAgdHJhbnNpdGlvbiB3YXRjaHBvaW50LiBBdHRyaWJ1dGUtY2hhbmdlIHRyYW5zaXRp
b25zIHBpbiB0aGVpciBwcm9wZXJ0eSB0YWJsZXMsCisgICAgICAgIHByZXZlbnRpbmcgZm9yRWFj
aFByb3BlcnR5Q29uY3VycmVudGx5KCkgdHJhdmVyc2FsLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWR2YW5jZXMgcHJvdmlkZWQgbWljcm9iZW5jaG1hcmsgYnkgfjkwJSBhbmQgcHJvZ3Jlc3Nlcwor
ICAgICAgICBTcGVlZG9tZXRlcjIvRW1iZXJKUy1EZWJ1Zy1Ub2RvTVZDIGJ5IH4xMiUgKH41JSBv
dmVyIHIyNjQ1NzMpLgorCisgICAgICAgIE5vIGJlaGF2aW9yIGNoYW5nZS4KKworICAgICAgICAq
IGRmZy9ERkdHcmFwaC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmdldFJlZ0V4cFBy
b3RvdHlwZVByb3BlcnR5KToKKyAgICAgICAgKiBydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oOgor
ICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0SW50ZXJuYWwpOgorICAgICAgICAqIHJ1
bnRpbWUvU3RydWN0dXJlLmNwcDoKKyAgICAgICAgKEpTQzo6U3RydWN0dXJlOjptYXRlcmlhbGl6
ZVByb3BlcnR5VGFibGUpOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmU6OnJlbW92ZU5ld1Byb3Bl
cnR5VHJhbnNpdGlvbik6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6YXR0cmlidXRlQ2hhbmdl
VHJhbnNpdGlvbik6CisgICAgICAgICogcnVudGltZS9TdHJ1Y3R1cmUuaDoKKwogMjAyMC0wOC0x
MyAgQWxleGV5IFNodmF5a2EgIDxzaHZhaWthbGVzaEBnbWFpbC5jb20+CiAKICAgICAgICAgUmV3
b3JrIFN0cnVjdHVyZVRyYW5zaXRpb25UYWJsZTo6SGFzaDo6S2V5IGVuY29kaW5nCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMjY1NjQxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3MjYsOCArMTcyNiw3IEBAIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUgR3JhcGg6Om1l
dGgKIAogYm9vbCBHcmFwaDo6Z2V0UmVnRXhwUHJvdG90eXBlUHJvcGVydHkoSlNPYmplY3QqIHJl
Z0V4cFByb3RvdHlwZSwgU3RydWN0dXJlKiByZWdFeHBQcm90b3R5cGVTdHJ1Y3R1cmUsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQsIEpTVmFsdWUmIHJldHVybkpTVmFsdWUpCiB7Ci0gICAgdW5zaWdu
ZWQgYXR0cmlidXRlc1VudXNlZDsKLSAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQgPSByZWdFeHBQ
cm90b3R5cGVTdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXNVbnVzZWQp
OworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNldCA9IHJlZ0V4cFByb3RvdHlwZVN0cnVjdHVyZS0+
Z2V0Q29uY3VycmVudGx5KHVpZCk7CiAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KG9mZnNldCkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPYmplY3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNPYmplY3RJbmxpbmVzLmgJKHJldmlzaW9uIDI2NTY0MSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT2JqZWN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNjQsNiArMzY0LDEwIEBAIEFMV0FZU19JTkxJTkUgYm9vbCBKU09iamVjdDo6cHV0RGlyZWN0
SW4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCisgICAgLy8gV2Ugd2FudCB0aGUgc3Ry
dWN0dXJlIHRyYW5zaXRpb24gd2F0Y2hwb2ludCB0byBmaXJlIGFmdGVyIHRoaXMgb2JqZWN0IGhh
cyBzd2l0Y2hlZCBzdHJ1Y3R1cmUuCisgICAgLy8gVGhpcyBhbGxvd3MgYWRhcHRpdmUgd2F0Y2hw
b2ludHMgdG8gb2JzZXJ2ZSBpZiB0aGUgbmV3IHN0cnVjdHVyZSBpcyB0aGUgb25lIHdlIHdhbnQu
CisgICAgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUgZGVmZXJyZWRX
YXRjaHBvaW50RmlyZSh2bSwgc3RydWN0dXJlKTsKKwogICAgIHVuc2lnbmVkIGN1cnJlbnRBdHRy
aWJ1dGVzOwogICAgIG9mZnNldCA9IHN0cnVjdHVyZS0+Z2V0KHZtLCBwcm9wZXJ0eU5hbWUsIGN1
cnJlbnRBdHRyaWJ1dGVzKTsKICAgICBpZiAob2Zmc2V0ICE9IGludmFsaWRPZmZzZXQpIHsKQEAg
LTM3Niw3ICszODAsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgSlNPYmplY3Q6OnB1dERpcmVjdElu
CiAgICAgICAgIC8vIEZJWE1FOiBDaGVjayBhdHRyaWJ1dGVzIGFnYWluc3QgUHJvcGVydHlBdHRy
aWJ1dGU6OkN1c3RvbUFjY2Vzc29yT3JWYWx1ZS4gQ2hhbmdpbmcgR2V0dGVyU2V0dGVyIHNob3Vs
ZCB3b3JrIHcvbyB0cmFuc2l0aW9uLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE0MzQyCiAgICAgICAgIGlmIChtb2RlID09IFB1dE1vZGVEZWZp
bmVPd25Qcm9wZXJ0eSAmJiAoYXR0cmlidXRlcyAhPSBjdXJyZW50QXR0cmlidXRlcyB8fCAoYXR0
cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpBY2Nlc3Nvck9yQ3VzdG9tQWNjZXNzb3JPclZh
bHVlKSkpCi0gICAgICAgICAgICBzZXRTdHJ1Y3R1cmUodm0sIFN0cnVjdHVyZTo6YXR0cmlidXRl
Q2hhbmdlVHJhbnNpdGlvbih2bSwgc3RydWN0dXJlLCBwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMp
KTsKKyAgICAgICAgICAgIHNldFN0cnVjdHVyZSh2bSwgU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFu
Z2VUcmFuc2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcywgJmRl
ZmVycmVkV2F0Y2hwb2ludEZpcmUpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgc2xvdC5z
ZXRFeGlzdGluZ1Byb3BlcnR5KHRoaXMsIG9mZnNldCk7CiAKQEAgLTM4NSwxMSArMzg5LDYgQEAg
QUxXQVlTX0lOTElORSBib29sIEpTT2JqZWN0OjpwdXREaXJlY3RJbgogCiAgICAgaWYgKChtb2Rl
ID09IFB1dE1vZGVQdXQpICYmICFpc1N0cnVjdHVyZUV4dGVuc2libGUodm0pKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBXZSB3YW50IHRoZSBzdHJ1Y3R1cmUgdHJhbnNpdGlvbiB3
YXRjaHBvaW50IHRvIGZpcmUgYWZ0ZXIgdGhpcyBvYmplY3QgaGFzIHN3aXRjaGVkCi0gICAgLy8g
c3RydWN0dXJlLiBUaGlzIGFsbG93cyBhZGFwdGl2ZSB3YXRjaHBvaW50cyB0byBvYnNlcnZlIGlm
IHRoZSBuZXcgc3RydWN0dXJlIGlzIHRoZSBvbmUKLSAgICAvLyB3ZSB3YW50LgotICAgIERlZmVy
cmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9pbnRGaXJlIGRlZmVycmVkV2F0Y2hwb2ludEZp
cmUodm0sIHN0cnVjdHVyZSk7CiAgICAgCiAgICAgbmV3U3RydWN0dXJlID0gU3RydWN0dXJlOjph
ZGROZXdQcm9wZXJ0eVRyYW5zaXRpb24oCiAgICAgICAgIHZtLCBzdHJ1Y3R1cmUsIHByb3BlcnR5
TmFtZSwgYXR0cmlidXRlcywgb2Zmc2V0LCBzbG90LmNvbnRleHQoKSwgJmRlZmVycmVkV2F0Y2hw
b2ludEZpcmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3RydWN0dXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1
cmUuY3BwCShyZXZpc2lvbiAyNjU2NDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwOC0yMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAyMCBBbGV4ZXkgU2h2YXlrYSA8c2h2YWlrYWxlc2hAZ21haWwuY29t
Pi4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQ0LDYgKzQ0NSw3IEBAIFBy
b3BlcnR5VGFibGUqIFN0cnVjdHVyZTo6bWF0ZXJpYWxpemVQcm8KICAgICAgICAgICAgIHRhYmxl
LT5hZGREZWxldGVkT2Zmc2V0KHN0cnVjdHVyZS0+dHJhbnNpdGlvbk9mZnNldCgpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CisgICAgICAgIEFTU0VSVChzdHJ1Y3R1cmUtPmlz
UHJvcGVydHlBZGRpdGlvblRyYW5zaXRpb24oKSk7CiAgICAgICAgIFByb3BlcnR5TWFwRW50cnkg
ZW50cnkoc3RydWN0dXJlLT5tX3RyYW5zaXRpb25Qcm9wZXJ0eU5hbWUuZ2V0KCksIHN0cnVjdHVy
ZS0+dHJhbnNpdGlvbk9mZnNldCgpLCBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJp
YnV0ZXMoKSk7CiAgICAgICAgIGF1dG8gbmV4dE9mZnNldCA9IHRhYmxlLT5uZXh0T2Zmc2V0KHN0
cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQobmV4dE9m
ZnNldCwgbmV4dE9mZnNldCA9PSBzdHJ1Y3R1cmUtPnRyYW5zaXRpb25PZmZzZXQoKSk7CkBAIC02
NDMsMTEgKzY0NSw3IEBAIFN0cnVjdHVyZSogU3RydWN0dXJlOjpyZW1vdmVOZXdQcm9wZXJ0eVQK
ICAgICBBU1NFUlQoIVN0cnVjdHVyZTo6cmVtb3ZlUHJvcGVydHlUcmFuc2l0aW9uRnJvbUV4aXN0
aW5nU3RydWN0dXJlKHN0cnVjdHVyZSwgcHJvcGVydHlOYW1lLCBvZmZzZXQpKTsKICAgICBBU1NF
UlQoc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkocHJvcGVydHlOYW1lLnVpZCgpKSAhPSBpbnZh
bGlkT2Zmc2V0KTsKIAotICAgIGludCB0cmFuc2l0aW9uQ291bnQgPSAwOwotICAgIGZvciAoYXV0
byogcyA9IHN0cnVjdHVyZTsgcyAmJiB0cmFuc2l0aW9uQ291bnQgPD0gc19tYXhUcmFuc2l0aW9u
TGVuZ3RoOyBzID0gcy0+cHJldmlvdXNJRCgpKQotICAgICAgICArK3RyYW5zaXRpb25Db3VudDsK
LQotICAgIGlmICh0cmFuc2l0aW9uQ291bnQgPiBzX21heFRyYW5zaXRpb25MZW5ndGgpIHsKKyAg
ICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uQ291bnRIYXNPdmVyZmxvd2VkKCkpIHsKICAgICAg
ICAgQVNTRVJUKCFpc0NvcHlPbldyaXRlKHN0cnVjdHVyZS0+aW5kZXhpbmdNb2RlKCkpKTsKICAg
ICAgICAgU3RydWN0dXJlKiB0cmFuc2l0aW9uID0gdG9VbmNhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKHZtLCBzdHJ1Y3R1cmUsIGRlZmVycmVkKTsKICAgICAgICAgQVNTRVJUKHN0cnVjdHVy
ZSAhPSB0cmFuc2l0aW9uKTsKQEAgLTcwNiwzMCArNzA0LDc5IEBAIFN0cnVjdHVyZSogU3RydWN0
dXJlOjpjaGFuZ2VQcm90b3R5cGVUcmEKICAgICByZXR1cm4gdHJhbnNpdGlvbjsKIH0KIAotU3Ry
dWN0dXJlKiBTdHJ1Y3R1cmU6OmF0dHJpYnV0ZUNoYW5nZVRyYW5zaXRpb24oVk0mIHZtLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKK1N0cnVjdHVyZSogU3RydWN0dXJlOjphdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9u
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUs
IHVuc2lnbmVkIGF0dHJpYnV0ZXMsIERlZmVycmVkU3RydWN0dXJlVHJhbnNpdGlvbldhdGNocG9p
bnRGaXJlKiBkZWZlcnJlZCkKIHsKLSAgICBpZiAoIXN0cnVjdHVyZS0+aXNVbmNhY2hlYWJsZURp
Y3Rpb25hcnkoKSkgewotICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0s
IHN0cnVjdHVyZSk7CisgICAgYXV0byBzZXRFbnRyeUF0dHJpYnV0ZXMgPSBbJl0oU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpIHsKKyAgICAgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSBzdHJ1Y3R1
cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0pLT5nZXQocHJvcGVydHlOYW1lLnVpZCgpKTsKKyAg
ICAgICAgQVNTRVJUKGVudHJ5KTsKKyAgICAgICAgZW50cnktPmF0dHJpYnV0ZXMgPSBhdHRyaWJ1
dGVzOworICAgIH07CisKKyAgICBhdXRvIHNldFN0cnVjdHVyZUZsYWdzID0gWyZdKFN0cnVjdHVy
ZSogc3RydWN0dXJlKSB7CisgICAgICAgIGlmIChhdHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1
dGU6OlJlYWRPbmx5KQorICAgICAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5
UHJvcGVydGllcygpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpEb250RW51bSkKKyAgICAgICAgICAgIHN0cnVjdHVyZS0+c2V0SXNRdWlja1Byb3BlcnR5QWNj
ZXNzQWxsb3dlZEZvckVudW1lcmF0aW9uKGZhbHNlKTsKKyAgICB9OworCisgICAgaWYgKHN0cnVj
dHVyZS0+aXNVbmNhY2hlYWJsZURpY3Rpb25hcnkoKSkgeworICAgICAgICBzZXRFbnRyeUF0dHJp
YnV0ZXMoc3RydWN0dXJlKTsKKyAgICAgICAgc2V0U3RydWN0dXJlRmxhZ3Moc3RydWN0dXJlKTsK
KyAgICAgICAgc3RydWN0dXJlLT5jaGVja09mZnNldENvbnNpc3RlbmN5KCk7CisgICAgICAgIHJl
dHVybiBzdHJ1Y3R1cmU7CisgICAgfQorCisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFy
eSgpKSB7CisgICAgICAgIGlmIChTdHJ1Y3R1cmUqIGV4aXN0aW5nVHJhbnNpdGlvbiA9IHN0cnVj
dHVyZS0+bV90cmFuc2l0aW9uVGFibGUuZ2V0KHByb3BlcnR5TmFtZS51aWQoKSwgYXR0cmlidXRl
cywgVHJhbnNpdGlvbktpbmQ6OlByb3BlcnR5QXR0cmlidXRlQ2hhbmdlKSkgeworICAgICAgICAg
ICAgdmFsaWRhdGVPZmZzZXQoZXhpc3RpbmdUcmFuc2l0aW9uLT50cmFuc2l0aW9uT2Zmc2V0KCks
IGV4aXN0aW5nVHJhbnNpdGlvbi0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgICAgICAgICBleGlz
dGluZ1RyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIHJl
dHVybiBleGlzdGluZ1RyYW5zaXRpb247CisgICAgICAgIH0KIAotICAgICAgICBQcm9wZXJ0eVRh
YmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVByb3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsK
LSAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZt
LCB0YWJsZSk7Ci0gICAgICAgIHRyYW5zaXRpb24tPnNldE1heE9mZnNldCh2bSwgc3RydWN0dXJl
LT5tYXhPZmZzZXQoKSk7Ci0gICAgICAgIAotICAgICAgICBzdHJ1Y3R1cmUgPSB0cmFuc2l0aW9u
OworICAgICAgICBpZiAoc3RydWN0dXJlLT50cmFuc2l0aW9uQ291bnRIYXNPdmVyZmxvd2VkKCkp
IHsKKyAgICAgICAgICAgIEFTU0VSVCghaXNDb3B5T25Xcml0ZShzdHJ1Y3R1cmUtPmluZGV4aW5n
TW9kZSgpKSk7CisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSB0b1VuY2FjaGVh
YmxlRGljdGlvbmFyeVRyYW5zaXRpb24odm0sIHN0cnVjdHVyZSwgZGVmZXJyZWQpOworICAgICAg
ICAgICAgQVNTRVJUKHN0cnVjdHVyZSAhPSB0cmFuc2l0aW9uKTsKKyAgICAgICAgICAgIHNldEVu
dHJ5QXR0cmlidXRlcyh0cmFuc2l0aW9uKTsKKyAgICAgICAgICAgIHNldFN0cnVjdHVyZUZsYWdz
KHRyYW5zaXRpb24pOworICAgICAgICAgICAgcmV0dXJuIHRyYW5zaXRpb247CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBTdHJ1Y3R1cmUqIHRyYW5zaXRpb24gPSBjcmVhdGUodm0sIHN0cnVjdHVy
ZSk7CisKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodHJhbnNpdGlv
bi0+bV9sb2NrKTsKKyAgICAgICAgdHJhbnNpdGlvbi0+c2V0UHJvdGVjdFByb3BlcnR5VGFibGVX
aGlsZVRyYW5zaXRpb25pbmcodHJ1ZSk7CiAgICAgfQogCi0gICAgUHJvcGVydHlNYXBFbnRyeSog
ZW50cnkgPSBzdHJ1Y3R1cmUtPmVuc3VyZVByb3BlcnR5VGFibGUodm0pLT5nZXQocHJvcGVydHlO
YW1lLnVpZCgpKTsKKyAgICBQcm9wZXJ0eVRhYmxlKiB0YWJsZSA9IHN0cnVjdHVyZS0+Y29weVBy
b3BlcnR5VGFibGVGb3JQaW5uaW5nKHZtKTsKKyAgICBpZiAoc3RydWN0dXJlLT5pc0RpY3Rpb25h
cnkoKSkKKyAgICAgICAgdHJhbnNpdGlvbi0+cGluKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9j
ayksIHZtLCB0YWJsZSk7CisgICAgZWxzZQorICAgICAgICB0cmFuc2l0aW9uLT5waW5Gb3JDYWNo
aW5nKGhvbGRMb2NrKHRyYW5zaXRpb24tPm1fbG9jayksIHZtLCB0YWJsZSk7CisgICAgdHJhbnNp
dGlvbi0+bV90cmFuc2l0aW9uUHJvcGVydHlOYW1lID0gcHJvcGVydHlOYW1lLnVpZCgpOworICAg
IHRyYW5zaXRpb24tPnNldFRyYW5zaXRpb25Qcm9wZXJ0eUF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7
CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNpdGlvbktpbmQoVHJhbnNpdGlvbktpbmQ6OlByb3Bl
cnR5QXR0cmlidXRlQ2hhbmdlKTsKKyAgICB0cmFuc2l0aW9uLT5zZXRNYXhPZmZzZXQodm0sIHN0
cnVjdHVyZS0+bWF4T2Zmc2V0KCkpOworCisgICAgUHJvcGVydHlNYXBFbnRyeSogZW50cnkgPSB0
YWJsZS0+Z2V0KHByb3BlcnR5TmFtZS51aWQoKSk7CiAgICAgQVNTRVJUKGVudHJ5KTsKICAgICBl
bnRyeS0+YXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CisgICAgdHJhbnNpdGlvbi0+c2V0VHJhbnNp
dGlvbk9mZnNldCh2bSwgZW50cnktPm9mZnNldCk7CisgICAgc2V0U3RydWN0dXJlRmxhZ3ModHJh
bnNpdGlvbik7CiAKLSAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpSZWFk
T25seSkKLSAgICAgICAgc3RydWN0dXJlLT5zZXRDb250YWluc1JlYWRPbmx5UHJvcGVydGllcygp
OwotCi0gICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6RG9udEVudW0pCi0g
ICAgICAgIHN0cnVjdHVyZS0+c2V0SXNRdWlja1Byb3BlcnR5QWNjZXNzQWxsb3dlZEZvckVudW1l
cmF0aW9uKGZhbHNlKTsKKyAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgIHRyYW5zaXRp
b24tPnNldFByb3RlY3RQcm9wZXJ0eVRhYmxlV2hpbGVUcmFuc2l0aW9uaW5nKGZhbHNlKTsKIAor
ICAgIGNoZWNrT2Zmc2V0KHRyYW5zaXRpb24tPnRyYW5zaXRpb25PZmZzZXQoKSwgdHJhbnNpdGlv
bi0+aW5saW5lQ2FwYWNpdHkoKSk7CisgICAgaWYgKCFzdHJ1Y3R1cmUtPmlzRGljdGlvbmFyeSgp
KSB7CisgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIoc3RydWN0dXJlLT5t
X2xvY2ssIHZtLmhlYXApOworICAgICAgICBzdHJ1Y3R1cmUtPm1fdHJhbnNpdGlvblRhYmxlLmFk
ZCh2bSwgdHJhbnNpdGlvbik7CisgICAgfQorICAgIHRyYW5zaXRpb24tPmNoZWNrT2Zmc2V0Q29u
c2lzdGVuY3koKTsKICAgICBzdHJ1Y3R1cmUtPmNoZWNrT2Zmc2V0Q29uc2lzdGVuY3koKTsKLSAg
ICByZXR1cm4gc3RydWN0dXJlOworICAgIHJldHVybiB0cmFuc2l0aW9uOwogfQogCiBTdHJ1Y3R1
cmUqIFN0cnVjdHVyZTo6dG9EaWN0aW9uYXJ5VHJhbnNpdGlvbihWTSYgdm0sIFN0cnVjdHVyZSog
c3RydWN0dXJlLCBEaWN0aW9uYXJ5S2luZCBraW5kLCBEZWZlcnJlZFN0cnVjdHVyZVRyYW5zaXRp
b25XYXRjaHBvaW50RmlyZSogZGVmZXJyZWQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuaAkocmV2aXNpb24gMjY1NjQxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3RydWN0dXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5Nyw3ICsxOTcs
NyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFN0cnVjdHVyZSogcmVtb3ZlUHJvcGVydHlUcmFuc2l0
aW9uRnJvbUV4aXN0aW5nU3RydWN0dXJlKFN0cnVjdHVyZSosIFByb3BlcnR5TmFtZSwgUHJvcGVy
dHlPZmZzZXQmKTsKICAgICBzdGF0aWMgU3RydWN0dXJlKiByZW1vdmVQcm9wZXJ0eVRyYW5zaXRp
b25Gcm9tRXhpc3RpbmdTdHJ1Y3R1cmVDb25jdXJyZW50bHkoU3RydWN0dXJlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eU9mZnNldCYpOwogICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNoYW5nZVByb3Rv
dHlwZVRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqLCBKU1ZhbHVlIHByb3RvdHlwZSwgRGVmZXJy
ZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUmKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZNJiwgU3Ry
dWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKKyAgICBKU19FWFBP
UlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiBhdHRyaWJ1dGVDaGFuZ2VUcmFuc2l0aW9uKFZN
JiwgU3RydWN0dXJlKiwgUHJvcGVydHlOYW1lLCB1bnNpZ25lZCBhdHRyaWJ1dGVzLCBEZWZlcnJl
ZFN0cnVjdHVyZVRyYW5zaXRpb25XYXRjaHBvaW50RmlyZSogPSBudWxscHRyKTsKICAgICBKU19F
WFBPUlRfUFJJVkFURSBzdGF0aWMgU3RydWN0dXJlKiB0b0NhY2hlYWJsZURpY3Rpb25hcnlUcmFu
c2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVUcmFuc2l0aW9uV2F0Y2hw
b2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogdG9VbmNhY2hlYWJs
ZURpY3Rpb25hcnlUcmFuc2l0aW9uKFZNJiwgU3RydWN0dXJlKiwgRGVmZXJyZWRTdHJ1Y3R1cmVU
cmFuc2l0aW9uV2F0Y2hwb2ludEZpcmUqID0gbnVsbHB0cik7CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgc3RhdGljIFN0cnVjdHVyZSogc2VhbFRyYW5zaXRpb24oVk0mLCBTdHJ1Y3R1cmUqKTsKQEAg
LTc5Niw2ICs3OTYsMTcgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIG51bWJlck9mU2xvdHNG
b3JNYXhPZmZzZXQobWF4T2Zmc2V0KCksIG1faW5saW5lQ2FwYWNpdHkpOwogICAgIH0KIAorICAg
IEFMV0FZU19JTkxJTkUgYm9vbCB0cmFuc2l0aW9uQ291bnRIYXNPdmVyZmxvd2VkKCkgY29uc3QK
KyAgICB7CisgICAgICAgIGludCB0cmFuc2l0aW9uQ291bnQgPSAwOworICAgICAgICBmb3IgKGF1
dG8qIHN0cnVjdHVyZSA9IHRoaXM7IHN0cnVjdHVyZTsgc3RydWN0dXJlID0gc3RydWN0dXJlLT5w
cmV2aW91c0lEKCkpIHsKKyAgICAgICAgICAgIGlmICgrK3RyYW5zaXRpb25Db3VudCA+IHNfbWF4
VHJhbnNpdGlvbkxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAgICBib29sIGlzVmFsaWQoSlNH
bG9iYWxPYmplY3QqLCBTdHJ1Y3R1cmVDaGFpbiogY2FjaGVkUHJvdG90eXBlQ2hhaW4sIEpTT2Jq
ZWN0KiBiYXNlKSBjb25zdDsKIAogICAgIC8vIFlvdSBoYXZlIHRvIGhvbGQgdGhlIHN0cnVjdHVy
ZSBsb2NrIHRvIGRvIHRoZXNlLgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>