<?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>179500</bug_id>
          
          <creation_ts>2017-11-09 11:35:19 -0800</creation_ts>
          <short_desc>AX: AOM: Implement relation type properties</short_desc>
          <delta_ts>2017-12-04 17:24:21 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Accessibility</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=179255</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>
          
          <blocked>179255</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>n_wang</cc>
    
    <cc>rniwa</cc>
    
    <cc>samuel_white</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1369991</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-09 11:35:19 -0800</bug_when>
    <thetext>AOM Phase 1:
Implement relation type properties (aria-activedescendant, etc.).

Spec: https://wicg.github.io/aom/spec/

&lt;rdar://problem/35077972&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376675</commentid>
    <comment_count>1</comment_count>
      <attachid>328063</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-30 18:34:35 -0800</bug_when>
    <thetext>Created attachment 328063
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376678</commentid>
    <comment_count>2</comment_count>
      <attachid>328064</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-11-30 18:43:11 -0800</bug_when>
    <thetext>Created attachment 328064
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1376680</commentid>
    <comment_count>3</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2017-11-30 18:45:06 -0800</bug_when>
    <thetext>Attachment 328064 did not pass style-queue:


ERROR: Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:199:  &apos;ariaDetailsElementAtIndex&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUnsigned&apos;.  [readability/naming/protected] [4]
ERROR: Tools/WebKitTestRunner/InjectedBundle/AccessibilityUIElement.h:200:  &apos;ariaErrorMessageElementAtIndex&apos; is incorrectly named. It should be named &apos;protector&apos; or &apos;protectedUnsigned&apos;.  [readability/naming/protected] [4]
Total errors found: 2 in 15 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377886</commentid>
    <comment_count>4</comment_count>
      <attachid>328064</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-04 13:54:48 -0800</bug_when>
    <thetext>Comment on attachment 328064
patch

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

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2194
&gt; +        auto elements = AccessibleNode::effectiveElementsValueForElement(*element, propertyKey);
&gt; +        if (elements.size() == 1)
&gt; +            return elements.first();

What happens when elements contain more than one elements?
Should that ever happen? If so, is it really correct to return nullptr in that case?
Where is this behavior spec&apos;ed?

&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:3469
&gt; +    bool idEmpty = id.isEmpty();

Nit: should be idIsEmpty.

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:337
&gt; +AccessibleNode* AccessibleNode::singleRelationValueForProperty(Element&amp; element, AXPropertyName propertyName)

Please return RefPtr&lt;AccessibleNode&gt; for pointer safety.

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:340
&gt; +    if (accessibleNodes.size() == 1)

Is it possible for accessibleNodes to have more than one items? If so, is it really correct to return nullptr.
If that&apos;s not possible, we should assert that accessibleNodes.size() is either 0 or 1,
and this check should instead be replaced by if (accessibleNodes.size()).

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:345
&gt; +Vector&lt;AccessibleNode*&gt; AccessibleNode::relationsValueForProperty(Element&amp; element, AXPropertyName propertyName)

Please return Vector&lt;Ref&lt;AccessibleNode&gt;&gt; instead.

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:353
&gt; +Vector&lt;Element*&gt; AccessibleNode::effectiveElementsValueForElement(Element&amp; element, AXPropertyName propertyName)

Please return Vector&lt;Ref&lt;Element&gt;&gt; instead.

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:383
&gt; +AccessibleNode* AccessibleNode::activeDescendant() const

Please return RefPtr&lt;AccessibleNode&gt;

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:482
&gt; +AccessibleNode* AccessibleNode::details() const

Please return RefPtr&lt;AccessibleNode&gt;

&gt; Source/WebCore/accessibility/AccessibleNode.cpp:498
&gt; +AccessibleNode* AccessibleNode::errorMessage() const

Please return RefPtr&lt;AccessibleNode&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377896</commentid>
    <comment_count>5</comment_count>
      <attachid>328064</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-12-04 14:04:10 -0800</bug_when>
    <thetext>Comment on attachment 328064
patch

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

&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2194
&gt;&gt; +            return elements.first();
&gt; 
&gt; What happens when elements contain more than one elements?
&gt; Should that ever happen? If so, is it really correct to return nullptr in that case?
&gt; Where is this behavior spec&apos;ed?

I implemented this as a convenient function for relation types that only contain one AccessibleNode. Maybe we should add an assert here to make sure it only contains one element.
The more than one elements case should be addressed in another bug. In that case we could have elementsValueForProperty(property)
https://wicg.github.io/aom/spec/#accessiblenodelist-interface

&gt;&gt; Source/WebCore/accessibility/AccessibleNode.cpp:340
&gt;&gt; +    if (accessibleNodes.size() == 1)
&gt; 
&gt; Is it possible for accessibleNodes to have more than one items? If so, is it really correct to return nullptr.
&gt; If that&apos;s not possible, we should assert that accessibleNodes.size() is either 0 or 1,
&gt; and this check should instead be replaced by if (accessibleNodes.size()).

Yes I think an assert here is more appropriate. This is to cover the properties that only should contain one AccessibleNode.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1377898</commentid>
    <comment_count>6</comment_count>
      <attachid>328064</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-12-04 14:06:45 -0800</bug_when>
    <thetext>Comment on attachment 328064
patch

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

r=me with the assertion change.

&gt;&gt;&gt; Source/WebCore/accessibility/AccessibilityObject.cpp:2194
&gt;&gt;&gt; +            return elements.first();
&gt;&gt; 
&gt;&gt; What happens when elements contain more than one elements?
&gt;&gt; Should that ever happen? If so, is it really correct to return nullptr in that case?
&gt;&gt; Where is this behavior spec&apos;ed?
&gt; 
&gt; I implemented this as a convenient function for relation types that only contain one AccessibleNode. Maybe we should add an assert here to make sure it only contains one element.
&gt; The more than one elements case should be addressed in another bug. In that case we could have elementsValueForProperty(property)
&gt; https://wicg.github.io/aom/spec/#accessiblenodelist-interface

Okay. Please add an assert to check that there is either 0 or 1 element.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1378021</commentid>
    <comment_count>7</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2017-12-04 17:24:21 -0800</bug_when>
    <thetext>Committed r225511: &lt;https://trac.webkit.org/changeset/225511&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328063</attachid>
            <date>2017-11-30 18:34:35 -0800</date>
            <delta_ts>2017-11-30 18:36:20 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35426</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTExLTMwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFPTTogSW1wbGVtZW50IHJlbGF0
aW9uIHR5cGUgcHJvcGVydGllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc5NTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eSBPYmplY3QgTW9kZWwKKyAgICAgICAgRXhwbGFpbmVy
OiBodHRwczovL3dpY2cuZ2l0aHViLmlvL2FvbS9leHBsYWluZXIuaHRtbAorICAgICAgICBTcGVj
OiBodHRwczovL3dpY2cuZ2l0aHViLmlvL2FvbS9zcGVjLworCisgICAgICAgIEltcGxlbWVudGVk
IHRoZSBBT00gc3VwcG9ydCBmb3IgYWN0aXZlRGVzY2VuZGFudCwgZGV0YWlscyBhbmQgZXJyb3JN
ZXNzYWdlLgorICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBBUklBIGF0dHJpYnV0ZXMgYWxsIHRh
a2UgSURSRUZzLCBhbmQgdGhlIEFPTSBwcm9wZXJ0aWVzCisgICAgICAgIHRha2UgcmVmZXJlbmNl
cyB0byBBY2Nlc3NpYmxlTm9kZXMgaW5zdGVhZC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmls
aXR5L21hYy9BT00tcmVsYXRpb24tcHJvcGVydHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvb2xWYWx1ZUZvclByb3BlcnR5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVlRm9y
UHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
dW5zaWduZWRWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRvdWJsZVZhbHVlRm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudFZhbHVlRm9yUHJvcGVydHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklB
QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjplbGVtZW50c0Zyb21Qcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplbGVtZW50c1JlZmVyZW5jZWRCeVByb3BlcnR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFBY3RpdmVEZXNjZW5kYW50UmVm
ZXJlbmNpbmdFbGVtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjphcmlhRGV0YWlsc0VsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhRXJyb3JNZXNzYWdl
RWxlbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHMgY29uc3QpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY3RpdmVEZXNjZW5kYW50IGNvbnN0KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFy
aWFBdHRyaWJ1dGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlUmVsYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmF0dHJpYnV0ZUZyb21BWFBy
b3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVsYXRp
b25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2luZ2xlUmVs
YXRpb25WYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2Rl
OjphY3RpdmVEZXNjZW5kYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpzZXRBY3RpdmVEZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpkZXRhaWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpz
ZXREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjplcnJvck1lc3Nh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEVycm9yTWVz
c2FnZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6XSk6CisKIDIwMTctMTEtMjggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGUuY2xpZW50cyBzaG91bGQgYWx3YXlzIHJl
dHVybiB0aGUgc2FtZSBvYmplY3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjI1MjQ5KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEzOSw1MyArMjEzOSw2MyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Omhhc0F0dHJpYnV0ZShjCiAgICAgCiBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNv
bnN0CiB7Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAg
aWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBlbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGF0dHJpYnV0ZSk7CiAgICAgcmV0
dXJuIG51bGxBdG9tKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlLZXkpIGNvbnN0CiB7Ci0gICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlz
LT5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9kZTo6aGFzUHJvcGVydHko
KmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGNvbnN0IFN0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
dGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9y
RWxlbWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOwogICAgIHJldHVybiBudWxsQXRvbSgpOwog
fQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvb2xWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWVG
b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29uc3QKIHsKLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICBpZiAoYXV0byogZWxlbWVu
dCA9IHRoaXMtPmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2libGVOb2RlOjplZmZl
Y3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1
cm4gMDsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dW5zaWduZWRWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KCplbGVtZW50LCBwcm9wZXJ0eUtleSk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb3VibGVWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZURvdWJsZVZhbHVlRm9yRWxlbWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOwogICAgIHJl
dHVybiAwLjA7CiB9CiAKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRWYWx1
ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAoreworICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGF1dG8gZWxlbWVu
dHMgPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRWxlbWVudHNWYWx1ZUZvckVsZW1lbnQoKmVs
ZW1lbnQsIHByb3BlcnR5S2V5KTsKKyAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpcnN0KCk7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCiAvLyBMYWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0aW9u
LCBob3Jpem9udGFsIG1lYW5zIHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQgPiB3
aWR0aDsKIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpvcmll
bnRhdGlvbigpIGNvbnN0CiB7CkBAIC0yNTU1LDkgKzI1NjUsOSBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN1cHBvcnRzQVJJQUF0CiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Nv
bnRyb2xzQXR0cikKICAgICAgICAgfHwgaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkN1cnJl
bnQpCiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Rlc2NyaWJlZGJ5QXR0cikKLSAgICAg
ICAgfHwgaGFzQXR0cmlidXRlKGFyaWFfZGV0YWlsc0F0dHIpCisgICAgICAgIHx8IGhhc1Byb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpEZXRhaWxzKQogICAgICAgICB8fCBoYXNQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6RGlzYWJsZWQpCi0gICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Vycm9y
bWVzc2FnZUF0dHIpCisgICAgICAgIHx8IGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFcnJv
ck1lc3NhZ2UpCiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Zsb3d0b0F0dHIpCiAgICAg
ICAgIHx8IGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIYXNQb3BVcCkKICAgICAgICAgfHwg
aGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkludmFsaWQpCkBAIC0zNDMyLDYgKzM0NDIsNTcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhRWxlbWVudHNSZQogICAgIH0KIH0KIAor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50c0Zyb21Qcm9wZXJ0eShBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuLCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkgY29u
c3QKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOworICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RD
YWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZWxl
bWVudHMgPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRWxlbWVudHNWYWx1ZUZvckVsZW1lbnQo
KmVsZW1lbnQsIHByb3BlcnR5KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBlbGVt
ZW50cykgeworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjYWNo
ZS0+Z2V0T3JDcmVhdGUoZWxlbWVudCkpCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoYXhP
YmplY3QpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50c1Jl
ZmVyZW5jZWRCeVByb3BlcnR5KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZWxlbWVudHMs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5KSBjb25zdAoreworICAgIGF1dG8qIHRoaXNFbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpOworICAgIGlmICghdGhpc0VsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBhdXRvIGlkID0gaWRlbnRpZmllckF0dHJpYnV0ZSgpOworICAgIGJvb2wg
aWRFbXB0eSA9IGlkLmlzRW1wdHkoKTsKKyAgICBhdXRvKiBhY2Nlc3NpYmxlTm9kZSA9IHRoaXNF
bGVtZW50LT5leGlzdGluZ0FjY2Vzc2libGVOb2RlKCk7CisgICAgaWYgKGlkRW1wdHkgJiYgIWFj
Y2Vzc2libGVOb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYWNoZSA9IGF4T2Jq
ZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihub2RlKCktPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpKSB7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcmUgPSBmYWxzZTsK
KyAgICAgICAgYXV0byByZWZlcmVuY2VkQWNjZXNzaWJsZU5vZGVzID0gQWNjZXNzaWJsZU5vZGU6
OnJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpOworICAgICAgICBp
ZiAocmVmZXJlbmNlZEFjY2Vzc2libGVOb2Rlcy5zaXplKCkpCisgICAgICAgICAgICBzaG91bGRT
dG9yZSA9IHJlZmVyZW5jZWRBY2Nlc3NpYmxlTm9kZXMuY29udGFpbnMoYWNjZXNzaWJsZU5vZGUp
OworICAgICAgICBpZiAoIXNob3VsZFN0b3JlICYmICFpZEVtcHR5KSB7CisgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkTGlzdCA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihBY2Nlc3NpYmxlTm9kZTo6YXR0cmlidXRlRnJvbUFYUHJvcGVydHlOYW1lKHBy
b3BlcnR5KSk7CisgICAgICAgICAgICBpZiAoU3BhY2VTcGxpdFN0cmluZyhpZExpc3QsIGZhbHNl
KS5jb250YWlucyhpZCkpCisgICAgICAgICAgICAgICAgc2hvdWxkU3RvcmUgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFzaG91bGRTdG9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjYWNoZS0+Z2V0
T3JDcmVhdGUoJmVsZW1lbnQpKQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGF4T2JqZWN0
KTsKKyAgICB9Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBY3RpdmVEZXNjZW5k
YW50T2ZGb2N1c2VkQ29udGFpbmVyKCkgY29uc3QKIHsKICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgY29udGFpbmVyczsKQEAgLTM0NDYsNyArMzUwNyw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6aXNBY3RpdmVEZXNjZW4KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojph
cmlhQWN0aXZlRGVzY2VuZGFudFJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjb250YWluZXJzKSBjb25zdAogewotICAgIGFyaWFFbGVtZW50c1JlZmVyZW5j
ZWRCeUF0dHJpYnV0ZShjb250YWluZXJzLCBhcmlhX2FjdGl2ZWRlc2NlbmRhbnRBdHRyKTsKKyAg
ICBlbGVtZW50c1JlZmVyZW5jZWRCeVByb3BlcnR5KGNvbnRhaW5lcnMsIEFYUHJvcGVydHlOYW1l
OjpBY3RpdmVEZXNjZW5kYW50KTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojphcmlh
Q29udHJvbHNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGFyaWFDb250cm9s
cykgY29uc3QKQEAgLTM0NzEsMjIgKzM1MzIsMjIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphcmlhRGVzY3JpYmVkQgogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRhaWxz
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBhcmlhRGV0YWlscykgY29uc3QK
IHsKLSAgICBhcmlhRWxlbWVudHNGcm9tQXR0cmlidXRlKGFyaWFEZXRhaWxzLCBhcmlhX2RldGFp
bHNBdHRyKTsKKyAgICBlbGVtZW50c0Zyb21Qcm9wZXJ0eShhcmlhRGV0YWlscywgQVhQcm9wZXJ0
eU5hbWU6OkRldGFpbHMpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRh
aWxzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGRldGFp
bHNGb3IpIGNvbnN0CiB7Ci0gICAgYXJpYUVsZW1lbnRzUmVmZXJlbmNlZEJ5QXR0cmlidXRlKGRl
dGFpbHNGb3IsIGFyaWFfZGV0YWlsc0F0dHIpOworICAgIGVsZW1lbnRzUmVmZXJlbmNlZEJ5UHJv
cGVydHkoZGV0YWlsc0ZvciwgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHMpOwogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGFyaWFFcnJvck1lc3NhZ2UpIGNvbnN0CiB7Ci0gICAgYXJpYUVsZW1l
bnRzRnJvbUF0dHJpYnV0ZShhcmlhRXJyb3JNZXNzYWdlLCBhcmlhX2Vycm9ybWVzc2FnZUF0dHIp
OworICAgIGVsZW1lbnRzRnJvbVByb3BlcnR5KGFyaWFFcnJvck1lc3NhZ2UsIEFYUHJvcGVydHlO
YW1lOjpFcnJvck1lc3NhZ2UpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFF
cnJvck1lc3NhZ2VSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgZXJyb3JNZXNzYWdlRm9yKSBjb25zdAogewotICAgIGFyaWFFbGVtZW50c1JlZmVyZW5jZWRC
eUF0dHJpYnV0ZShlcnJvck1lc3NhZ2VGb3IsIGFyaWFfZXJyb3JtZXNzYWdlQXR0cik7CisgICAg
ZWxlbWVudHNSZWZlcmVuY2VkQnlQcm9wZXJ0eShlcnJvck1lc3NhZ2VGb3IsIEFYUHJvcGVydHlO
YW1lOjpFcnJvck1lc3NhZ2UpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFG
bG93VG9FbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGZsb3dUbykgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCShyZXZpc2lvbiAyMjUyNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODk5LDYgKzg5OSw3
IEBAIHB1YmxpYzoKICAgICBpbnQgaW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lKSBjb25zdDsKICAgICBkb3VibGUgZG91YmxlVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgRWxlbWVudCogZWxlbWVudFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7
IH0KICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yTGluZSh1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsg
fQpAQCAtMTE2OCw2ICsxMTY5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBhcmlhRWxlbWVu
dHNGcm9tQXR0cmlidXRlKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIGFyaWFFbGVtZW50c1JlZmVyZW5jZWRCeUF0dHJp
YnV0ZShBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Q7CisgICAgdm9pZCBlbGVtZW50c0Zyb21Qcm9wZXJ0eShBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImLCBBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdm9pZCBlbGVtZW50c1JlZmVy
ZW5jZWRCeVByb3BlcnR5KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYsIEFYUHJvcGVydHlO
YW1lKSBjb25zdDsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJhZGlvR3JvdXBBbmNlc3Rv
cigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIyNTI0OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzgsMTUgKzI0MzgsOCBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjdGl2ZURl
c2NlbmRhbnRBdHRyU3RyID0gZ2V0QXR0cmlidXRlKGFyaWFfYWN0aXZlZGVzY2VuZGFudEF0dHIp
OwotICAgIGlmIChhY3RpdmVEZXNjZW5kYW50QXR0clN0ci5pc051bGwoKSB8fCBhY3RpdmVEZXNj
ZW5kYW50QXR0clN0ci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBFbGVtZW50KiB0YXJnZXQgPSBl
bGVtZW50LT50cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChhY3RpdmVEZXNjZW5kYW50QXR0clN0
cik7CisgICAgRWxlbWVudCogdGFyZ2V0ID0gZWxlbWVudFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCShyZXZpc2lvbiAyMjUyNDkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAg
ICAgICAgICAgICBBWFByb3BlcnR5TmFtZSBuYW1lOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBhcmlhQXR0cmlidXRlOwogICAgICAgICB9IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAg
IHsgQVhQcm9wZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQsIGFyaWFfYWN0aXZlZGVzY2VuZGFu
dEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYywgYXJpYV9hdG9t
aWNBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpBdXRvY29tcGxldGUsIGFy
aWFfYXV0b2NvbXBsZXRlQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6QnVz
eSwgYXJpYV9idXN5QXR0ciB9LApAQCAtNTMsNyArNTQsOSBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0
ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDb2xJ
bmRleCwgYXJpYV9jb2xpbmRleEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OkNvbFNwYW4sIGFyaWFfY29sc3BhbkF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5h
bWU6OkN1cnJlbnQsIGFyaWFfY3VycmVudEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0
eU5hbWU6OkRldGFpbHMsIGFyaWFfZGV0YWlsc0F0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9w
ZXJ0eU5hbWU6OkRpc2FibGVkLCBhcmlhX2Rpc2FibGVkQXR0ciB9LAorICAgICAgICAgICAgeyBB
WFByb3BlcnR5TmFtZTo6RXJyb3JNZXNzYWdlLCBhcmlhX2Vycm9ybWVzc2FnZUF0dHIgfSwKICAg
ICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVkLCBhcmlhX2V4cGFuZGVkQXR0ciB9
LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXAsIGFyaWFfaGFzcG9wdXBB
dHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpIaWRkZW4sIGFyaWFfaGlkZGVu
QXR0ciB9LApAQCAtMTc3LDYgKzE4MCwyMyBAQCBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVG
bG9hdChBWFByb3BlCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVSZWxh
dGlvbihBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0
eU5hbWUpIHsKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpBY3RpdmVEZXNjZW5kYW50OgorICAg
IGNhc2UgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHM6CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6
RXJyb3JNZXNzYWdlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitRdWFsaWZpZWROYW1lIEFjY2Vzc2libGVOb2Rl
OjphdHRyaWJ1dGVGcm9tQVhQcm9wZXJ0eU5hbWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBhcmlhQXR0cmlidXRlTWFwKCkuZ2V0KHByb3BlcnR5TmFtZSk7Cit9
CisKIGJvb2wgQWNjZXNzaWJsZU5vZGU6Omhhc1Byb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBpZiAoYXV0byogYWNjZXNzaWJsZU5v
ZGUgPSBlbGVtZW50LmV4aXN0aW5nQWNjZXNzaWJsZU5vZGUoKSkgewpAQCAtMjIwLDYgKzI0MCwx
NCBAQCB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eShBCiAgICAgc2V0UHJv
cGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSwgdmFsdWUuaXNFbXB0eSgpKTsKIH0KIAordm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0UmVsYXRpb25Qcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEFjY2Vzc2libGVOb2RlKiB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJsZU5v
ZGUqPiBhY2Nlc3NpYmxlTm9kZXM7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBhY2Nlc3NpYmxl
Tm9kZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGFjY2Vz
c2libGVOb2RlcywgIXZhbHVlKTsKK30KKwogY29uc3QgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpl
ZmZlY3RpdmVTdHJpbmdWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBzdHJpbmdW
YWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CkBAIC0zMDYsMTIgKzMzNCw2
MyBAQCBkb3VibGUgQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZURvdWJsZVZhCiAgICAgcmV0dXJu
IDAuMDsKIH0KIAorQWNjZXNzaWJsZU5vZGUqIEFjY2Vzc2libGVOb2RlOjpzaW5nbGVSZWxhdGlv
blZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+IGFjY2Vzc2libGVOb2RlcyA9
IHJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoYWNjZXNzaWJsZU5vZGVzLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gYWNjZXNzaWJs
ZU5vZGVzLmZpcnN0KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3RvcjxBY2Nlc3Np
YmxlTm9kZSo+IEFjY2Vzc2libGVOb2RlOjpyZWxhdGlvbnNWYWx1ZUZvclByb3BlcnR5KEVsZW1l
bnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb25zdCBQ
cm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhcmlhbnQgPSBBY2Nlc3NpYmxlTm9kZTo6dmFsdWVGb3JQ
cm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+Pih2YXJpYW50KSkKKyAgICAgICAgcmV0dXJu
IFdURjo6Z2V0PFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+Pih2YXJpYW50KTsKKyAgICByZXR1cm4g
VmVjdG9yPEFjY2Vzc2libGVOb2RlKj4geyB9OworfQorCitWZWN0b3I8RWxlbWVudCo+IEFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVFbGVtZW50c1ZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgVmVjdG9yPEVsZW1lbnQq
PiBlbGVtZW50czsKKyAgICBhdXRvIHZhbHVlID0gcmVsYXRpb25zVmFsdWVGb3JQcm9wZXJ0eShl
bGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZS5zaXplKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvKiBhY2Nlc3NpYmxlTm9kZSA6IHZhbHVlKQorICAgICAgICAgICAgZWxlbWVudHMu
YXBwZW5kKCZhY2Nlc3NpYmxlTm9kZS0+bV9vd25lckVsZW1lbnQpOworICAgICAgICByZXR1cm4g
ZWxlbWVudHM7CisgICAgfQorCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250YWlucyhw
cm9wZXJ0eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZVJlbGF0aW9uKHByb3BlcnR5TmFtZSkpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyU3RyID0gZWxlbWVudC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRyaWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1l
KSk7CisgICAgICAgIGlmIChhdHRyU3RyLmlzTnVsbCgpIHx8IGF0dHJTdHIuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICBhdXRvIHNwYWNlU3BsaXRTdHJp
bmcgPSBTcGFjZVNwbGl0U3RyaW5nKGF0dHJTdHIsIGZhbHNlKTsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IHNwYWNlU3BsaXRTdHJpbmcuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogaWRFbGVtZW50ID0g
ZWxlbWVudC50cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChzcGFjZVNwbGl0U3RyaW5nW2ldKSkK
KyAgICAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoaWRFbGVtZW50KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudHM7Cit9CisKIHZvaWQgQWNjZXNzaWJsZU5vZGU6Om5v
dGlmeUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkK
IHsKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX293bmVyRWxlbWVudC5kb2N1bWVu
dCgpLmF4T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPmhhbmRsZUF0dHJpYnV0ZUNoYW5n
ZWQobmFtZSwgJm1fb3duZXJFbGVtZW50KTsKIH0KIAorQWNjZXNzaWJsZU5vZGUqIEFjY2Vzc2li
bGVOb2RlOjphY3RpdmVEZXNjZW5kYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlUmVs
YXRpb25WYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6QWN0
aXZlRGVzY2VuZGFudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEFjdGl2ZURlc2Nl
bmRhbnQoQWNjZXNzaWJsZU5vZGUqIHZhbHVlKQoreworICAgIHNldFJlbGF0aW9uUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRy
aWJ1dGVDaGFuZ2VkKGFyaWFfYWN0aXZlZGVzY2VuZGFudEF0dHIpOworfQorCiBzdGQ6Om9wdGlv
bmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjphdG9taWMoKSBjb25zdAogewogICAgIHJldHVybiBv
cHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlO
YW1lOjpBdG9taWMpOwpAQCAtNDAwLDExICs0NzksMzQgQEAgdm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0Q3VycmVudChjb25zdCBTdAogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jdXJy
ZW50QXR0cik7CiB9CiAKK0FjY2Vzc2libGVOb2RlKiBBY2Nlc3NpYmxlTm9kZTo6ZGV0YWlscygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZVJlbGF0aW9uVmFsdWVGb3JQcm9wZXJ0eShtX293
bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHMpOworfQorCit2b2lkIEFjY2Vzc2li
bGVOb2RlOjpzZXREZXRhaWxzKEFjY2Vzc2libGVOb2RlKiB2YWx1ZSkKK3sKKyAgICBzZXRSZWxh
dGlvblByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEZXRhaWxzLCB2YWx1ZSk7CisgICAgbm90aWZ5
QXR0cmlidXRlQ2hhbmdlZChhcmlhX2RldGFpbHNBdHRyKTsKK30KKwogc3RkOjpvcHRpb25hbDxi
b29sPiBBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBvcHRp
b25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpEaXNhYmxlZCk7CiB9CiAKK0FjY2Vzc2libGVOb2RlKiBBY2Nlc3NpYmxlTm9kZTo6ZXJyb3JN
ZXNzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlUmVsYXRpb25WYWx1ZUZvclByb3Bl
cnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6RXJyb3JNZXNzYWdlKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RXJyb3JNZXNzYWdlKEFjY2Vzc2libGVOb2RlKiB2YWx1
ZSkKK3sKKyAgICBzZXRSZWxhdGlvblByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFcnJvck1lc3Nh
Z2UsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfZXJyb3JtZXNzYWdl
QXR0cik7Cit9CisKKwogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RGlzYWJsZWQoc3RkOjpvcHRp
b25hbDxib29sPiB2YWx1ZSkKIHsKICAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJv
cGVydHlOYW1lOjpEaXNhYmxlZCwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAkocmV2aXNpb24gMjI1MjQ5KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMCArMzYsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZhcmlh
bnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlPiBQ
cm9wZXJ0eVZhbHVlVmFyaWFudDsKK3R5cGVkZWYgVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3Ry
aW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+
PiBQcm9wZXJ0eVZhbHVlVmFyaWFudDsKIAogZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSB7CiAg
ICAgTm9uZSwKKyAgICBBY3RpdmVEZXNjZW5kYW50LAogICAgIEF0b21pYywKICAgICBBdXRvY29t
cGxldGUsCiAgICAgQnVzeSwKQEAgLTQ4LDcgKzQ5LDkgQEAgZW51bSBjbGFzcyBBWFByb3BlcnR5
TmFtZSB7CiAgICAgQ29sSW5kZXgsCiAgICAgQ29sU3BhbiwKICAgICBDdXJyZW50LAorICAgIERl
dGFpbHMsCiAgICAgRGlzYWJsZWQsCisgICAgRXJyb3JNZXNzYWdlLAogICAgIEV4cGFuZGVkLAog
ICAgIEhhc1BvcFVwLAogICAgIEhpZGRlbiwKQEAgLTEwNSwxMyArMTA4LDIwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZigpIHsgbV9vd25lckVsZW1lbnQucmVmKCk7IH0KICAgICB2b2lkIGRlcmVm
KCkgeyBtX293bmVyRWxlbWVudC5kZXJlZigpOyB9CiAKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBhdHRyaWJ1dGVGcm9tQVhQcm9wZXJ0eU5hbWUoQVhQcm9wZXJ0eU5hbWUpOworCiAgICAgc3Rh
dGljIGNvbnN0IFN0cmluZyBlZmZlY3RpdmVTdHJpbmdWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYs
IEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxib29sPiBlZmZlY3Rp
dmVCb29sVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7CiAgICAgc3Rh
dGljIGludCBlZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlO
YW1lKTsKICAgICBzdGF0aWMgdW5zaWduZWQgZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1l
bnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgZG91YmxlIGVmZmVjdGl2
ZURvdWJsZVZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0
YXRpYyBWZWN0b3I8RWxlbWVudCo+IGVmZmVjdGl2ZUVsZW1lbnRzVmFsdWVGb3JFbGVtZW50KEVs
ZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIFZlY3RvcjxBY2Nlc3NpYmxlTm9k
ZSo+IHJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgYm9vbCBoYXNQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwog
CisgICAgQWNjZXNzaWJsZU5vZGUqIGFjdGl2ZURlc2NlbmRhbnQoKSBjb25zdDsKKyAgICB2b2lk
IHNldEFjdGl2ZURlc2NlbmRhbnQoQWNjZXNzaWJsZU5vZGUqKTsKKwogICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gYXRvbWljKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBdG9taWMoc3RkOjpvcHRpb25h
bDxib29sPik7CiAgICAgCkBAIC0xMzYsOSArMTQ2LDE1IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
Y3VycmVudCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q3VycmVudChjb25zdCBTdHJpbmcmKTsKIAor
ICAgIEFjY2Vzc2libGVOb2RlKiBkZXRhaWxzKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZXRhaWxz
KEFjY2Vzc2libGVOb2RlKik7CisKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGRpc2FibGVkKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChzdGQ6Om9wdGlvbmFsPGJvb2w+KTsKIAorICAg
IEFjY2Vzc2libGVOb2RlKiBlcnJvck1lc3NhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldEVycm9y
TWVzc2FnZShBY2Nlc3NpYmxlTm9kZSopOworCiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBleHBh
bmRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RXhwYW5kZWQoc3RkOjpvcHRpb25hbDxib29sPik7
CiAKQEAgLTIzMywxMCArMjQ5LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IFByb3Bl
cnR5VmFsdWVWYXJpYW50IHZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1l
KTsKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVu
dCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxUPiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgQWNjZXNzaWJsZU5vZGUqIHNpbmdsZVJlbGF0aW9uVmFsdWVG
b3JQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIHZvaWQgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIFByb3BlcnR5VmFsdWVWYXJpYW50JiYsIGJvb2wpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0T3B0aW9uYWxQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZSwgc3RkOjpvcHRpb25hbDxUPik7CiAgICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRSZWxhdGlvblByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lLCBBY2Nlc3NpYmxlTm9kZSopOwogICAgIAogICAgIHZvaWQgbm90
aWZ5QXR0cmlidXRlQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRs
CShyZXZpc2lvbiAyMjUyNDkpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2libGVOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICAgIFNraXBW
VGFibGVWYWxpZGF0aW9uLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9QWNjZXNzaWJpbGl0eU9iamVj
dE1vZGVsLAogXSBpbnRlcmZhY2UgQWNjZXNzaWJsZU5vZGUgeworICAgIGF0dHJpYnV0ZSBBY2Nl
c3NpYmxlTm9kZT8gYWN0aXZlRGVzY2VuZGFudDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gYXRv
bWljOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGF1dG9jb21wbGV0ZTsKICAgICBhdHRyaWJ1
dGUgYm9vbGVhbj8gYnVzeTsKQEAgLTM1LDcgKzM2LDkgQEAKICAgICBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZz8gY29sSW5kZXg7CiAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGNvbFNwYW47
CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gY3VycmVudDsKKyAgICBhdHRyaWJ1dGUgQWNjZXNz
aWJsZU5vZGU/IGRldGFpbHM7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGRpc2FibGVkOworICAg
IGF0dHJpYnV0ZSBBY2Nlc3NpYmxlTm9kZT8gZXJyb3JNZXNzYWdlOwogICAgIGF0dHJpYnV0ZSBi
b29sZWFuPyBleHBhbmRlZDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBoYXNQb3BVcDsKICAg
ICBhdHRyaWJ1dGUgYm9vbGVhbj8gaGlkZGVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIyNTI0OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAyLDYgKzMyMDIsMjEgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOihOU1N0cgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFJlYWRPbmx5VmFsdWUiXSkKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5yZWFkT25seVZh
bHVlKCk7CiAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhJc0Fj
dGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIiXSkKKyAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2Vk
Q29udGFpbmVyKCldOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYRGV0YWlsc0VsZW1lbnRzIl0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGRldGFpbHM7CisgICAgICAgIG1fb2JqZWN0LT5hcmlh
RGV0YWlsc0VsZW1lbnRzKGRldGFpbHMpOworICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShkZXRhaWxzKTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhFcnJvck1lc3NhZ2VFbGVtZW50cyJdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBlcnJvck1lc3NhZ2VzOworICAgICAg
ICBtX29iamVjdC0+YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVycm9yTWVzc2FnZXMpOworICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShlcnJvck1lc3NhZ2VzKTsKKyAgICB9CisKICAg
ICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmli
dXRlXSkKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+
cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpXTsKICAgICAKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTM3NykK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3
LTExLTMwICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFPTTog
SW1wbGVtZW50IHJlbGF0aW9uIHR5cGUgcHJvcGVydGllcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYURldGFpbHNFbGVtZW50QXRJbmRleCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50QXRJbmRleCk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXNjcmliZWRCeVJlZmVy
ZW5jaW5nRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXRhaWxz
RWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
cmlhRXJyb3JNZXNzYWdlRWxlbWVudEF0SW5kZXgpOgorCiAyMDE3LTExLTMwICBTdGVwaGFuIFN6
YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBNYWtlIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlciBvcHRpb25hbCBmb3IgbmV0d29yayBwcm9jZXNzCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMjI1MjQ5KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTQgQEAgcHVibGljOgogICAgIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiBhcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVu
c2lnbmVkKTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUNvbnRyb2xz
RWxlbWVudEF0SW5kZXgodW5zaWduZWQpOworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
R1RLKQorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBhcmlhRGV0YWlsc0VsZW1l
bnRBdEluZGV4KHVuc2lnbmVkKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKKyNlbHNlCisgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgodW5z
aWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBu
dWxscHRyOyB9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICBSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gYXJpYUxhYmVsbGVkQnlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7
CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXNjcmliZWRCeUVsZW1l
bnRBdEluZGV4KHVuc2lnbmVkKTsKQEAgLTIwMyw5ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFDb250cm9sc1JlZmVyZW5jaW5nRWxlbWVu
dEF0SW5kZXgodW5zaWduZWQpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBh
cmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpOwogICAgIFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBhcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0Vs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CiAgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50QXRJbmRleCh1
bnNpZ25lZCk7Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFFcnJvck1l
c3NhZ2VFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IGFyaWFFcnJvck1lc3NhZ2VSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkKTsKICNlbHNlCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFMYWJl
bGxlZEJ5RWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KQEAgLTIx
NSw5ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IGFyaWFDb250cm9sc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJu
IG51bGxwdHI7IH0KICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUxhYmVs
bGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXNjcmliZWRCeVJl
ZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAg
ICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYURldGFpbHNFbGVtZW50QXRJbmRl
eCh1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFFcnJvck1lc3NhZ2VS
ZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRyOyB9CiAj
ZW5kaWYKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CShyZXZpc2lvbiAyMjUyNDkpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MTcsNiArNDE3LDI2IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgTlNBcnJheSog
ZGV0YWlscyA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhEZXRh
aWxzRWxlbWVudHMiXTsKKyAgICBpZiAoaW5kZXggPCBbZGV0YWlscyBjb3VudF0pCisgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoW2RldGFpbHMgb2JqZWN0QXRJ
bmRleDppbmRleF0pOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBOU0FycmF5KiBlcnJvck1lc3Nh
Z2VzID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVycm9yTWVz
c2FnZUVsZW1lbnRzIl07CisgICAgaWYgKGluZGV4IDwgW2Vycm9yTWVzc2FnZXMgY291bnRdKQor
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKFtlcnJvck1lc3Nh
Z2VzIG9iamVjdEF0SW5kZXg6aW5kZXhdKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4
KQogewogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1
MjQ5KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTctMTEtMzAgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAg
ICBBWDogQU9NOiBJbXBsZW1lbnQgcmVsYXRpb24gdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk1MDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmx5IGVuYWJsZSB0aGlzIHRl
c3Qgb24gV0syLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9uLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
QU9NLXJlbGF0aW9uLXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy13azEvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxNy0xMS0yOCAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZS5jbGllbnRz
IHNob3VsZCBhbHdheXMgcmV0dXJuIHRoZSBzYW1lIG9iamVjdApJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9uLXByb3BlcnR5LWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tcmVsYXRpb24tcHJv
cGVydHktZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL0FPTS1yZWxhdGlvbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyNyBAQAorTWVudSBpdGVtIDEKK01lbnUgaXRlbSAyCisKK0luZm9ybWF0
aW9uIGFib3V0IHRoZSBlcnJvci4KK1RoaXMgdGVzdHMgcmVsYXRpb24gdHlwZSBBY2Nlc3NpYmls
aXR5IE9iamVjdCBNb2RlbCBwcm9wZXJ0aWVzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworCitBY3RpdmVEZXNjZW5kYW50IHN1cHBvcnQKK1BBU1MgYXhSZWxhdGlvbi5pc1NlbGVj
dGVkIGlzIGZhbHNlCitQQVNTIGF4UmVsYXRpb24uaXNTZWxlY3RlZCBpcyB0cnVlCitQQVNTIGF4
UmVsYXRpb24uYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWElzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNl
ZENvbnRhaW5lcicpIGlzIGZhbHNlCitQQVNTIGF4UmVsYXRpb24uYm9vbEF0dHJpYnV0ZVZhbHVl
KCdBWElzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcicpIGlzIHRydWUKK1BBU1Mg
YXhSZWxhdGlvbi5ib29sQXR0cmlidXRlVmFsdWUoJ0FYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1
c2VkQ29udGFpbmVyJykgaXMgZmFsc2UKK1BBU1MgYXhSZWxhdGlvbi5ib29sQXR0cmlidXRlVmFs
dWUoJ0FYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyJykgaXMgdHJ1ZQorCitE
ZXRhaWxzIHN1cHBvcnQKK1BBU1MgYXhOb2RlLmFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgoMCkg
aXMgbnVsbAorUEFTUyBheE5vZGUuYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCgwKS5jaGlsZEF0
SW5kZXgoMCkuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6IERldGFpbGVkIGRlc2NyaXB0aXZlIGlu
Zm9ybWF0aW9uLiIKK1BBU1MgYXhOb2RlLmFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgoMCkgaXMg
bnVsbAorCitFcnJvck1lc3NhZ2Ugc3VwcG9ydAorUEFTUyBheE5vZGUuYXJpYUVycm9yTWVzc2Fn
ZUVsZW1lbnRBdEluZGV4KDApIGlzIG51bGwKK1BBU1MgYXhOb2RlLmFyaWFFcnJvck1lc3NhZ2VF
bGVtZW50QXRJbmRleCgwKS5jaGlsZEF0SW5kZXgoMCkuc3RyaW5nVmFsdWUgaXMgIkFYVmFsdWU6
IEluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvci4iCisKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vz
c2liaWxpdHkvbWFjL0FPTS1yZWxhdGlvbi1wcm9wZXJ0eS5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL0FPTS1yZWxhdGlvbi1wcm9wZXJ0eS5odG1sCShu
b25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL0FPTS1yZWxhdGlv
bi1wcm9wZXJ0eS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9DVFlQ
RSBIVE1MPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9hY2Nl
c3NpYmlsaXR5LWhlbHBlci5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBp
ZD0ibWVudSIgcm9sZT0ibWVudSIgYXJpYS1sYWJlbD0iRmlyc3QgbWVudSIgdGFiaW5kZXg9Ii0x
Ij4KKzxkaXYgcm9sZT0ibWVudWl0ZW0iIGlkPSJpdGVtMSIgYXJpYS1sYWJlbD0iaXRlbSAxIiB0
YWJpbmRleD0iLTEiPk1lbnUgaXRlbSAxPC9kaXY+Cis8ZGl2IHJvbGU9Im1lbnVpdGVtIiBpZD0i
aXRlbTIiIGFyaWEtbGFiZWw9Iml0ZW0gMiIgdGFiaW5kZXg9IjAiPk1lbnUgaXRlbSAyPC9kaXY+
Cis8L2Rpdj4KKworPGlucHV0IGlkPSJpbnB1dCI+Cis8ZGl2IGlkPSJkZXRhaWxzIj5EZXRhaWxl
ZCBkZXNjcmlwdGl2ZSBpbmZvcm1hdGlvbi48L2Rpdj4KKzxkaXYgaWQ9ImVycm9yIj5JbmZvcm1h
dGlvbiBhYm91dCB0aGUgZXJyb3IuPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisgICAgZGVzY3JpcHRpb24oIlRo
aXMgdGVzdHMgcmVsYXRpb24gdHlwZSBBY2Nlc3NpYmlsaXR5IE9iamVjdCBNb2RlbCBwcm9wZXJ0
aWVzLiIpOworICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAgICAg
ICAgdmFyIG5vZGU7CisgICAgICAgIHZhciBheE5vZGU7CisgICAgICAgIHZhciByZWxhdGlvbjsK
KyAgICAgICAgdmFyIGF4UmVsYXRpb247CisKKyAgICAgICAgdGVzdEFjdGl2ZURlc2NlbmRhbnQo
KTsKKyAgICAgICAgdGVzdERldGFpbHMoKTsKKyAgICAgICAgdGVzdEVycm9yTWVzc2FnZSgpOwor
ICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3RBY3RpdmVEZXNjZW5kYW50KCkgeworICAgICAgICBk
ZWJ1ZygiXG5BY3RpdmVEZXNjZW5kYW50IHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJtZW51Iik7CisgICAgICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxp
dHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgibWVudSIpOworICAgICAgICByZWxh
dGlvbiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpdGVtMSIpOworICAgICAgICBheFJlbGF0
aW9uID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJpdGVt
MSIpOworCisgICAgICAgIC8vIEFjdGl2ZSBEZXNjZW5kYW50IG1ha2VzIHRoZSBNZW51IGl0ZW0g
c2VsZWN0ZWQuIAorICAgICAgICBzaG91bGRCZUZhbHNlKCJheFJlbGF0aW9uLmlzU2VsZWN0ZWQi
KTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5hY3RpdmVEZXNjZW5kYW50ID0gcmVsYXRp
b24uYWNjZXNzaWJsZU5vZGU7CisgICAgICAgIHNob3VsZEJlVHJ1ZSgiYXhSZWxhdGlvbi5pc1Nl
bGVjdGVkIik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHRoYXQgd2UgYXJlIGFibGUgdG8g
Z2V0IHRoZSByaWdodCBjb250YWluZXIuCisgICAgICAgIHNob3VsZEJlRmFsc2UoImF4UmVsYXRp
b24uYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWElzQWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRh
aW5lcicpIik7CisgICAgICAgIG5vZGUuZm9jdXMoKTsKKyAgICAgICAgc2hvdWxkQmVUcnVlKCJh
eFJlbGF0aW9uLmJvb2xBdHRyaWJ1dGVWYWx1ZSgnQVhJc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3Vz
ZWRDb250YWluZXInKSIpOworICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIGl0IGZhbGxz
IGJhY2sgdG8gQVJJQSBhdHRyaWJ1dGUgaWYgQU9NIHByb3BlcnR5IGlzIG5vdCBzZXQuCisgICAg
ICAgIG5vZGUuYWNjZXNzaWJsZU5vZGUuYWN0aXZlRGVzY2VuZGFudCA9IG51bGw7CisgICAgICAg
IHNob3VsZEJlRmFsc2UoImF4UmVsYXRpb24uYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWElzQWN0aXZl
RGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcicpIik7CisgICAgICAgIG5vZGUuc2V0QXR0cmli
dXRlKCJhcmlhLWFjdGl2ZWRlc2NlbmRhbnQiLCAiaXRlbTEiKTsKKyAgICAgICAgc2hvdWxkQmVU
cnVlKCJheFJlbGF0aW9uLmJvb2xBdHRyaWJ1dGVWYWx1ZSgnQVhJc0FjdGl2ZURlc2NlbmRhbnRP
ZkZvY3VzZWRDb250YWluZXInKSIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIHRlc3REZXRhaWxz
KCkgeworICAgICAgICBkZWJ1ZygiXG5EZXRhaWxzIHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9
IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpOworICAgICAgICBheE5vZGUgPSBhY2Nl
c3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImlucHV0Iik7CisgICAg
ICAgIHJlbGF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImRldGFpbHMiKTsKKyAgICAg
ICAgCisgICAgICAgIHNob3VsZEJlTnVsbCgiYXhOb2RlLmFyaWFEZXRhaWxzRWxlbWVudEF0SW5k
ZXgoMCkiKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5kZXRhaWxzID0gcmVsYXRpb24u
YWNjZXNzaWJsZU5vZGU7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiYXhOb2RlLmFy
aWFEZXRhaWxzRWxlbWVudEF0SW5kZXgoMCkuY2hpbGRBdEluZGV4KDApLnN0cmluZ1ZhbHVlIiwg
IkFYVmFsdWU6IERldGFpbGVkIGRlc2NyaXB0aXZlIGluZm9ybWF0aW9uLiIpOworICAgICAgICAK
KyAgICAgICAgLy8gVGVzdCByZW1vdmluZyB0aGUgZGV0YWlscyBlbGVtZW50LgorICAgICAgICBy
ZWxhdGlvbi5wYXJlbnRFbGVtZW50LnJlbW92ZUNoaWxkKHJlbGF0aW9uKTsKKyAgICAgICAgc2hv
dWxkQmVOdWxsKCJheE5vZGUuYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCgwKSIpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIHRlc3RFcnJvck1lc3NhZ2UoKSB7CisgICAgICAgIGRlYnVnKCJcbkVy
cm9yTWVzc2FnZSBzdXBwb3J0Iik7CisgICAgICAgIG5vZGUgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZCgiaW5wdXQiKTsKKyAgICAgICAgYXhOb2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJpbnB1dCIpOworICAgICAgICByZWxhdGlvbiA9IGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCJlcnJvciIpOworICAgICAgICAKKyAgICAgICAgc2hvdWxkQmVO
dWxsKCJheE5vZGUuYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KDApIik7CisgICAgICAg
IG5vZGUuYWNjZXNzaWJsZU5vZGUuZXJyb3JNZXNzYWdlID0gcmVsYXRpb24uYWNjZXNzaWJsZU5v
ZGU7CisgICAgICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiYXhOb2RlLmFyaWFFcnJvck1lc3Nh
Z2VFbGVtZW50QXRJbmRleCgwKS5jaGlsZEF0SW5kZXgoMCkuc3RyaW5nVmFsdWUiLCAiQVhWYWx1
ZTogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLiIpOworICAgIH0KKworPC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2Jv
ZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2sxL1Rlc3RFeHBl
Y3RhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMS9UZXN0
RXhwZWN0YXRpb25zCShyZXZpc2lvbiAyMjUyNDkpCisrKyBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9t
YWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTQ2OCwzICs0NjgsNSBA
QCB3ZWJraXQub3JnL2IvMTc3MDIwIGZhc3QvZXZlbnRzL2JlZm9yZXVuCiB3ZWJraXQub3JnL2Iv
MTc3NTYzIFsgSGlnaFNpZXJyYSBdIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzcG9uc2Ut
ZW1wdHktYXJyYXlidWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTcyMzk3
IFsgRGVidWcgXSBhbmltYXRpb25zL25lZWRzLWxheW91dC5odG1sIFsgUGFzcyBJbWFnZU9ubHlG
YWlsdXJlIF0KKword2Via2l0Lm9yZy9iLzE3OTUwMCBhY2Nlc3NpYmlsaXR5L21hYy9BT00tcmVs
YXRpb24tcHJvcGVydHkuaHRtbCBbIFNraXAgXQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>328064</attachid>
            <date>2017-11-30 18:43:11 -0800</date>
            <delta_ts>2017-12-04 14:06:45 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>35407</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTM3NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTExLTMwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFPTTogSW1wbGVtZW50IHJlbGF0
aW9uIHR5cGUgcHJvcGVydGllcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTc5NTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWNjZXNzaWJpbGl0eSBPYmplY3QgTW9kZWwKKyAgICAgICAgRXhwbGFpbmVy
OiBodHRwczovL3dpY2cuZ2l0aHViLmlvL2FvbS9leHBsYWluZXIuaHRtbAorICAgICAgICBTcGVj
OiBodHRwczovL3dpY2cuZ2l0aHViLmlvL2FvbS9zcGVjLworCisgICAgICAgIEltcGxlbWVudGVk
IHRoZSBBT00gc3VwcG9ydCBmb3IgYWN0aXZlRGVzY2VuZGFudCwgZGV0YWlscyBhbmQgZXJyb3JN
ZXNzYWdlLgorICAgICAgICBUaGUgY29ycmVzcG9uZGluZyBBUklBIGF0dHJpYnV0ZXMgYWxsIHRh
a2UgSURSRUZzLCBhbmQgdGhlIEFPTSBwcm9wZXJ0aWVzCisgICAgICAgIHRha2UgcmVmZXJlbmNl
cyB0byBBY2Nlc3NpYmxlTm9kZXMgaW5zdGVhZC4KKworICAgICAgICBUZXN0OiBhY2Nlc3NpYmls
aXR5L21hYy9BT00tcmVsYXRpb24tcHJvcGVydHkuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlPYmplY3Q6OmdldEF0dHJpYnV0ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5T2JqZWN0OjpoYXNQcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpB
Y2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvb2xWYWx1ZUZvclByb3BlcnR5IGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmludFZhbHVlRm9y
UHJvcGVydHkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
dW5zaWduZWRWYWx1ZUZvclByb3BlcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlPYmplY3Q6OmRvdWJsZVZhbHVlRm9yUHJvcGVydHkgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6ZWxlbWVudFZhbHVlRm9yUHJvcGVydHkgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6c3VwcG9ydHNBUklB
QXR0cmlidXRlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0
OjplbGVtZW50c0Zyb21Qcm9wZXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5T2JqZWN0OjplbGVtZW50c1JlZmVyZW5jZWRCeVByb3BlcnR5IGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFBY3RpdmVEZXNjZW5kYW50UmVm
ZXJlbmNpbmdFbGVtZW50cyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5
T2JqZWN0OjphcmlhRGV0YWlsc0VsZW1lbnRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50cyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhRXJyb3JNZXNzYWdl
RWxlbWVudHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU9iamVjdDo6
YXJpYUVycm9yTWVzc2FnZVJlZmVyZW5jaW5nRWxlbWVudHMgY29uc3QpOgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5oOgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjphY3RpdmVEZXNjZW5kYW50IGNvbnN0KToKKyAgICAgICAg
KiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFy
aWFBdHRyaWJ1dGVNYXApOgorICAgICAgICAoV2ViQ29yZTo6aXNQcm9wZXJ0eVZhbHVlUmVsYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OmF0dHJpYnV0ZUZyb21BWFBy
b3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2V0UmVsYXRp
b25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmxlTm9kZTo6c2luZ2xlUmVs
YXRpb25WYWx1ZUZvclByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2Rl
OjphY3RpdmVEZXNjZW5kYW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpzZXRBY3RpdmVEZXNjZW5kYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVO
b2RlOjpkZXRhaWxzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjpz
ZXREZXRhaWxzKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2libGVOb2RlOjplcnJvck1lc3Nh
Z2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJsZU5vZGU6OnNldEVycm9yTWVz
c2FnZSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oOgorICAgICAg
ICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsOgorICAgICAgICAqIGFjY2Vzc2li
aWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAo
LVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFs
dWU6XSk6CisKIDIwMTctMTEtMzAgIFN0ZXBoYW4gU3phYm8gIDxzdGVwaGFuLnN6YWJvQHNvbnku
Y29tPgogCiAgICAgICAgIE1ha2UgTGVnYWN5Q3VzdG9tUHJvdG9jb2xNYW5hZ2VyIG9wdGlvbmFs
IGZvciBuZXR3b3JrIHByb2Nlc3MKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkocmV2aXNpb24gMjI1Mzc3KQorKysg
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjEzOSw1MyArMjEzOSw2MyBAQCBib29sIEFjY2Vzc2liaWxpdHlPYmpl
Y3Q6Omhhc0F0dHJpYnV0ZShjCiAgICAgCiBjb25zdCBBdG9taWNTdHJpbmcmIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OmdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGUpIGNv
bnN0CiB7Ci0gICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAg
aWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBlbGVt
ZW50LT5hdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKGF0dHJpYnV0ZSk7CiAgICAgcmV0
dXJuIG51bGxBdG9tKCk7CiB9CiAKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aGFzUHJvcGVy
dHkoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlLZXkpIGNvbnN0CiB7Ci0gICAgaWYgKEVsZW1lbnQq
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCisgICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlz
LT5lbGVtZW50KCkpCiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmxlTm9kZTo6aGFzUHJvcGVydHko
KmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGNvbnN0IFN0
cmluZyBBY2Nlc3NpYmlsaXR5T2JqZWN0OjpzdHJpbmdWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVy
dHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChFbGVtZW50KiBlbGVtZW50ID0g
dGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgp
KQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZVN0cmluZ1ZhbHVlRm9y
RWxlbWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOwogICAgIHJldHVybiBudWxsQXRvbSgpOwog
fQogCiBzdGQ6Om9wdGlvbmFsPGJvb2w+IEFjY2Vzc2liaWxpdHlPYmplY3Q6OmJvb2xWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZUJvb2xWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OwogfQogCiBpbnQgQWNjZXNzaWJpbGl0eU9iamVjdDo6aW50VmFsdWVG
b3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eUtleSkgY29uc3QKIHsKLSAgICBpZiAo
RWxlbWVudCogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKKyAgICBpZiAoYXV0byogZWxlbWVu
dCA9IHRoaXMtPmVsZW1lbnQoKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2libGVOb2RlOjplZmZl
Y3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoKmVsZW1lbnQsIHByb3BlcnR5S2V5KTsKICAgICByZXR1
cm4gMDsKIH0KIAogdW5zaWduZWQgQWNjZXNzaWJpbGl0eU9iamVjdDo6dW5zaWduZWRWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZVVuc2lnbmVkVmFsdWVGb3JFbGVtZW50KCplbGVtZW50LCBwcm9wZXJ0eUtleSk7CiAgICAg
cmV0dXJuIDA7CiB9CiAKIGRvdWJsZSBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpkb3VibGVWYWx1ZUZv
clByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAogewotICAgIGlmIChF
bGVtZW50KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQorICAgIGlmIChhdXRvKiBlbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJsZU5vZGU6OmVmZmVj
dGl2ZURvdWJsZVZhbHVlRm9yRWxlbWVudCgqZWxlbWVudCwgcHJvcGVydHlLZXkpOwogICAgIHJl
dHVybiAwLjA7CiB9CiAKK0VsZW1lbnQqIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmVsZW1lbnRWYWx1
ZUZvclByb3BlcnR5KEFYUHJvcGVydHlOYW1lIHByb3BlcnR5S2V5KSBjb25zdAoreworICAgIGlm
IChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKSB7CisgICAgICAgIGF1dG8gZWxlbWVu
dHMgPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRWxlbWVudHNWYWx1ZUZvckVsZW1lbnQoKmVs
ZW1lbnQsIHByb3BlcnR5S2V5KTsKKyAgICAgICAgaWYgKGVsZW1lbnRzLnNpemUoKSA9PSAxKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzLmZpcnN0KCk7CisgICAgfQorICAgIHJldHVybiBu
dWxscHRyOworfQorCiAvLyBMYWNraW5nIGNvbmNyZXRlIGV2aWRlbmNlIG9mIG9yaWVudGF0aW9u
LCBob3Jpem9udGFsIG1lYW5zIHdpZHRoID4gaGVpZ2h0LiB2ZXJ0aWNhbCBpcyBoZWlnaHQgPiB3
aWR0aDsKIEFjY2Vzc2liaWxpdHlPcmllbnRhdGlvbiBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojpvcmll
bnRhdGlvbigpIGNvbnN0CiB7CkBAIC0yNTU1LDkgKzI1NjUsOSBAQCBib29sIEFjY2Vzc2liaWxp
dHlPYmplY3Q6OnN1cHBvcnRzQVJJQUF0CiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Nv
bnRyb2xzQXR0cikKICAgICAgICAgfHwgaGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkN1cnJl
bnQpCiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Rlc2NyaWJlZGJ5QXR0cikKLSAgICAg
ICAgfHwgaGFzQXR0cmlidXRlKGFyaWFfZGV0YWlsc0F0dHIpCisgICAgICAgIHx8IGhhc1Byb3Bl
cnR5KEFYUHJvcGVydHlOYW1lOjpEZXRhaWxzKQogICAgICAgICB8fCBoYXNQcm9wZXJ0eShBWFBy
b3BlcnR5TmFtZTo6RGlzYWJsZWQpCi0gICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Vycm9y
bWVzc2FnZUF0dHIpCisgICAgICAgIHx8IGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFcnJv
ck1lc3NhZ2UpCiAgICAgICAgIHx8IGhhc0F0dHJpYnV0ZShhcmlhX2Zsb3d0b0F0dHIpCiAgICAg
ICAgIHx8IGhhc1Byb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpIYXNQb3BVcCkKICAgICAgICAgfHwg
aGFzUHJvcGVydHkoQVhQcm9wZXJ0eU5hbWU6OkludmFsaWQpCkBAIC0zNDMyLDYgKzM0NDIsNTcg
QEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjphcmlhRWxlbWVudHNSZQogICAgIH0KIH0KIAor
dm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50c0Zyb21Qcm9wZXJ0eShBY2Nlc3NpYmls
aXR5Q2hpbGRyZW5WZWN0b3ImIGNoaWxkcmVuLCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eSkgY29u
c3QKK3sKKyAgICBhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpOworICAgIGlmICghZWxl
bWVudCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGF1dG8qIGNhY2hlID0gYXhPYmplY3RD
YWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIGF1dG8gZWxl
bWVudHMgPSBBY2Nlc3NpYmxlTm9kZTo6ZWZmZWN0aXZlRWxlbWVudHNWYWx1ZUZvckVsZW1lbnQo
KmVsZW1lbnQsIHByb3BlcnR5KTsKKyAgICBmb3IgKGNvbnN0IGF1dG8mIGVsZW1lbnQgOiBlbGVt
ZW50cykgeworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjYWNo
ZS0+Z2V0T3JDcmVhdGUoZWxlbWVudCkpCisgICAgICAgICAgICBjaGlsZHJlbi5hcHBlbmQoYXhP
YmplY3QpOworICAgIH0KK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0OjplbGVtZW50c1Jl
ZmVyZW5jZWRCeVByb3BlcnR5KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYgZWxlbWVudHMs
IEFYUHJvcGVydHlOYW1lIHByb3BlcnR5KSBjb25zdAoreworICAgIGF1dG8qIHRoaXNFbGVtZW50
ID0gdGhpcy0+ZWxlbWVudCgpOworICAgIGlmICghdGhpc0VsZW1lbnQpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBhdXRvIGlkID0gaWRlbnRpZmllckF0dHJpYnV0ZSgpOworICAgIGJvb2wg
aWRFbXB0eSA9IGlkLmlzRW1wdHkoKTsKKyAgICBhdXRvKiBhY2Nlc3NpYmxlTm9kZSA9IHRoaXNF
bGVtZW50LT5leGlzdGluZ0FjY2Vzc2libGVOb2RlKCk7CisgICAgaWYgKGlkRW1wdHkgJiYgIWFj
Y2Vzc2libGVOb2RlKQorICAgICAgICByZXR1cm47CisKKyAgICBhdXRvKiBjYWNoZSA9IGF4T2Jq
ZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KGF1dG8mIGVsZW1lbnQgOiBkZXNjZW5kYW50c09mVHlwZTxFbGVtZW50Pihub2RlKCktPnRyZWVT
Y29wZSgpLnJvb3ROb2RlKCkpKSB7CisgICAgICAgIGJvb2wgc2hvdWxkU3RvcmUgPSBmYWxzZTsK
KyAgICAgICAgYXV0byByZWZlcmVuY2VkQWNjZXNzaWJsZU5vZGVzID0gQWNjZXNzaWJsZU5vZGU6
OnJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHkpOworICAgICAgICBp
ZiAocmVmZXJlbmNlZEFjY2Vzc2libGVOb2Rlcy5zaXplKCkpCisgICAgICAgICAgICBzaG91bGRT
dG9yZSA9IHJlZmVyZW5jZWRBY2Nlc3NpYmxlTm9kZXMuY29udGFpbnMoYWNjZXNzaWJsZU5vZGUp
OworICAgICAgICBpZiAoIXNob3VsZFN0b3JlICYmICFpZEVtcHR5KSB7CisgICAgICAgICAgICBj
b25zdCBBdG9taWNTdHJpbmcmIGlkTGlzdCA9IGVsZW1lbnQuYXR0cmlidXRlV2l0aG91dFN5bmNo
cm9uaXphdGlvbihBY2Nlc3NpYmxlTm9kZTo6YXR0cmlidXRlRnJvbUFYUHJvcGVydHlOYW1lKHBy
b3BlcnR5KSk7CisgICAgICAgICAgICBpZiAoU3BhY2VTcGxpdFN0cmluZyhpZExpc3QsIGZhbHNl
KS5jb250YWlucyhpZCkpCisgICAgICAgICAgICAgICAgc2hvdWxkU3RvcmUgPSB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFzaG91bGRTdG9yZSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBpZiAoQWNjZXNzaWJpbGl0eU9iamVjdCogYXhPYmplY3QgPSBjYWNoZS0+Z2V0
T3JDcmVhdGUoJmVsZW1lbnQpKQorICAgICAgICAgICAgZWxlbWVudHMuYXBwZW5kKGF4T2JqZWN0
KTsKKyAgICB9Cit9CisKIGJvb2wgQWNjZXNzaWJpbGl0eU9iamVjdDo6aXNBY3RpdmVEZXNjZW5k
YW50T2ZGb2N1c2VkQ29udGFpbmVyKCkgY29uc3QKIHsKICAgICBBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3IgY29udGFpbmVyczsKQEAgLTM0NDYsNyArMzUwNyw3IEBAIGJvb2wgQWNjZXNzaWJp
bGl0eU9iamVjdDo6aXNBY3RpdmVEZXNjZW4KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojph
cmlhQWN0aXZlRGVzY2VuZGFudFJlZmVyZW5jaW5nRWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxk
cmVuVmVjdG9yJiBjb250YWluZXJzKSBjb25zdAogewotICAgIGFyaWFFbGVtZW50c1JlZmVyZW5j
ZWRCeUF0dHJpYnV0ZShjb250YWluZXJzLCBhcmlhX2FjdGl2ZWRlc2NlbmRhbnRBdHRyKTsKKyAg
ICBlbGVtZW50c1JlZmVyZW5jZWRCeVByb3BlcnR5KGNvbnRhaW5lcnMsIEFYUHJvcGVydHlOYW1l
OjpBY3RpdmVEZXNjZW5kYW50KTsKIH0KIAogdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0Ojphcmlh
Q29udHJvbHNFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGFyaWFDb250cm9s
cykgY29uc3QKQEAgLTM0NzEsMjIgKzM1MzIsMjIgQEAgdm9pZCBBY2Nlc3NpYmlsaXR5T2JqZWN0
OjphcmlhRGVzY3JpYmVkQgogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRhaWxz
RWxlbWVudHMoQWNjZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yJiBhcmlhRGV0YWlscykgY29uc3QK
IHsKLSAgICBhcmlhRWxlbWVudHNGcm9tQXR0cmlidXRlKGFyaWFEZXRhaWxzLCBhcmlhX2RldGFp
bHNBdHRyKTsKKyAgICBlbGVtZW50c0Zyb21Qcm9wZXJ0eShhcmlhRGV0YWlscywgQVhQcm9wZXJ0
eU5hbWU6OkRldGFpbHMpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFEZXRh
aWxzUmVmZXJlbmNpbmdFbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGRldGFp
bHNGb3IpIGNvbnN0CiB7Ci0gICAgYXJpYUVsZW1lbnRzUmVmZXJlbmNlZEJ5QXR0cmlidXRlKGRl
dGFpbHNGb3IsIGFyaWFfZGV0YWlsc0F0dHIpOworICAgIGVsZW1lbnRzUmVmZXJlbmNlZEJ5UHJv
cGVydHkoZGV0YWlsc0ZvciwgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHMpOwogfQogCiB2b2lkIEFj
Y2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyhBY2Nlc3NpYmlsaXR5
Q2hpbGRyZW5WZWN0b3ImIGFyaWFFcnJvck1lc3NhZ2UpIGNvbnN0CiB7Ci0gICAgYXJpYUVsZW1l
bnRzRnJvbUF0dHJpYnV0ZShhcmlhRXJyb3JNZXNzYWdlLCBhcmlhX2Vycm9ybWVzc2FnZUF0dHIp
OworICAgIGVsZW1lbnRzRnJvbVByb3BlcnR5KGFyaWFFcnJvck1lc3NhZ2UsIEFYUHJvcGVydHlO
YW1lOjpFcnJvck1lc3NhZ2UpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFF
cnJvck1lc3NhZ2VSZWZlcmVuY2luZ0VsZW1lbnRzKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3Rv
ciYgZXJyb3JNZXNzYWdlRm9yKSBjb25zdAogewotICAgIGFyaWFFbGVtZW50c1JlZmVyZW5jZWRC
eUF0dHJpYnV0ZShlcnJvck1lc3NhZ2VGb3IsIGFyaWFfZXJyb3JtZXNzYWdlQXR0cik7CisgICAg
ZWxlbWVudHNSZWZlcmVuY2VkQnlQcm9wZXJ0eShlcnJvck1lc3NhZ2VGb3IsIEFYUHJvcGVydHlO
YW1lOjpFcnJvck1lc3NhZ2UpOwogfQogCiB2b2lkIEFjY2Vzc2liaWxpdHlPYmplY3Q6OmFyaWFG
bG93VG9FbGVtZW50cyhBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImIGZsb3dUbykgY29uc3QK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU9iamVjdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eU9iamVjdC5oCShyZXZpc2lvbiAyMjUzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtODk5LDYgKzg5OSw3
IEBAIHB1YmxpYzoKICAgICBpbnQgaW50VmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5TmFtZSkg
Y29uc3Q7CiAgICAgdW5zaWduZWQgdW5zaWduZWRWYWx1ZUZvclByb3BlcnR5KEFYUHJvcGVydHlO
YW1lKSBjb25zdDsKICAgICBkb3VibGUgZG91YmxlVmFsdWVGb3JQcm9wZXJ0eShBWFByb3BlcnR5
TmFtZSkgY29uc3Q7CisgICAgRWxlbWVudCogZWxlbWVudFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWUpIGNvbnN0OwogCiAgICAgdmlydHVhbCBWaXNpYmxlUG9zaXRpb25SYW5nZSB2aXNp
YmxlUG9zaXRpb25SYW5nZSgpIGNvbnN0IHsgcmV0dXJuIFZpc2libGVQb3NpdGlvblJhbmdlKCk7
IH0KICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvblJhbmdlIHZpc2libGVQb3NpdGlvblJhbmdl
Rm9yTGluZSh1bnNpZ25lZCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uUmFuZ2UoKTsg
fQpAQCAtMTE2OCw2ICsxMTY5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgdm9pZCBhcmlhRWxlbWVu
dHNGcm9tQXR0cmlidXRlKEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKICAgICB2b2lkIGFyaWFFbGVtZW50c1JlZmVyZW5jZWRCeUF0dHJp
YnV0ZShBY2Nlc3NpYmlsaXR5Q2hpbGRyZW5WZWN0b3ImLCBjb25zdCBRdWFsaWZpZWROYW1lJikg
Y29uc3Q7CisgICAgdm9pZCBlbGVtZW50c0Zyb21Qcm9wZXJ0eShBY2Nlc3NpYmlsaXR5Q2hpbGRy
ZW5WZWN0b3ImLCBBWFByb3BlcnR5TmFtZSkgY29uc3Q7CisgICAgdm9pZCBlbGVtZW50c1JlZmVy
ZW5jZWRCeVByb3BlcnR5KEFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciYsIEFYUHJvcGVydHlO
YW1lKSBjb25zdDsKIAogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHJhZGlvR3JvdXBBbmNlc3Rv
cigpIGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIyNTM3NykK
KysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0MzgsMTUgKzI0MzgsOCBAQCBBY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyCiAgICAgaWYgKCFtX3JlbmRlcmVyKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBjb25zdCBBdG9taWNTdHJpbmcmIGFjdGl2ZURl
c2NlbmRhbnRBdHRyU3RyID0gZ2V0QXR0cmlidXRlKGFyaWFfYWN0aXZlZGVzY2VuZGFudEF0dHIp
OwotICAgIGlmIChhY3RpdmVEZXNjZW5kYW50QXR0clN0ci5pc051bGwoKSB8fCBhY3RpdmVEZXNj
ZW5kYW50QXR0clN0ci5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIEVsZW1lbnQqIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAKLSAgICBFbGVtZW50KiB0YXJnZXQgPSBl
bGVtZW50LT50cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChhY3RpdmVEZXNjZW5kYW50QXR0clN0
cik7CisgICAgRWxlbWVudCogdGFyZ2V0ID0gZWxlbWVudFZhbHVlRm9yUHJvcGVydHkoQVhQcm9w
ZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQpOwogICAgIGlmICghdGFyZ2V0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJsZU5vZGUuY3BwCShyZXZpc2lvbiAyMjUzNzcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2libGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDUsNiArNDUsNyBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAg
ICAgICAgICAgICBBWFByb3BlcnR5TmFtZSBuYW1lOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBhcmlhQXR0cmlidXRlOwogICAgICAgICB9IGF0dHJpYnV0ZXNbXSA9IHsKKyAgICAgICAgICAg
IHsgQVhQcm9wZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQsIGFyaWFfYWN0aXZlZGVzY2VuZGFu
dEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkF0b21pYywgYXJpYV9hdG9t
aWNBdHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpBdXRvY29tcGxldGUsIGFy
aWFfYXV0b2NvbXBsZXRlQXR0ciB9LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6QnVz
eSwgYXJpYV9idXN5QXR0ciB9LApAQCAtNTMsNyArNTQsOSBAQCBzdGF0aWMgQVJJQUF0dHJpYnV0
ZU1hcCYgYXJpYUF0dHJpYnV0ZU1hCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpDb2xJ
bmRleCwgYXJpYV9jb2xpbmRleEF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6
OkNvbFNwYW4sIGFyaWFfY29sc3BhbkF0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9wZXJ0eU5h
bWU6OkN1cnJlbnQsIGFyaWFfY3VycmVudEF0dHIgfSwKKyAgICAgICAgICAgIHsgQVhQcm9wZXJ0
eU5hbWU6OkRldGFpbHMsIGFyaWFfZGV0YWlsc0F0dHIgfSwKICAgICAgICAgICAgIHsgQVhQcm9w
ZXJ0eU5hbWU6OkRpc2FibGVkLCBhcmlhX2Rpc2FibGVkQXR0ciB9LAorICAgICAgICAgICAgeyBB
WFByb3BlcnR5TmFtZTo6RXJyb3JNZXNzYWdlLCBhcmlhX2Vycm9ybWVzc2FnZUF0dHIgfSwKICAg
ICAgICAgICAgIHsgQVhQcm9wZXJ0eU5hbWU6OkV4cGFuZGVkLCBhcmlhX2V4cGFuZGVkQXR0ciB9
LAogICAgICAgICAgICAgeyBBWFByb3BlcnR5TmFtZTo6SGFzUG9wVXAsIGFyaWFfaGFzcG9wdXBB
dHRyIH0sCiAgICAgICAgICAgICB7IEFYUHJvcGVydHlOYW1lOjpIaWRkZW4sIGFyaWFfaGlkZGVu
QXR0ciB9LApAQCAtMTc3LDYgKzE4MCwyMyBAQCBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVG
bG9hdChBWFByb3BlCiAgICAgfQogfQogCitzdGF0aWMgYm9vbCBpc1Byb3BlcnR5VmFsdWVSZWxh
dGlvbihBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgc3dpdGNoIChwcm9wZXJ0
eU5hbWUpIHsKKyAgICBjYXNlIEFYUHJvcGVydHlOYW1lOjpBY3RpdmVEZXNjZW5kYW50OgorICAg
IGNhc2UgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHM6CisgICAgY2FzZSBBWFByb3BlcnR5TmFtZTo6
RXJyb3JNZXNzYWdlOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCitRdWFsaWZpZWROYW1lIEFjY2Vzc2libGVOb2Rl
OjphdHRyaWJ1dGVGcm9tQVhQcm9wZXJ0eU5hbWUoQVhQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1l
KQoreworICAgIHJldHVybiBhcmlhQXR0cmlidXRlTWFwKCkuZ2V0KHByb3BlcnR5TmFtZSk7Cit9
CisKIGJvb2wgQWNjZXNzaWJsZU5vZGU6Omhhc1Byb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsIEFY
UHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKIHsKICAgICBpZiAoYXV0byogYWNjZXNzaWJsZU5v
ZGUgPSBlbGVtZW50LmV4aXN0aW5nQWNjZXNzaWJsZU5vZGUoKSkgewpAQCAtMjIwLDYgKzI0MCwx
NCBAQCB2b2lkIEFjY2Vzc2libGVOb2RlOjpzZXRTdHJpbmdQcm9wZXJ0eShBCiAgICAgc2V0UHJv
cGVydHkocHJvcGVydHlOYW1lLCB2YWx1ZSwgdmFsdWUuaXNFbXB0eSgpKTsKIH0KIAordm9pZCBB
Y2Nlc3NpYmxlTm9kZTo6c2V0UmVsYXRpb25Qcm9wZXJ0eShBWFByb3BlcnR5TmFtZSBwcm9wZXJ0
eU5hbWUsIEFjY2Vzc2libGVOb2RlKiB2YWx1ZSkKK3sKKyAgICBWZWN0b3I8QWNjZXNzaWJsZU5v
ZGUqPiBhY2Nlc3NpYmxlTm9kZXM7CisgICAgaWYgKHZhbHVlKQorICAgICAgICBhY2Nlc3NpYmxl
Tm9kZXMuYXBwZW5kKHZhbHVlKTsKKyAgICBzZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIGFjY2Vz
c2libGVOb2RlcywgIXZhbHVlKTsKK30KKwogY29uc3QgU3RyaW5nIEFjY2Vzc2libGVOb2RlOjpl
ZmZlY3RpdmVTdHJpbmdWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0
eU5hbWUgcHJvcGVydHlOYW1lKQogewogICAgIGNvbnN0IFN0cmluZyYgdmFsdWUgPSBzdHJpbmdW
YWx1ZUZvclByb3BlcnR5KGVsZW1lbnQsIHByb3BlcnR5TmFtZSk7CkBAIC0zMDYsMTIgKzMzNCw2
MyBAQCBkb3VibGUgQWNjZXNzaWJsZU5vZGU6OmVmZmVjdGl2ZURvdWJsZVZhCiAgICAgcmV0dXJu
IDAuMDsKIH0KIAorQWNjZXNzaWJsZU5vZGUqIEFjY2Vzc2libGVOb2RlOjpzaW5nbGVSZWxhdGlv
blZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYgZWxlbWVudCwgQVhQcm9wZXJ0eU5hbWUgcHJvcGVy
dHlOYW1lKQoreworICAgIFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+IGFjY2Vzc2libGVOb2RlcyA9
IHJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoZWxlbWVudCwgcHJvcGVydHlOYW1lKTsKKyAgICBp
ZiAoYWNjZXNzaWJsZU5vZGVzLnNpemUoKSA9PSAxKQorICAgICAgICByZXR1cm4gYWNjZXNzaWJs
ZU5vZGVzLmZpcnN0KCk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1ZlY3RvcjxBY2Nlc3Np
YmxlTm9kZSo+IEFjY2Vzc2libGVOb2RlOjpyZWxhdGlvbnNWYWx1ZUZvclByb3BlcnR5KEVsZW1l
bnQmIGVsZW1lbnQsIEFYUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSkKK3sKKyAgICBjb25zdCBQ
cm9wZXJ0eVZhbHVlVmFyaWFudCYmIHZhcmlhbnQgPSBBY2Nlc3NpYmxlTm9kZTo6dmFsdWVGb3JQ
cm9wZXJ0eShlbGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmIChXVEY6OmhvbGRzX2FsdGVy
bmF0aXZlPFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+Pih2YXJpYW50KSkKKyAgICAgICAgcmV0dXJu
IFdURjo6Z2V0PFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+Pih2YXJpYW50KTsKKyAgICByZXR1cm4g
VmVjdG9yPEFjY2Vzc2libGVOb2RlKj4geyB9OworfQorCitWZWN0b3I8RWxlbWVudCo+IEFjY2Vz
c2libGVOb2RlOjplZmZlY3RpdmVFbGVtZW50c1ZhbHVlRm9yRWxlbWVudChFbGVtZW50JiBlbGVt
ZW50LCBBWFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUpCit7CisgICAgVmVjdG9yPEVsZW1lbnQq
PiBlbGVtZW50czsKKyAgICBhdXRvIHZhbHVlID0gcmVsYXRpb25zVmFsdWVGb3JQcm9wZXJ0eShl
bGVtZW50LCBwcm9wZXJ0eU5hbWUpOworICAgIGlmICh2YWx1ZS5zaXplKCkpIHsKKyAgICAgICAg
Zm9yIChhdXRvKiBhY2Nlc3NpYmxlTm9kZSA6IHZhbHVlKQorICAgICAgICAgICAgZWxlbWVudHMu
YXBwZW5kKCZhY2Nlc3NpYmxlTm9kZS0+bV9vd25lckVsZW1lbnQpOworICAgICAgICByZXR1cm4g
ZWxlbWVudHM7CisgICAgfQorCisgICAgaWYgKGFyaWFBdHRyaWJ1dGVNYXAoKS5jb250YWlucyhw
cm9wZXJ0eU5hbWUpICYmIGlzUHJvcGVydHlWYWx1ZVJlbGF0aW9uKHByb3BlcnR5TmFtZSkpIHsK
KyAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyU3RyID0gZWxlbWVudC5hdHRyaWJ1dGVX
aXRob3V0U3luY2hyb25pemF0aW9uKGFyaWFBdHRyaWJ1dGVNYXAoKS5nZXQocHJvcGVydHlOYW1l
KSk7CisgICAgICAgIGlmIChhdHRyU3RyLmlzTnVsbCgpIHx8IGF0dHJTdHIuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRzOworICAgICAgICBhdXRvIHNwYWNlU3BsaXRTdHJp
bmcgPSBTcGFjZVNwbGl0U3RyaW5nKGF0dHJTdHIsIGZhbHNlKTsKKyAgICAgICAgc2l6ZV90IGxl
bmd0aCA9IHNwYWNlU3BsaXRTdHJpbmcuc2l6ZSgpOworICAgICAgICBmb3IgKHNpemVfdCBpID0g
MDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogaWRFbGVtZW50ID0g
ZWxlbWVudC50cmVlU2NvcGUoKS5nZXRFbGVtZW50QnlJZChzcGFjZVNwbGl0U3RyaW5nW2ldKSkK
KyAgICAgICAgICAgICAgICBlbGVtZW50cy5hcHBlbmQoaWRFbGVtZW50KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZWxlbWVudHM7Cit9CisKIHZvaWQgQWNjZXNzaWJsZU5vZGU6Om5v
dGlmeUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgbmFtZSkK
IHsKICAgICBpZiAoQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX293bmVyRWxlbWVudC5kb2N1bWVu
dCgpLmF4T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPmhhbmRsZUF0dHJpYnV0ZUNoYW5n
ZWQobmFtZSwgJm1fb3duZXJFbGVtZW50KTsKIH0KIAorQWNjZXNzaWJsZU5vZGUqIEFjY2Vzc2li
bGVOb2RlOjphY3RpdmVEZXNjZW5kYW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlUmVs
YXRpb25WYWx1ZUZvclByb3BlcnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6QWN0
aXZlRGVzY2VuZGFudCk7Cit9CisKK3ZvaWQgQWNjZXNzaWJsZU5vZGU6OnNldEFjdGl2ZURlc2Nl
bmRhbnQoQWNjZXNzaWJsZU5vZGUqIHZhbHVlKQoreworICAgIHNldFJlbGF0aW9uUHJvcGVydHko
QVhQcm9wZXJ0eU5hbWU6OkFjdGl2ZURlc2NlbmRhbnQsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRy
aWJ1dGVDaGFuZ2VkKGFyaWFfYWN0aXZlZGVzY2VuZGFudEF0dHIpOworfQorCiBzdGQ6Om9wdGlv
bmFsPGJvb2w+IEFjY2Vzc2libGVOb2RlOjphdG9taWMoKSBjb25zdAogewogICAgIHJldHVybiBv
cHRpb25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlO
YW1lOjpBdG9taWMpOwpAQCAtNDAwLDExICs0NzksMzQgQEAgdm9pZCBBY2Nlc3NpYmxlTm9kZTo6
c2V0Q3VycmVudChjb25zdCBTdAogICAgIG5vdGlmeUF0dHJpYnV0ZUNoYW5nZWQoYXJpYV9jdXJy
ZW50QXR0cik7CiB9CiAKK0FjY2Vzc2libGVOb2RlKiBBY2Nlc3NpYmxlTm9kZTo6ZGV0YWlscygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHNpbmdsZVJlbGF0aW9uVmFsdWVGb3JQcm9wZXJ0eShtX293
bmVyRWxlbWVudCwgQVhQcm9wZXJ0eU5hbWU6OkRldGFpbHMpOworfQorCit2b2lkIEFjY2Vzc2li
bGVOb2RlOjpzZXREZXRhaWxzKEFjY2Vzc2libGVOb2RlKiB2YWx1ZSkKK3sKKyAgICBzZXRSZWxh
dGlvblByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpEZXRhaWxzLCB2YWx1ZSk7CisgICAgbm90aWZ5
QXR0cmlidXRlQ2hhbmdlZChhcmlhX2RldGFpbHNBdHRyKTsKK30KKwogc3RkOjpvcHRpb25hbDxi
b29sPiBBY2Nlc3NpYmxlTm9kZTo6ZGlzYWJsZWQoKSBjb25zdAogewogICAgIHJldHVybiBvcHRp
b25hbFZhbHVlRm9yUHJvcGVydHk8Ym9vbD4obV9vd25lckVsZW1lbnQsIEFYUHJvcGVydHlOYW1l
OjpEaXNhYmxlZCk7CiB9CiAKK0FjY2Vzc2libGVOb2RlKiBBY2Nlc3NpYmxlTm9kZTo6ZXJyb3JN
ZXNzYWdlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gc2luZ2xlUmVsYXRpb25WYWx1ZUZvclByb3Bl
cnR5KG1fb3duZXJFbGVtZW50LCBBWFByb3BlcnR5TmFtZTo6RXJyb3JNZXNzYWdlKTsKK30KKwor
dm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RXJyb3JNZXNzYWdlKEFjY2Vzc2libGVOb2RlKiB2YWx1
ZSkKK3sKKyAgICBzZXRSZWxhdGlvblByb3BlcnR5KEFYUHJvcGVydHlOYW1lOjpFcnJvck1lc3Nh
Z2UsIHZhbHVlKTsKKyAgICBub3RpZnlBdHRyaWJ1dGVDaGFuZ2VkKGFyaWFfZXJyb3JtZXNzYWdl
QXR0cik7Cit9CisKKwogdm9pZCBBY2Nlc3NpYmxlTm9kZTo6c2V0RGlzYWJsZWQoc3RkOjpvcHRp
b25hbDxib29sPiB2YWx1ZSkKIHsKICAgICBzZXRPcHRpb25hbFByb3BlcnR5PGJvb2w+KEFYUHJv
cGVydHlOYW1lOjpEaXNhYmxlZCwgdmFsdWUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaAkocmV2aXNpb24gMjI1Mzc3KQorKysgU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmxlTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiwxMCArMzYsMTEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIFZhcmlh
bnQ8c3RkOjpudWxscHRyX3QsIFN0cmluZywgYm9vbCwgaW50LCB1bnNpZ25lZCwgZG91YmxlPiBQ
cm9wZXJ0eVZhbHVlVmFyaWFudDsKK3R5cGVkZWYgVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgU3Ry
aW5nLCBib29sLCBpbnQsIHVuc2lnbmVkLCBkb3VibGUsIFZlY3RvcjxBY2Nlc3NpYmxlTm9kZSo+
PiBQcm9wZXJ0eVZhbHVlVmFyaWFudDsKIAogZW51bSBjbGFzcyBBWFByb3BlcnR5TmFtZSB7CiAg
ICAgTm9uZSwKKyAgICBBY3RpdmVEZXNjZW5kYW50LAogICAgIEF0b21pYywKICAgICBBdXRvY29t
cGxldGUsCiAgICAgQnVzeSwKQEAgLTQ4LDcgKzQ5LDkgQEAgZW51bSBjbGFzcyBBWFByb3BlcnR5
TmFtZSB7CiAgICAgQ29sSW5kZXgsCiAgICAgQ29sU3BhbiwKICAgICBDdXJyZW50LAorICAgIERl
dGFpbHMsCiAgICAgRGlzYWJsZWQsCisgICAgRXJyb3JNZXNzYWdlLAogICAgIEV4cGFuZGVkLAog
ICAgIEhhc1BvcFVwLAogICAgIEhpZGRlbiwKQEAgLTEwNSwxMyArMTA4LDIwIEBAIHB1YmxpYzoK
ICAgICB2b2lkIHJlZigpIHsgbV9vd25lckVsZW1lbnQucmVmKCk7IH0KICAgICB2b2lkIGRlcmVm
KCkgeyBtX293bmVyRWxlbWVudC5kZXJlZigpOyB9CiAKKyAgICBzdGF0aWMgUXVhbGlmaWVkTmFt
ZSBhdHRyaWJ1dGVGcm9tQVhQcm9wZXJ0eU5hbWUoQVhQcm9wZXJ0eU5hbWUpOworCiAgICAgc3Rh
dGljIGNvbnN0IFN0cmluZyBlZmZlY3RpdmVTdHJpbmdWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYs
IEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgc3RkOjpvcHRpb25hbDxib29sPiBlZmZlY3Rp
dmVCb29sVmFsdWVGb3JFbGVtZW50KEVsZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7CiAgICAgc3Rh
dGljIGludCBlZmZlY3RpdmVJbnRWYWx1ZUZvckVsZW1lbnQoRWxlbWVudCYsIEFYUHJvcGVydHlO
YW1lKTsKICAgICBzdGF0aWMgdW5zaWduZWQgZWZmZWN0aXZlVW5zaWduZWRWYWx1ZUZvckVsZW1l
bnQoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICBzdGF0aWMgZG91YmxlIGVmZmVjdGl2
ZURvdWJsZVZhbHVlRm9yRWxlbWVudChFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOworICAgIHN0
YXRpYyBWZWN0b3I8RWxlbWVudCo+IGVmZmVjdGl2ZUVsZW1lbnRzVmFsdWVGb3JFbGVtZW50KEVs
ZW1lbnQmLCBBWFByb3BlcnR5TmFtZSk7CisgICAgc3RhdGljIFZlY3RvcjxBY2Nlc3NpYmxlTm9k
ZSo+IHJlbGF0aW9uc1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1lKTsK
ICAgICBzdGF0aWMgYm9vbCBoYXNQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwog
CisgICAgQWNjZXNzaWJsZU5vZGUqIGFjdGl2ZURlc2NlbmRhbnQoKSBjb25zdDsKKyAgICB2b2lk
IHNldEFjdGl2ZURlc2NlbmRhbnQoQWNjZXNzaWJsZU5vZGUqKTsKKwogICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gYXRvbWljKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRBdG9taWMoc3RkOjpvcHRpb25h
bDxib29sPik7CiAgICAgCkBAIC0xMzYsOSArMTQ2LDE1IEBAIHB1YmxpYzoKICAgICBTdHJpbmcg
Y3VycmVudCgpIGNvbnN0OwogICAgIHZvaWQgc2V0Q3VycmVudChjb25zdCBTdHJpbmcmKTsKIAor
ICAgIEFjY2Vzc2libGVOb2RlKiBkZXRhaWxzKCkgY29uc3Q7CisgICAgdm9pZCBzZXREZXRhaWxz
KEFjY2Vzc2libGVOb2RlKik7CisKICAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGRpc2FibGVkKCkg
Y29uc3Q7CiAgICAgdm9pZCBzZXREaXNhYmxlZChzdGQ6Om9wdGlvbmFsPGJvb2w+KTsKIAorICAg
IEFjY2Vzc2libGVOb2RlKiBlcnJvck1lc3NhZ2UoKSBjb25zdDsKKyAgICB2b2lkIHNldEVycm9y
TWVzc2FnZShBY2Nlc3NpYmxlTm9kZSopOworCiAgICAgc3RkOjpvcHRpb25hbDxib29sPiBleHBh
bmRlZCgpIGNvbnN0OwogICAgIHZvaWQgc2V0RXhwYW5kZWQoc3RkOjpvcHRpb25hbDxib29sPik7
CiAKQEAgLTIzMywxMCArMjQ5LDEyIEBAIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IFByb3Bl
cnR5VmFsdWVWYXJpYW50IHZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVydHlOYW1l
KTsKICAgICBzdGF0aWMgY29uc3QgU3RyaW5nIHN0cmluZ1ZhbHVlRm9yUHJvcGVydHkoRWxlbWVu
dCYsIEFYUHJvcGVydHlOYW1lKTsKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgc3Rk
OjpvcHRpb25hbDxUPiBvcHRpb25hbFZhbHVlRm9yUHJvcGVydHkoRWxlbWVudCYsIEFYUHJvcGVy
dHlOYW1lKTsKKyAgICBzdGF0aWMgQWNjZXNzaWJsZU5vZGUqIHNpbmdsZVJlbGF0aW9uVmFsdWVG
b3JQcm9wZXJ0eShFbGVtZW50JiwgQVhQcm9wZXJ0eU5hbWUpOwogICAgIAogICAgIHZvaWQgc2V0
UHJvcGVydHkoQVhQcm9wZXJ0eU5hbWUsIFByb3BlcnR5VmFsdWVWYXJpYW50JiYsIGJvb2wpOwog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHZvaWQgc2V0T3B0aW9uYWxQcm9wZXJ0eShBWFByb3Bl
cnR5TmFtZSwgc3RkOjpvcHRpb25hbDxUPik7CiAgICAgdm9pZCBzZXRTdHJpbmdQcm9wZXJ0eShB
WFByb3BlcnR5TmFtZSwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRSZWxhdGlvblByb3Bl
cnR5KEFYUHJvcGVydHlOYW1lLCBBY2Nlc3NpYmxlTm9kZSopOwogICAgIAogICAgIHZvaWQgbm90
aWZ5QXR0cmlidXRlQ2hhbmdlZChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJik7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRsCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJsZU5vZGUuaWRs
CShyZXZpc2lvbiAyMjUzNzcpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vz
c2libGVOb2RlLmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjcsNiArMjcsNyBAQAogICAgIFNraXBW
VGFibGVWYWxpZGF0aW9uLAogICAgIEVuYWJsZWRBdFJ1bnRpbWU9QWNjZXNzaWJpbGl0eU9iamVj
dE1vZGVsLAogXSBpbnRlcmZhY2UgQWNjZXNzaWJsZU5vZGUgeworICAgIGF0dHJpYnV0ZSBBY2Nl
c3NpYmxlTm9kZT8gYWN0aXZlRGVzY2VuZGFudDsKICAgICBhdHRyaWJ1dGUgYm9vbGVhbj8gYXRv
bWljOwogICAgIGF0dHJpYnV0ZSBET01TdHJpbmc/IGF1dG9jb21wbGV0ZTsKICAgICBhdHRyaWJ1
dGUgYm9vbGVhbj8gYnVzeTsKQEAgLTM1LDcgKzM2LDkgQEAKICAgICBhdHRyaWJ1dGUgdW5zaWdu
ZWQgbG9uZz8gY29sSW5kZXg7CiAgICAgYXR0cmlidXRlIHVuc2lnbmVkIGxvbmc/IGNvbFNwYW47
CiAgICAgYXR0cmlidXRlIERPTVN0cmluZz8gY3VycmVudDsKKyAgICBhdHRyaWJ1dGUgQWNjZXNz
aWJsZU5vZGU/IGRldGFpbHM7CiAgICAgYXR0cmlidXRlIGJvb2xlYW4/IGRpc2FibGVkOworICAg
IGF0dHJpYnV0ZSBBY2Nlc3NpYmxlTm9kZT8gZXJyb3JNZXNzYWdlOwogICAgIGF0dHJpYnV0ZSBi
b29sZWFuPyBleHBhbmRlZDsKICAgICBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBoYXNQb3BVcDsKICAg
ICBhdHRyaWJ1dGUgYm9vbGVhbj8gaGlkZGVuOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJNYWMubW0JKHJldmlzaW9uIDIyNTM3NykKKysrIFNvdXJjZS9XZWJDb3JlL2Fj
Y2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAyLDYgKzMyMDIsMjEgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJp
YnV0ZVZhbHVlOihOU1N0cgogICAgIGlmIChbYXR0cmlidXRlTmFtZSBpc0VxdWFsVG9TdHJpbmc6
QCJBWFJlYWRPbmx5VmFsdWUiXSkKICAgICAgICAgcmV0dXJuIG1fb2JqZWN0LT5yZWFkT25seVZh
bHVlKCk7CiAKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3RyaW5nOkAiQVhJc0Fj
dGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXIiXSkKKyAgICAgICAgcmV0dXJuIFtOU051
bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+aXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2Vk
Q29udGFpbmVyKCldOworCisgICAgaWYgKFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0cmluZzpA
IkFYRGV0YWlsc0VsZW1lbnRzIl0pIHsKKyAgICAgICAgQWNjZXNzaWJpbGl0eU9iamVjdDo6QWNj
ZXNzaWJpbGl0eUNoaWxkcmVuVmVjdG9yIGRldGFpbHM7CisgICAgICAgIG1fb2JqZWN0LT5hcmlh
RGV0YWlsc0VsZW1lbnRzKGRldGFpbHMpOworICAgICAgICByZXR1cm4gY29udmVydFRvTlNBcnJh
eShkZXRhaWxzKTsKKyAgICB9CisKKyAgICBpZiAoW2F0dHJpYnV0ZU5hbWUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhFcnJvck1lc3NhZ2VFbGVtZW50cyJdKSB7CisgICAgICAgIEFjY2Vzc2liaWxpdHlP
YmplY3Q6OkFjY2Vzc2liaWxpdHlDaGlsZHJlblZlY3RvciBlcnJvck1lc3NhZ2VzOworICAgICAg
ICBtX29iamVjdC0+YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzKGVycm9yTWVzc2FnZXMpOworICAg
ICAgICByZXR1cm4gY29udmVydFRvTlNBcnJheShlcnJvck1lc3NhZ2VzKTsKKyAgICB9CisKICAg
ICBpZiAobV9vYmplY3QtPmlzV2ViQXJlYSgpICYmIFthdHRyaWJ1dGVOYW1lIGlzRXF1YWxUb1N0
cmluZzpOU0FjY2Vzc2liaWxpdHlQcmV2ZW50S2V5Ym9hcmRET01FdmVudERpc3BhdGNoQXR0cmli
dXRlXSkKICAgICAgICAgcmV0dXJuIFtOU051bWJlciBudW1iZXJXaXRoQm9vbDptX29iamVjdC0+
cHJldmVudEtleWJvYXJkRE9NRXZlbnREaXNwYXRjaCgpXTsKICAgICAKSW5kZXg6IFRvb2xzL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyNTM3NykK
KysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDE3
LTExLTMwICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEFPTTog
SW1wbGVtZW50IHJlbGF0aW9uIHR5cGUgcHJvcGVydGllcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc5NTAwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6YXJpYURldGFpbHNFbGVtZW50QXRJbmRleCk6CisgICAgICAgIChXVFI6OkFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50QXRJbmRleCk6Cisg
ICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXNjcmliZWRCeVJlZmVy
ZW5jaW5nRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjphcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgpOgorICAgICAgICAqIFdl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRN
YWMubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXRhaWxz
RWxlbWVudEF0SW5kZXgpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojph
cmlhRXJyb3JNZXNzYWdlRWxlbWVudEF0SW5kZXgpOgorCiAyMDE3LTExLTMwICBTdGVwaGFuIFN6
YWJvICA8c3RlcGhhbi5zemFib0Bzb255LmNvbT4KIAogICAgICAgICBNYWtlIExlZ2FjeUN1c3Rv
bVByb3RvY29sTWFuYWdlciBvcHRpb25hbCBmb3IgbmV0d29yayBwcm9jZXNzCkluZGV4OiBUb29s
cy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMjI1Mzc3KQorKysgVG9vbHMvV2ViS2l0
VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTE5NSw2ICsxOTUsMTQgQEAgcHVibGljOgogICAgIFJlZlB0cjxBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50PiBhcmlhT3duc0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKICAgICBS
ZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUZsb3dUb0VsZW1lbnRBdEluZGV4KHVu
c2lnbmVkKTsKICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUNvbnRyb2xz
RWxlbWVudEF0SW5kZXgodW5zaWduZWQpOworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0o
R1RLKQorICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBhcmlhRGV0YWlsc0VsZW1l
bnRBdEluZGV4KHVuc2lnbmVkKTsKKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKKyNlbHNlCisgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgodW5z
aWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxl
bWVudD4gYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBu
dWxscHRyOyB9CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKEdUSykKICAgICBSZWZQdHI8QWNjZXNz
aWJpbGl0eVVJRWxlbWVudD4gYXJpYUxhYmVsbGVkQnlFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7
CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXNjcmliZWRCeUVsZW1l
bnRBdEluZGV4KHVuc2lnbmVkKTsKQEAgLTIwMyw5ICsyMTEsNyBAQCBwdWJsaWM6CiAgICAgUmVm
UHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFDb250cm9sc1JlZmVyZW5jaW5nRWxlbWVu
dEF0SW5kZXgodW5zaWduZWQpOwogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBh
cmlhTGFiZWxsZWRCeVJlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpOwogICAgIFJl
ZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBhcmlhRGVzY3JpYmVkQnlSZWZlcmVuY2luZ0Vs
ZW1lbnRBdEluZGV4KHVuc2lnbmVkKTsKLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVu
dD4gYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CiAgICAgUmVmUHRyPEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXRhaWxzUmVmZXJlbmNpbmdFbGVtZW50QXRJbmRleCh1
bnNpZ25lZCk7Ci0gICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFFcnJvck1l
c3NhZ2VFbGVtZW50QXRJbmRleCh1bnNpZ25lZCk7CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ+IGFyaWFFcnJvck1lc3NhZ2VSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2ln
bmVkKTsKICNlbHNlCiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFMYWJl
bGxlZEJ5RWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KQEAgLTIx
NSw5ICsyMjEsNyBAQCBwdWJsaWM6CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IGFyaWFDb250cm9sc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJu
IG51bGxwdHI7IH0KICAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYUxhYmVs
bGVkQnlSZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFEZXNjcmliZWRCeVJl
ZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQpIHsgcmV0dXJuIG51bGxwdHI7IH0KLSAg
ICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4gYXJpYURldGFpbHNFbGVtZW50QXRJbmRl
eCh1bnNpZ25lZCkgeyByZXR1cm4gbnVsbHB0cjsgfQogICAgIFJlZlB0cjxBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50PiBhcmlhRGV0YWlsc1JlZmVyZW5jaW5nRWxlbWVudEF0SW5kZXgodW5zaWduZWQp
IHsgcmV0dXJuIG51bGxwdHI7IH0KLSAgICBSZWZQdHI8QWNjZXNzaWJpbGl0eVVJRWxlbWVudD4g
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRy
OyB9CiAgICAgUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IGFyaWFFcnJvck1lc3NhZ2VS
ZWZlcmVuY2luZ0VsZW1lbnRBdEluZGV4KHVuc2lnbmVkKSB7IHJldHVybiBudWxscHRyOyB9CiAj
ZW5kaWYKIApJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRU
ZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1t
CShyZXZpc2lvbiAyMjUzNzcpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVu
ZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00
MTcsNiArNDE3LDI2IEBAIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBBY2Nlc3NpYmkK
ICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+
IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmFyaWFEZXRhaWxzRWxlbWVudEF0SW5kZXgodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgTlNBcnJheSog
ZGV0YWlscyA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhEZXRh
aWxzRWxlbWVudHMiXTsKKyAgICBpZiAoaW5kZXggPCBbZGV0YWlscyBjb3VudF0pCisgICAgICAg
IHJldHVybiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpjcmVhdGUoW2RldGFpbHMgb2JqZWN0QXRJ
bmRleDppbmRleF0pOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworUmVmUHRyPEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ+IEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OmFyaWFFcnJvck1lc3NhZ2VFbGVtZW50QXRJbmRleCh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBOU0FycmF5KiBlcnJvck1lc3Nh
Z2VzID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWEVycm9yTWVz
c2FnZUVsZW1lbnRzIl07CisgICAgaWYgKGluZGV4IDwgW2Vycm9yTWVzc2FnZXMgY291bnRdKQor
ICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Y3JlYXRlKFtlcnJvck1lc3Nh
Z2VzIG9iamVjdEF0SW5kZXg6aW5kZXhdKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIFJlZlB0cjxBY2Nlc3NpYmlsaXR5VUlFbGVtZW50PiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpkaXNjbG9zZWRSb3dBdEluZGV4KHVuc2lnbmVkIGluZGV4
KQogewogICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjI1
Mzc3KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTYgQEAKKzIwMTctMTEtMzAgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAg
ICBBWDogQU9NOiBJbXBsZW1lbnQgcmVsYXRpb24gdHlwZSBwcm9wZXJ0aWVzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk1MDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBPbmx5IGVuYWJsZSB0aGlzIHRl
c3Qgb24gV0syLgorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9uLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMv
QU9NLXJlbGF0aW9uLXByb3BlcnR5Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy13azEvVGVzdEV4cGVjdGF0aW9uczoKKwogMjAxNy0xMS0zMCAgU2ltb24gRnJhc2VyICA8c2lt
b24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBJbXByb3ZlIGZpbHRlciBsb2dnaW5nCklu
ZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy9BT00tcmVsYXRpb24tcHJvcGVydHkt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFj
L0FPTS1yZWxhdGlvbi1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5
b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9uLXByb3BlcnR5LWV4cGVjdGVk
LnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3IEBACitNZW51IGl0ZW0gMQorTWVudSBp
dGVtIDIKKworSW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLgorVGhpcyB0ZXN0cyByZWxhdGlv
biB0eXBlIEFjY2Vzc2liaWxpdHkgT2JqZWN0IE1vZGVsIHByb3BlcnRpZXMuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCisKK0FjdGl2ZURlc2NlbmRhbnQgc3VwcG9ydAorUEFTUyBh
eFJlbGF0aW9uLmlzU2VsZWN0ZWQgaXMgZmFsc2UKK1BBU1MgYXhSZWxhdGlvbi5pc1NlbGVjdGVk
IGlzIHRydWUKK1BBU1MgYXhSZWxhdGlvbi5ib29sQXR0cmlidXRlVmFsdWUoJ0FYSXNBY3RpdmVE
ZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyJykgaXMgZmFsc2UKK1BBU1MgYXhSZWxhdGlvbi5i
b29sQXR0cmlidXRlVmFsdWUoJ0FYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVy
JykgaXMgdHJ1ZQorUEFTUyBheFJlbGF0aW9uLmJvb2xBdHRyaWJ1dGVWYWx1ZSgnQVhJc0FjdGl2
ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWluZXInKSBpcyBmYWxzZQorUEFTUyBheFJlbGF0aW9u
LmJvb2xBdHRyaWJ1dGVWYWx1ZSgnQVhJc0FjdGl2ZURlc2NlbmRhbnRPZkZvY3VzZWRDb250YWlu
ZXInKSBpcyB0cnVlCisKK0RldGFpbHMgc3VwcG9ydAorUEFTUyBheE5vZGUuYXJpYURldGFpbHNF
bGVtZW50QXRJbmRleCgwKSBpcyBudWxsCitQQVNTIGF4Tm9kZS5hcmlhRGV0YWlsc0VsZW1lbnRB
dEluZGV4KDApLmNoaWxkQXRJbmRleCgwKS5zdHJpbmdWYWx1ZSBpcyAiQVhWYWx1ZTogRGV0YWls
ZWQgZGVzY3JpcHRpdmUgaW5mb3JtYXRpb24uIgorUEFTUyBheE5vZGUuYXJpYURldGFpbHNFbGVt
ZW50QXRJbmRleCgwKSBpcyBudWxsCisKK0Vycm9yTWVzc2FnZSBzdXBwb3J0CitQQVNTIGF4Tm9k
ZS5hcmlhRXJyb3JNZXNzYWdlRWxlbWVudEF0SW5kZXgoMCkgaXMgbnVsbAorUEFTUyBheE5vZGUu
YXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KDApLmNoaWxkQXRJbmRleCgwKS5zdHJpbmdW
YWx1ZSBpcyAiQVhWYWx1ZTogSW5mb3JtYXRpb24gYWJvdXQgdGhlIGVycm9yLiIKKwpJbmRleDog
TGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9uLXByb3BlcnR5Lmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvQU9NLXJlbGF0aW9u
LXByb3BlcnR5Lmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvQU9NLXJlbGF0aW9uLXByb3BlcnR5Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NyBAQAorPCFET0NUWVBFIEhUTUw+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2FjY2Vzc2liaWxpdHktaGVscGVyLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorCis8ZGl2IGlkPSJtZW51IiByb2xlPSJtZW51IiBhcmlhLWxhYmVsPSJGaXJzdCBt
ZW51IiB0YWJpbmRleD0iLTEiPgorPGRpdiByb2xlPSJtZW51aXRlbSIgaWQ9Iml0ZW0xIiBhcmlh
LWxhYmVsPSJpdGVtIDEiIHRhYmluZGV4PSItMSI+TWVudSBpdGVtIDE8L2Rpdj4KKzxkaXYgcm9s
ZT0ibWVudWl0ZW0iIGlkPSJpdGVtMiIgYXJpYS1sYWJlbD0iaXRlbSAyIiB0YWJpbmRleD0iMCI+
TWVudSBpdGVtIDI8L2Rpdj4KKzwvZGl2PgorCis8aW5wdXQgaWQ9ImlucHV0Ij4KKzxkaXYgaWQ9
ImRldGFpbHMiPkRldGFpbGVkIGRlc2NyaXB0aXZlIGluZm9ybWF0aW9uLjwvZGl2PgorPGRpdiBp
ZD0iZXJyb3IiPkluZm9ybWF0aW9uIGFib3V0IHRoZSBlcnJvci48L2Rpdj4KKworPHAgaWQ9ImRl
c2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKyAg
ICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0cyByZWxhdGlvbiB0eXBlIEFjY2Vzc2liaWxpdHkgT2Jq
ZWN0IE1vZGVsIHByb3BlcnRpZXMuIik7CisgICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlcikgeworICAgICAgICB2YXIgbm9kZTsKKyAgICAgICAgdmFyIGF4Tm9kZTsKKyAgICAg
ICAgdmFyIHJlbGF0aW9uOworICAgICAgICB2YXIgYXhSZWxhdGlvbjsKKworICAgICAgICB0ZXN0
QWN0aXZlRGVzY2VuZGFudCgpOworICAgICAgICB0ZXN0RGV0YWlscygpOworICAgICAgICB0ZXN0
RXJyb3JNZXNzYWdlKCk7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEFjdGl2ZURlc2NlbmRh
bnQoKSB7CisgICAgICAgIGRlYnVnKCJcbkFjdGl2ZURlc2NlbmRhbnQgc3VwcG9ydCIpOworICAg
ICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lbnUiKTsKKyAgICAgICAgYXhO
b2RlID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJtZW51
Iik7CisgICAgICAgIHJlbGF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIml0ZW0xIik7
CisgICAgICAgIGF4UmVsYXRpb24gPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxl
RWxlbWVudEJ5SWQoIml0ZW0xIik7CisKKyAgICAgICAgLy8gQWN0aXZlIERlc2NlbmRhbnQgbWFr
ZXMgdGhlIE1lbnUgaXRlbSBzZWxlY3RlZC4gCisgICAgICAgIHNob3VsZEJlRmFsc2UoImF4UmVs
YXRpb24uaXNTZWxlY3RlZCIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmFjdGl2ZURl
c2NlbmRhbnQgPSByZWxhdGlvbi5hY2Nlc3NpYmxlTm9kZTsKKyAgICAgICAgc2hvdWxkQmVUcnVl
KCJheFJlbGF0aW9uLmlzU2VsZWN0ZWQiKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRlc3QgdGhh
dCB3ZSBhcmUgYWJsZSB0byBnZXQgdGhlIHJpZ2h0IGNvbnRhaW5lci4KKyAgICAgICAgc2hvdWxk
QmVGYWxzZSgiYXhSZWxhdGlvbi5ib29sQXR0cmlidXRlVmFsdWUoJ0FYSXNBY3RpdmVEZXNjZW5k
YW50T2ZGb2N1c2VkQ29udGFpbmVyJykiKTsKKyAgICAgICAgbm9kZS5mb2N1cygpOworICAgICAg
ICBzaG91bGRCZVRydWUoImF4UmVsYXRpb24uYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWElzQWN0aXZl
RGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcicpIik7CisgICAgICAgIAorICAgICAgICAvLyBN
YWtlIHN1cmUgaXQgZmFsbHMgYmFjayB0byBBUklBIGF0dHJpYnV0ZSBpZiBBT00gcHJvcGVydHkg
aXMgbm90IHNldC4KKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5hY3RpdmVEZXNjZW5kYW50
ID0gbnVsbDsKKyAgICAgICAgc2hvdWxkQmVGYWxzZSgiYXhSZWxhdGlvbi5ib29sQXR0cmlidXRl
VmFsdWUoJ0FYSXNBY3RpdmVEZXNjZW5kYW50T2ZGb2N1c2VkQ29udGFpbmVyJykiKTsKKyAgICAg
ICAgbm9kZS5zZXRBdHRyaWJ1dGUoImFyaWEtYWN0aXZlZGVzY2VuZGFudCIsICJpdGVtMSIpOwor
ICAgICAgICBzaG91bGRCZVRydWUoImF4UmVsYXRpb24uYm9vbEF0dHJpYnV0ZVZhbHVlKCdBWElz
QWN0aXZlRGVzY2VuZGFudE9mRm9jdXNlZENvbnRhaW5lcicpIik7CisgICAgfQorCisgICAgZnVu
Y3Rpb24gdGVzdERldGFpbHMoKSB7CisgICAgICAgIGRlYnVnKCJcbkRldGFpbHMgc3VwcG9ydCIp
OworICAgICAgICBub2RlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImlucHV0Iik7CisgICAg
ICAgIGF4Tm9kZSA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJ
ZCgiaW5wdXQiKTsKKyAgICAgICAgcmVsYXRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
ZGV0YWlscyIpOworICAgICAgICAKKyAgICAgICAgc2hvdWxkQmVOdWxsKCJheE5vZGUuYXJpYURl
dGFpbHNFbGVtZW50QXRJbmRleCgwKSIpOworICAgICAgICBub2RlLmFjY2Vzc2libGVOb2RlLmRl
dGFpbHMgPSByZWxhdGlvbi5hY2Nlc3NpYmxlTm9kZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRv
U3RyaW5nKCJheE5vZGUuYXJpYURldGFpbHNFbGVtZW50QXRJbmRleCgwKS5jaGlsZEF0SW5kZXgo
MCkuc3RyaW5nVmFsdWUiLCAiQVhWYWx1ZTogRGV0YWlsZWQgZGVzY3JpcHRpdmUgaW5mb3JtYXRp
b24uIik7CisgICAgICAgIAorICAgICAgICAvLyBUZXN0IHJlbW92aW5nIHRoZSBkZXRhaWxzIGVs
ZW1lbnQuCisgICAgICAgIHJlbGF0aW9uLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQocmVsYXRp
b24pOworICAgICAgICBzaG91bGRCZU51bGwoImF4Tm9kZS5hcmlhRGV0YWlsc0VsZW1lbnRBdElu
ZGV4KDApIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gdGVzdEVycm9yTWVzc2FnZSgpIHsKKyAg
ICAgICAgZGVidWcoIlxuRXJyb3JNZXNzYWdlIHN1cHBvcnQiKTsKKyAgICAgICAgbm9kZSA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJpbnB1dCIpOworICAgICAgICBheE5vZGUgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoImlucHV0Iik7CisgICAgICAg
IHJlbGF0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImVycm9yIik7CisgICAgICAgIAor
ICAgICAgICBzaG91bGRCZU51bGwoImF4Tm9kZS5hcmlhRXJyb3JNZXNzYWdlRWxlbWVudEF0SW5k
ZXgoMCkiKTsKKyAgICAgICAgbm9kZS5hY2Nlc3NpYmxlTm9kZS5lcnJvck1lc3NhZ2UgPSByZWxh
dGlvbi5hY2Nlc3NpYmxlTm9kZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJheE5v
ZGUuYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRBdEluZGV4KDApLmNoaWxkQXRJbmRleCgwKS5zdHJp
bmdWYWx1ZSIsICJBWFZhbHVlOiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgZXJyb3IuIik7CisgICAg
fQorCis8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3Jt
L21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0
Zm9ybS9tYWMtd2sxL1Rlc3RFeHBlY3RhdGlvbnMJKHJldmlzaW9uIDIyNTM3NykKKysrIExheW91
dFRlc3RzL3BsYXRmb3JtL21hYy13azEvVGVzdEV4cGVjdGF0aW9ucwkod29ya2luZyBjb3B5KQpA
QCAtNDcwLDMgKzQ3MCw1IEBAIHdlYmtpdC5vcmcvYi8xNzc1NjMgWyBIaWdoU2llcnJhIF0gaHR0
cC8KIHdlYmtpdC5vcmcvYi8xNzIzOTcgWyBEZWJ1ZyBdIGFuaW1hdGlvbnMvbmVlZHMtbGF5b3V0
Lmh0bWwgWyBQYXNzIEltYWdlT25seUZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMTc5Nzc1IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvWE1MSHR0cFJlcXVlc3QvZmlyaW5nLWV2ZW50
cy1odHRwLW5vLWNvbnRlbnQtbGVuZ3RoLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQorCit3ZWJraXQu
b3JnL2IvMTc5NTAwIGFjY2Vzc2liaWxpdHkvbWFjL0FPTS1yZWxhdGlvbi1wcm9wZXJ0eS5odG1s
IFsgU2tpcCBdCg==
</data>
<flag name="review"
          id="347293"
          type_id="1"
          status="+"
          setter="rniwa"
    />
          </attachment>
      

    </bug>

</bugzilla>