<?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>154098</bug_id>
          
          <creation_ts>2016-02-10 17:00:37 -0800</creation_ts>
          <short_desc>AX: Implement paragraph related text marker functions using TextIterator</short_desc>
          <delta_ts>2016-02-12 21:24:27 -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>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Nan Wang">n_wang</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>commit-queue</cc>
    
    <cc>n_wang</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1163675</commentid>
    <comment_count>0</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-10 17:00:37 -0800</bug_when>
    <thetext>Improve accessibility text navigation.
Change the paragraph related text marker calls to use TextIterator.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163676</commentid>
    <comment_count>1</comment_count>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-10 17:00:51 -0800</bug_when>
    <thetext>&lt;rdar://problem/24269675&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163681</commentid>
    <comment_count>2</comment_count>
      <attachid>271040</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-10 17:16:40 -0800</bug_when>
    <thetext>Created attachment 271040
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163686</commentid>
    <comment_count>3</comment_count>
      <attachid>271042</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-10 18:10:34 -0800</bug_when>
    <thetext>Created attachment 271042
patch

Implemented the FIXME issue from the last word related patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163780</commentid>
    <comment_count>4</comment_count>
      <attachid>271042</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-02-11 10:25:32 -0800</bug_when>
    <thetext>Comment on attachment 271042
patch

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

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1882
&gt; +    // Sometimes a text node&apos;s character count doesn&apos;t include characters before a line break,

do you have a test for this case?

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2177
&gt; +        return characterOffsetForNodeAndOffset(*node, offset, false, false);

we should add enums for these two bool parameters so its clear in the code why you&apos;re passing what you&apos;re passing

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2201
&gt; +    return endCharacterOffsetOfParagraph(next);

can nextCharacterOffset and endCharacterOffsetOfParagraph hand the isNull() case so that this method can be collapsed to

return endCharacterOffsetOfParagraph(nextCharacterOffset(characterOffset))

&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2214
&gt; +    return startCharacterOffsetOfParagraph(previous);

ditto

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2434
&gt; +        textMarker = [self nextMarkerForCharacterOffset:next];

i feel like this recursive formulation wastes cycles, because at the minimum it has to pull the axObjectCache() each time

can we write this like

while (textMarker &amp;&amp; textMarker.isIgnored)
   characterOffset = cache-&gt;nextCharacterOffset(characterOffset)
   textMarker = [self nextMarkerForCharacterOffset: characterOffset];

&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2446
&gt; +        textMarker = [self previousMarkerForCharacterOffset:previous];

ditto

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:851
&gt; +        textMarker = nextTextMarkerForCharacterOffset(cache, next);

looks like we have basically the same code in iOS and Mac. Can you put this in the Base object

&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:863
&gt; +        textMarker = previousTextMarkerForCharacterOffset(cache, previous);

ditto

&gt; LayoutTests/accessibility/mac/text-marker-paragraph-nav.html:12
&gt; +&lt;div id=&quot;text1&quot; tabindex=&quot;0&quot;&gt;

can you also add a test that does something like

&lt;div&gt;this is my first paragraph. Of text. it has some text.&lt;br&gt;&lt;br&gt;
this is my second paragraph. Of text. it has some text.&lt;br&gt;
this is my second paragraph. Of text. it has some text.&lt;br&gt;&lt;br&gt;
&lt;/div&gt;

and verify you get the right start for each one</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1163782</commentid>
    <comment_count>5</comment_count>
      <attachid>271042</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-11 10:32:36 -0800</bug_when>
    <thetext>Comment on attachment 271042
patch

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

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:1882
&gt;&gt; +    // Sometimes a text node&apos;s character count doesn&apos;t include characters before a line break,
&gt; 
&gt; do you have a test for this case?

Yes, it&apos;s covered in the test.

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2177
&gt;&gt; +        return characterOffsetForNodeAndOffset(*node, offset, false, false);
&gt; 
&gt; we should add enums for these two bool parameters so its clear in the code why you&apos;re passing what you&apos;re passing

Ok

&gt;&gt; Source/WebCore/accessibility/AXObjectCache.cpp:2201
&gt;&gt; +    return endCharacterOffsetOfParagraph(next);
&gt; 
&gt; can nextCharacterOffset and endCharacterOffsetOfParagraph hand the isNull() case so that this method can be collapsed to
&gt; 
&gt; return endCharacterOffsetOfParagraph(nextCharacterOffset(characterOffset))

Ok

&gt;&gt; Source/WebCore/accessibility/ios/WebAccessibilityObjectWrapperIOS.mm:2434
&gt;&gt; +        textMarker = [self nextMarkerForCharacterOffset:next];
&gt; 
&gt; i feel like this recursive formulation wastes cycles, because at the minimum it has to pull the axObjectCache() each time
&gt; 
&gt; can we write this like
&gt; 
&gt; while (textMarker &amp;&amp; textMarker.isIgnored)
&gt;    characterOffset = cache-&gt;nextCharacterOffset(characterOffset)
&gt;    textMarker = [self nextMarkerForCharacterOffset: characterOffset];

Ok

&gt;&gt; Source/WebCore/accessibility/mac/WebAccessibilityObjectWrapperMac.mm:851
&gt;&gt; +        textMarker = nextTextMarkerForCharacterOffset(cache, next);
&gt; 
&gt; looks like we have basically the same code in iOS and Mac. Can you put this in the Base object

The problem is that iOS and Mac don&apos;t use the same TextMarker wrapper, I&apos;ll try to figure something out.

&gt;&gt; LayoutTests/accessibility/mac/text-marker-paragraph-nav.html:12
&gt;&gt; +&lt;div id=&quot;text1&quot; tabindex=&quot;0&quot;&gt;
&gt; 
&gt; can you also add a test that does something like
&gt; 
&gt; &lt;div&gt;this is my first paragraph. Of text. it has some text.&lt;br&gt;&lt;br&gt;
&gt; this is my second paragraph. Of text. it has some text.&lt;br&gt;
&gt; this is my second paragraph. Of text. it has some text.&lt;br&gt;&lt;br&gt;
&gt; &lt;/div&gt;
&gt; 
&gt; and verify you get the right start for each one

Ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164393</commentid>
    <comment_count>6</comment_count>
      <attachid>271236</attachid>
    <who name="Nan Wang">n_wang</who>
    <bug_when>2016-02-12 15:37:19 -0800</bug_when>
    <thetext>Created attachment 271236
patch

- review comments.
- found and fixed an issue where we could&apos;t walk through a text node by character if there&apos;s line breaks in it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164486</commentid>
    <comment_count>7</comment_count>
      <attachid>271236</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 21:24:25 -0800</bug_when>
    <thetext>Comment on attachment 271236
patch

Clearing flags on attachment: 271236

Committed r196546: &lt;http://trac.webkit.org/changeset/196546&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1164487</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-12 21:24:27 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271040</attachid>
            <date>2016-02-10 17:16:40 -0800</date>
            <delta_ts>2016-02-10 18:10:34 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>61317</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTEwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBwYXJhZ3JhcGgg
cmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgdXNpbmcgVGV4dEl0ZXJhdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwOTgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0MjY5Njc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzaW5nIENoYXJhY3Rlck9mZnNldCB0byBpbXBsZW1lbnQgcGFy
YWdyYXBoIHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMuIFJldXNlZAorICAgICAgICBsb2dpYyBm
cm9tIFZpc2libGVVbml0cyBjbGFzcy4gQWxzbyByZWZhY3RvcmVkIHRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQgbWV0aG9kCisgICAgICAgIHRvIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UuCisK
KyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5h
di5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZv
ckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0
TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0
V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuZENoYXJh
Y3Rlck9mZnNldE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c1dvcmRTdGFydENoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpwcmV2aW91c1dvcmRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpuZXh0UGFyYWdyYXBoRW5kQ2hhcmFj
dGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUGFy
YWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6cmVtYWlu
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6aXNOdWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6aXNFcXVhbCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAg
ICgrW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zm
c2V0OmNhY2hlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBu
ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbToKKyAgICAgICAgKHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UpOgorICAgICAgICAo
bmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAocHJldmlvdXNUZXh0
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzVGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKHRleHRNYXJrZXJG
b3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBuZXh0VGV4dE1hcmtlckZvck5vZGU6
b2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBwcmV2aW91c1RleHRNYXJrZXJGb3JOb2RlOm9mZnNldDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlckZvck5vZGU6b2Zm
c2V0Omlnbm9yZVN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yTm9kZTpvZmZzZXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNl
bnRlbmNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFN0YXJ0T2ZQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6ZmluZEVuZE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmg6CisKIDIwMTYtMDItMDkgIEFha2Fz
aCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEhlYWRlcnMgdGhhdCB1
c2UgV0VCQ09SRV9FWFBPUlQgc2hvdWxkIGluY2x1ZGUgUGxhdGZvcm1FeHBvcnRNYWNyb3MuaApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CShyZXZpc2lvbiAxOTYzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc1MCwxMSArMTc1MSw5IEBAIENoYXJh
Y3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXIKICAgICByZXR1cm4gY2hhcmFjdGVy
T2Zmc2V0OwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFj
dGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgTm9kZSYgbm9kZSwgaW50
IG9mZnNldCwgYm9vbCB0b05vZGVFbmQsIGJvb2wgaWdub3JlU3RhcnQpCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0
ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7
CiAgICAgbWVtc2V0KCZ0ZXh0TWFya2VyRGF0YSwgMCwgc2l6ZW9mKFRleHRNYXJrZXJEYXRhKSk7
Ci0gICAgCi0gICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9m
ZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwgb2Zmc2V0LCB0b05vZGVFbmQsIGlnbm9yZVN0YXJ0
KTsKICAgICBzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRh
dGEsIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKQEAgLTE4NzUsMjAgKzE4NzQsMzIgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpcwogICAgIGNhY2hlLT5zZXROb2RlSW5V
c2UoZG9tTm9kZSk7CiB9CiAKLUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQorQ2hh
cmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaWdub3JlU3RhcnQpCiB7CiAgICAg
aWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9m
ZnNldCgpOwogICAgIAotICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0
KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCArIDEpOworICAg
IC8vIFNvbWV0aW1lcyBhIHRleHQgbm9kZSdzIGNoYXJhY3RlciBjb3VudCBkb2Vzbid0IGluY2x1
ZGUgY2hhcmFjdGVycyBiZWZvcmUgYSBsaW5lIGJyZWFrLAorICAgIC8vIHNvIG5leHRDaGFyYWN0
ZXJPZmZzZXQgY2FuIG5ldmVyIG1vdmUgZm9yd2FyZC4KKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0
Lm5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gc3Rh
cnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKGNoYXJh
Y3Rlck9mZnNldC5ub2RlKSwgZmFsc2UpOworICAgICAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0Lmlz
RXF1YWwoZW5kKSkgeworICAgICAgICAgICAgTm9kZSogbmV4dCA9IG5leHROb2RlKGNoYXJhY3Rl
ck9mZnNldC5ub2RlKTsKKyAgICAgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zm
c2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4dCwgMSwgZmFsc2UsIGlnbm9yZVN0YXJ0KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9m
ZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAxLCBm
YWxzZSwgaWdub3JlU3RhcnQpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
cHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJP
ZmZzZXQpCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaWdub3Jl
U3RhcnQpCiB7CiAgICAgaWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAotICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9m
ZnNldCAtIDEsIGZhbHNlLCBmYWxzZSk7CisgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5v
ZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0
IC0gMSwgZmFsc2UsIGlnbm9yZVN0YXJ0KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIHN0YXJ0V29y
ZEJvdW5kYXJ5KFN0cmluZ1ZpZXcgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJj
aENvbnRleHRBdmFpbGFiaWxpdHkgbWF5SGF2ZU1vcmVDb250ZXh0LCBib29sJiBuZWVkTW9yZUNv
bnRleHQpCkBAIC0xOTUwLDcgKzE5NjEsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6ZW5kQ2hhcmFjCiAgICAgICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3JhcGgodnApKQogICAgICAg
ICAgICAgcmV0dXJuIGM7CiAgICAgICAgIAotICAgICAgICBjID0gcHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAgICAgYyA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zm
c2V0KGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpOwogICAgICAgICBpZiAoYy5pc051bGwoKSkKICAg
ICAgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXQ7CiAgICAgfQpAQCAtMTk2Myw3ICsxOTc0
LDcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzVwogICAgIGlmIChj
aGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQo
KTsKICAgICAKLSAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNPZmZzZXQgPSBwcmV2aW91c0No
YXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgIENoYXJhY3Rlck9mZnNldCBwcmV2
aW91c09mZnNldCA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCwgZmFs
c2UpOwogICAgIGlmIChwcmV2aW91c09mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIENo
YXJhY3Rlck9mZnNldCgpOwogICAgIApAQCAtMjExMSwxMyArMjEyMiwxMDAgQEAgQ2hhcmFjdGVy
T2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzVwogICAgICAgICAvLyBUaGUgbmV4dCB2YXJp
YWJsZSBjb250YWlucyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlm
ICgmbm9kZSA9PSBjaGFyYWN0ZXJPZmZzZXQubm9kZSkKICAgICAgICAgICAgIG5leHQgLT0gY2hh
cmFjdGVyT2Zmc2V0LnN0YXJ0SW5kZXg7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KG5vZGUsIG5leHQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNoYXJh
Y3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwgbmV4dCwgZmFsc2UsIGZhbHNlKTsKICAg
ICB9CiAgICAgCiAgICAgaW50IGNoYXJhY3RlckNvdW50ID0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNl
dCAtIChzdHJpbmcuc2l6ZSgpIC0gc3VmZml4TGVuZ3RoIC0gbmV4dCk7CiAgICAgcmV0dXJuIGNo
YXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFy
YWN0ZXJDb3VudCwgZmFsc2UsIGZhbHNlKTsKIH0KIAorQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0
Q2FjaGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFy
eUNyb3NzaW5nUnVsZSkKK3sKKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKQorICAg
ICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgTm9kZSogc3RhcnROb2Rl
ID0gY2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CisgICAgCisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklu
bGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoc3RhcnROb2RlKSwg
dHJ1ZSk7CisgICAgCisgICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0
Tm9kZSk7CisgICAgaW50IG9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4ICsgY2hh
cmFjdGVyT2Zmc2V0Lm9mZnNldDsKKyAgICBQb3NpdGlvbiBwKHN0YXJ0Tm9kZSwgb2Zmc2V0LCBQ
b3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICBOb2RlKiBoaWdoZXN0Um9v
dCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlw
ZSA9IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CisgICAgCisgICAgTm9kZSog
bm9kZSA9IGZpbmRTdGFydE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXJ0
QmxvY2ssIG9mZnNldCwgdHlwZSwgYm91bmRhcnlDcm9zc2luZ1J1bGUpOworICAgIAorICAgIGlm
ICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJl
dHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpub2RlLCBvZmZzZXQsIGZhbHNl
LCBmYWxzZSk7CisgICAgCisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JS
YW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgdHJ1ZSk7Cit9CisKK0NoYXJhY3Rlck9m
ZnNldCBBWE9iamVjdENhY2hlOjplbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdS
dWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQoreworICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNO
dWxsKCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAKKyAgICBOb2Rl
KiBzdGFydE5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9kZTsKKyAgICBpZiAoaXNSZW5kZXJlZEFz
Tm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKKyAgICAgICAgcmV0dXJuIHN0YXJ0
T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhzdGFydE5v
ZGUpLCBmYWxzZSk7CisgICAgCisgICAgTm9kZSogc3RheUluc2lkZUJsb2NrID0gZW5jbG9zaW5n
QmxvY2soc3RhcnROb2RlKTsKKyAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0LnN0YXJ0
SW5kZXggKyBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0OworICAgIFBvc2l0aW9uIHAoc3RhcnROb2Rl
LCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpOworICAgIE5vZGUq
IGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKKyAgICBQb3NpdGlvbjo6QW5j
aG9yVHlwZSB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcjsKKyAgICAK
KyAgICBOb2RlKiBub2RlID0gZmluZEVuZE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJv
b3QsIHN0YXlJbnNpZGVCbG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7
CisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikgewor
ICAgICAgICBpZiAobm9kZS0+aXNUZXh0Tm9kZSgpKSB7CisgICAgICAgICAgICBDaGFyYWN0ZXJP
ZmZzZXQgZW5kT2Zmc2V0ID0gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdl
Rm9yTm9kZUNvbnRlbnRzKG5vZGUpLCBmYWxzZSk7CisgICAgICAgICAgICBpZiAob2Zmc2V0ID09
IGVuZE9mZnNldC5zdGFydEluZGV4ICsgZW5kT2Zmc2V0Lm9mZnNldCkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZW5kT2Zmc2V0OworICAgICAgICAgICAgb2Zmc2V0IC09IGVuZE9mZnNldC5zdGFy
dEluZGV4OworICAgICAgICB9CisgICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2Rl
QW5kT2Zmc2V0KCpub2RlLCBvZmZzZXQsIGZhbHNlLCBmYWxzZSk7CisgICAgfQorICAgIAorICAg
IHJldHVybiBzdGFydE9yRW5kQ2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29u
dGVudHMobm9kZSksIGZhbHNlKTsKK30KKworUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpw
YXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0
ZXJPZmZzZXQpCit7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJP
ZmZzZXRPZlBhcmFncmFwaChjaGFyYWN0ZXJPZmZzZXQpOworICAgIENoYXJhY3Rlck9mZnNldCBl
bmQgPSBlbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjaGFyYWN0ZXJPZmZzZXQpOworICAg
IAorICAgIHJldHVybiByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVu
ZCk7Cit9CisKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0UGFyYWdyYXBoRW5k
Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQor
eworICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBDaGFy
YWN0ZXJPZmZzZXQoKTsKKyAgICAKKyAgICAvLyBtYWtlIHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBw
YXJhZ3JhcGggZW5kCisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBuZXh0Q2hhcmFjdGVyT2Zm
c2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAgaWYgKG5leHQuaXNOdWxsKCkpCisgICAgICAgIHJl
dHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAKKyAgICByZXR1cm4gZW5kQ2hhcmFjdGVyT2Zm
c2V0T2ZQYXJhZ3JhcGgobmV4dCk7Cit9CisKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hl
OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQoreworICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxs
KCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAgICAKKyAgICAvLyBtYWtl
IHN1cmUgd2UgbW92ZSBvZmYgb2YgYSBwYXJhZ3JhcGggc3RhcnQKKyAgICBDaGFyYWN0ZXJPZmZz
ZXQgcHJldmlvdXMgPSBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZh
bHNlKTsKKyAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0
ZXJPZmZzZXQoKTsKKyAgICAKKyAgICByZXR1cm4gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFn
cmFwaChwcmV2aW91cyk7Cit9CisKIGNvbnN0IEVsZW1lbnQqIEFYT2JqZWN0Q2FjaGU6OnJvb3RB
WEVkaXRhYmxlRWxlbWVudChjb25zdCBOb2RlKiBub2RlKQogewogICAgIGNvbnN0IEVsZW1lbnQq
IHJlc3VsdCA9IG5vZGUtPnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZpc2lvbiAxOTYzNjApCisr
KyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzQsNiArNzQsMTAgQEAgc3RydWN0IENoYXJhY3Rlck9mZnNldCB7CiAgICAgCiAg
ICAgaW50IHJlbWFpbmluZygpIGNvbnN0IHsgcmV0dXJuIHJlbWFpbmluZ09mZnNldDsgfQogICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW5vZGU7IH0KKyAgICBib29sIGlzRXF1YWwo
Q2hhcmFjdGVyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBub2Rl
ID09IG90aGVyLm5vZGUgJiYgc3RhcnRJbmRleCA9PSBvdGhlci5zdGFydEluZGV4ICYmIG9mZnNl
dCA9PSBvdGhlci5vZmZzZXQ7CisgICAgfQogfTsKIAogY2xhc3MgQVhDb21wdXRlZE9iamVjdEF0
dHJpYnV0ZUNhY2hlIHsKQEAgLTE4NSw5ICsxODksMTEgQEAgcHVibGljOgogCiAgICAgLy8gVGV4
dCBtYXJrZXIgdXRpbGl0aWVzLgogICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9z
aXRpb24oVGV4dE1hcmtlckRhdGEmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKKyAgICB2b2lk
IHRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZv
clRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJEYXRhJik7Ci0gICAgdm9p
ZCB0ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIE5vZGUm
LCBpbnQsIGJvb2wgdG9Ob2RlRW5kID0gZmFsc2UsIGJvb2wgaWdub3JlU3RhcnQgPSB0cnVlKTsK
KyAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmLCBib29sIGlnbm9yZVN0YXJ0ID0gdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHBy
ZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIGJvb2wgaWdub3Jl
U3RhcnQgPSB0cnVlKTsKICAgICB2b2lkIHN0YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdl
KFRleHRNYXJrZXJEYXRhJiwgUmVmUHRyPFJhbmdlPiwgYm9vbCk7CiAgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKFRleHRNYXJrZXJE
YXRhJik7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNl
dHMoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CkBAIC0x
OTUsMTIgKzIwMSwxNSBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGludCBsZW5ndGhGb3JSYW5nZShS
YW5nZSopOwogICAgIAogICAgIC8vIFdvcmQgYm91bmRhcnkKLSAgICBDaGFyYWN0ZXJPZmZzZXQg
c3RhcnRDaGFyYWN0ZXJPZmZzZXRPZldvcmQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgRVdvcmRT
aWRlID0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hh
cmFjdGVyT2Zmc2V0T2ZXb3JkKGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEVXb3JkU2lkZSA9IFJp
Z2h0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRXb3JkRW5kQ2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNl
dCBwcmV2aW91c1dvcmRTdGFydENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
KTsKICAgICBSZWZQdHI8UmFuZ2U+IGxlZnRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
Jik7CiAgICAgUmVmUHRyPFJhbmdlPiByaWdodFdvcmRSYW5nZShjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmKTsKKyAgICAKKyAgICAvLyBQYXJhZ3JhcGgKKyAgICBSZWZQdHI8UmFuZ2U+IHBhcmFncmFw
aEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICBDaGFyYWN0
ZXJPZmZzZXQgbmV4dFBhcmFncmFwaEVuZENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJP
ZmZzZXQmKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNQYXJhZ3JhcGhTdGFydENoYXJh
Y3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKIAogICAgIGVudW0gQVhOb3RpZmlj
YXRpb24gewogICAgICAgICBBWEFjdGl2ZURlc2NlbmRhbnRDaGFuZ2VkLApAQCAtMzAzLDEwICsz
MTIsMTIgQEAgcHJvdGVjdGVkOgogICAgIFVDaGFyMzIgY2hhcmFjdGVyQmVmb3JlKGNvbnN0IENo
YXJhY3Rlck9mZnNldCYpOwogICAgIENoYXJhY3Rlck9mZnNldCBzdGFydE9yRW5kQ2hhcmFjdGVy
T2Zmc2V0Rm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiwgYm9vbCk7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0
IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoTm9kZSYsIGludCwgYm9vbCB0b05vZGVF
bmQgPSBmYWxzZSwgYm9vbCBpZ25vcmVTdGFydCA9IHRydWUpOwotICAgIENoYXJhY3Rlck9mZnNl
dCBuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwotICAgIENoYXJh
Y3Rlck9mZnNldCBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQm
KTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNXb3JkQm91bmRhcnkoQ2hhcmFjdGVyT2Zm
c2V0JiwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRX
b3JkQm91bmRhcnkoQ2hhcmFjdGVyT2Zmc2V0JiwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7Cisg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZXb3JkKGNvbnN0IENoYXJh
Y3Rlck9mZnNldCYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFyeSk7CisgICAgQ2hh
cmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIENoYXJhY3Rlck9m
ZnNldCBzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5k
YXJ5KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgo
Y29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOwogCiBwcml2YXRlOgogICAgIEFjY2Vzc2liaWxpdHlP
YmplY3QqIHJvb3RXZWJBcmVhKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTk2MzYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE4OSw3ICsxODksNyBAQCArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRl
eHRNYXJrCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCiAgICAgVGV4dE1hcmtlckRhdGEgdGV4
dE1hcmtlckRhdGE7Ci0gICAgY2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0
KHRleHRNYXJrZXJEYXRhLCAqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5v
ZmZzZXQsIGZhbHNlKTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZz
ZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgaWYgKCF0ZXh0TWFya2Vy
RGF0YS5heElEICYmICF0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKQogICAgICAgICByZXR1cm4gbmls
OwogICAgIHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxvY10gaW5pdFdp
dGhUZXh0TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3JlbGVhc2VdOwpA
QCAtMjQyNSwxOSArMjQyNSwyNSBAQCAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRl
eHRNYXJrCiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbmV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICBj
aGFyYWN0ZXJPZmZzZXQub2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCArIDE7Ci0gICAg
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKnRleHRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0
IGNhY2hlOm1fb2JqZWN0LT5heE9iamVjdENhY2hlKCldOworICAgIEFYT2JqZWN0Q2FjaGUqIGNh
Y2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAg
ICByZXR1cm4gbmlsOworICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2FjaGUtPm5leHRDaGFy
YWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciAqdGV4dE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2Vy
V2l0aENoYXJhY3Rlck9mZnNldDpuZXh0IGNhY2hlOmNhY2hlXTsKICAgICBpZiAodGV4dE1hcmtl
ciAmJiB0ZXh0TWFya2VyLmlzSWdub3JlZCkKLSAgICAgICAgdGV4dE1hcmtlciA9IFtzZWxmIG5l
eHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKKyAgICAgICAgdGV4
dE1hcmtlciA9IFtzZWxmIG5leHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6bmV4dF07CiAgICAg
cmV0dXJuIHRleHRNYXJrZXI7CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICop
cHJldmlvdXNNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFj
dGVyT2Zmc2V0CiB7Ci0gICAgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCA9IGNoYXJhY3Rlck9mZnNl
dC5vZmZzZXQgLSAxOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICp0ZXh0TWFya2Vy
ID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zm
c2V0OmNoYXJhY3Rlck9mZnNldCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKKyAg
ICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAg
aWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJl
dmlvdXMgPSBjYWNoZS0+cHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsK
KyAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqdGV4dE1hcmtlciA9IFtXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDpwcmV2aW91cyBj
YWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKICAgICBpZiAodGV4dE1hcmtlciAmJiB0
ZXh0TWFya2VyLmlzSWdub3JlZCkKLSAgICAgICAgdGV4dE1hcmtlciA9IFtzZWxmIHByZXZpb3Vz
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CisgICAgICAgIHRleHRN
YXJrZXIgPSBbc2VsZiBwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDpwcmV2aW91c107
CiAgICAgcmV0dXJuIHRleHRNYXJrZXI7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tCShyZXZpc2lvbiAxOTYzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkod29y
a2luZyBjb3B5KQpAQCAtODQwLDQ1ICs4NDAsNTIgQEAgc3RhdGljIGlkIHN0YXJ0T3JFbmRUZXh0
bWFya2VyRm9yUmFuZ2UoQQogICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZSh3a0NyZWF0ZUFY
VGV4dE1hcmtlcigmdGV4dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKIH0K
IAotLSAoaWQpbmV4dFRleHRNYXJrZXJGb3JOb2RlOihOb2RlJilub2RlIG9mZnNldDooaW50KW9m
ZnNldAorc3RhdGljIGlkIG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0
Q2FjaGUqIGNhY2hlLCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKIHsKLSAgICBp
bnQgbmV4dE9mZnNldCA9IG9mZnNldCArIDE7Ci0gICAgaWQgdGV4dE1hcmtlciA9IFtzZWxmIHRl
eHRNYXJrZXJGb3JOb2RlOm5vZGUgb2Zmc2V0Om5leHRPZmZzZXRdOworICAgIGlmICghY2FjaGUp
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgCisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBj
YWNoZS0+bmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgIGlkIHRleHRN
YXJrZXIgPSB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KGNhY2hlLCBuZXh0KTsKICAgICBp
ZiAoaXNUZXh0TWFya2VySWdub3JlZCh0ZXh0TWFya2VyKSkKLSAgICAgICAgdGV4dE1hcmtlciA9
IFtzZWxmIG5leHRUZXh0TWFya2VyRm9yTm9kZTpub2RlIG9mZnNldDpuZXh0T2Zmc2V0XTsKKyAg
ICAgICAgdGV4dE1hcmtlciA9IG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KGNhY2hl
LCBuZXh0KTsKICAgICByZXR1cm4gdGV4dE1hcmtlcjsKIH0KIAotLSAoaWQpcHJldmlvdXNUZXh0
TWFya2VyRm9yTm9kZTooTm9kZSYpbm9kZSBvZmZzZXQ6KGludClvZmZzZXQKK3N0YXRpYyBpZCBw
cmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUs
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewotICAgIGludCBwcmV2aW91c09m
ZnNldCA9IG9mZnNldCAtIDE7Ci0gICAgaWQgdGV4dE1hcmtlciA9IFtzZWxmIHRleHRNYXJrZXJG
b3JOb2RlOm5vZGUgb2Zmc2V0OnByZXZpb3VzT2Zmc2V0XTsKKyAgICBpZiAoIWNhY2hlKQorICAg
ICAgICByZXR1cm4gbmlsOworICAgIAorICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91cyA9IGNh
Y2hlLT5wcmV2aW91c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgIGlkIHRl
eHRNYXJrZXIgPSB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KGNhY2hlLCBwcmV2aW91cyk7
CiAgICAgaWYgKGlzVGV4dE1hcmtlcklnbm9yZWQodGV4dE1hcmtlcikpCi0gICAgICAgIHRleHRN
YXJrZXIgPSBbc2VsZiBwcmV2aW91c1RleHRNYXJrZXJGb3JOb2RlOm5vZGUgb2Zmc2V0OnByZXZp
b3VzT2Zmc2V0XTsKKyAgICAgICAgdGV4dE1hcmtlciA9IHByZXZpb3VzVGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldChjYWNoZSwgcHJldmlvdXMpOwogICAgIHJldHVybiB0ZXh0TWFya2VyOwog
fQogCi0tIChpZCl0ZXh0TWFya2VyRm9yTm9kZTooTm9kZSYpbm9kZSBvZmZzZXQ6KGludClvZmZz
ZXQgaWdub3JlU3RhcnQ6KEJPT0wpaWdub3JlU3RhcnQKKy0gKGlkKW5leHRUZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAoreworICAg
IHJldHVybiBuZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChtX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQpOworfQorCistIChpZClwcmV2aW91c1RleHRNYXJr
ZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CiB7
Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKSwgbm9kZSwgb2Zmc2V0LCBmYWxzZSwgaWdub3JlU3RhcnQpOworICAgIHJldHVy
biBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKSwgY2hhcmFjdGVyT2Zmc2V0KTsKIH0KIAotLSAoaWQpdGV4dE1hcmtlckZvck5vZGU6
KE5vZGUmKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CistIChpZCl0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZTpub2RlIG9mZnNldDpvZmZzZXQgaWdub3JlU3RhcnQ6
WUVTXTsKKyAgICByZXR1cm4gdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChtX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQpOwogfQogCi1zdGF0aWMgaWQgdGV4dE1h
cmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgTm9kZSYgbm9kZSwg
aW50IG9mZnNldCwgYm9vbCB0b05vZGVFbmQsIGJvb2wgaWdub3JlU3RhcnQpCitzdGF0aWMgaWQg
dGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgY29uc3Qg
Q2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgaWYgKCFjYWNoZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBOb2RlKiBkb21Ob2RlID0gJm5vZGU7Ci0gICAg
aWYgKCFkb21Ob2RlKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAogICAgIFRleHRNYXJrZXJE
YXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rl
ck9mZnNldCh0ZXh0TWFya2VyRGF0YSwgbm9kZSwgb2Zmc2V0LCB0b05vZGVFbmQsIGlnbm9yZVN0
YXJ0KTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1h
cmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CiAgICAgaWYgKCF0ZXh0TWFya2VyRGF0YS5heElE
ICYmICF0ZXh0TWFya2VyRGF0YS5pZ25vcmVkKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApA
QCAtNDA2NiwxMiArNDA3MywxMiBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
KE5TU3RyCiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hh
cmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIG5leHRUZXh0TWFya2VyRm9yTm9kZToqY2hhcmFj
dGVyT2Zmc2V0Lm5vZGUgb2Zmc2V0OmNoYXJhY3Rlck9mZnNldC5vZmZzZXRdOworICAgICAgICBy
ZXR1cm4gW3NlbGYgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6Y2hhcmFjdGVyT2Zm
c2V0XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAi
QVhQcmV2aW91c1RleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKICAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJr
ZXI6dGV4dE1hcmtlcl07Ci0gICAgICAgIHJldHVybiBbc2VsZiBwcmV2aW91c1RleHRNYXJrZXJG
b3JOb2RlOipjaGFyYWN0ZXJPZmZzZXQubm9kZSBvZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0Lm9mZnNl
dF07CisgICAgICAgIHJldHVybiBbc2VsZiBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJP
ZmZzZXQ6Y2hhcmFjdGVyT2Zmc2V0XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUg
aXNFcXVhbFRvU3RyaW5nOkAiQVhMZWZ0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIi
XSkgewpAQCAtNDExMSw5ICs0MTE4LDEyIEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVW
YWx1ZTooTlNTdHIKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3Ry
aW5nOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JU
ZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIFZpc2libGVQb3NpdGlvblJhbmdlIHZw
UmFuZ2UgPSBtX29iamVjdC0+cGFyYWdyYXBoRm9yUG9zaXRpb24odmlzaWJsZVBvcyk7Ci0gICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tVmlzaWJsZVBvc2l0aW9uczp2cFJh
bmdlLnN0YXJ0IGVuZFBvc2l0aW9uOnZwUmFuZ2UuZW5kXTsKKyAgICAgICAgQVhPYmplY3RDYWNo
ZSogY2FjaGUgPSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hl
KQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtl
cl07CisgICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBjYWNoZS0+cGFyYWdyYXBoRm9yQ2hh
cmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJp
YnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiXSkgewpAQCAtNDEyMiw3ICs0MTMyLDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOihOU1N0cgogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJr
ZXI6dGV4dE1hcmtlcl07CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBuZXh0RW5kID0gY2FjaGUt
Pm5leHRXb3JkRW5kQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAgIHJl
dHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZToqbmV4dEVuZC5ub2RlIG9mZnNldDpuZXh0RW5k
Lm9mZnNldF07CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zm
c2V0Om5leHRFbmRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWFByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewpA
QCAtNDEzMSw3ICs0MTQxLDcgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihO
U1N0cgogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNo
YXJhY3Rlck9mZnNldCA9IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1h
cmtlcl07CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1N0YXJ0ID0gY2FjaGUtPnBy
ZXZpb3VzV29yZFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7Ci0gICAgICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZToqcHJldmlvdXNTdGFydC5ub2RlIG9mZnNl
dDpwcmV2aW91c1N0YXJ0Lm9mZnNldCBpZ25vcmVTdGFydDpOT107CisgICAgICAgIHJldHVybiBb
c2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwogICAgIH0K
ICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRMaW5lRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewpAQCAtNDE1NSwxMyArNDE2NSwyMSBAQCAtIChp
ZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAgIAogICAgIGlm
IChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3Mg
PSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAg
ICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5u
ZXh0UGFyYWdyYXBoRW5kUG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICBBWE9iamVjdENh
Y2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2Fj
aGUpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hh
cmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFy
a2VyXTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRFbmQgPSBjYWNoZS0+bmV4dFBhcmFn
cmFwaEVuZENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpuZXh0RW5kXTsKICAgICB9CiAgICAg
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1BhcmFncmFw
aFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRp
b24gdmlzaWJsZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRN
YXJrZXIpXTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JWaXNpYmxlUG9zaXRp
b246bV9vYmplY3QtPnByZXZpb3VzUGFyYWdyYXBoU3RhcnRQb3NpdGlvbih2aXNpYmxlUG9zKV07
CisgICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUo
KTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRG
b3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlv
dXNTdGFydCA9IGNhY2hlLT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KGNo
YXJhY3Rlck9mZnNldCk7CisgICAgICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OnByZXZpb3VzU3RhcnRdOwogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0
ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFN0eWxlVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJd
KSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCShyZXZpc2lv
biAxOTYzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTExNDIsMjQgKzExNDIsOSBAQCBWaXNpYmxlUG9zaXRpb24gbmV4dFNl
bnRlbmNlUG9zaXRpb24oY29uCiAgICAgcmV0dXJuIHBvc2l0aW9uLmhvbm9yRWRpdGluZ0JvdW5k
YXJ5QXRPckFmdGVyKG5leHRCb3VuZGFyeShwb3NpdGlvbiwgbmV4dFNlbnRlbmNlUG9zaXRpb25C
b3VuZGFyeSkpOwogfQogCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBW
aXNpYmxlUG9zaXRpb24mIGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNy
b3NzaW5nUnVsZSkKK05vZGUqIGZpbmRTdGFydE9mUGFyYWdyYXBoKE5vZGUqIHN0YXJ0Tm9kZSwg
Tm9kZSogaGlnaGVzdFJvb3QsIE5vZGUqIHN0YXJ0QmxvY2ssIGludCYgb2Zmc2V0LCBQb3NpdGlv
bjo6QW5jaG9yVHlwZSYgdHlwZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5
Q3Jvc3NpbmdSdWxlKQogewotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7Ci0g
ICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwotCi0gICAgaWYgKCFzdGFy
dE5vZGUpCi0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLSAgICAKLSAgICBpZiAo
aXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKLSAgICAgICAg
cmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUpOwotCi0gICAgTm9kZSogc3RhcnRC
bG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7Ci0KICAgICBOb2RlKiBub2RlID0gc3Rh
cnROb2RlOwotICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsK
LSAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAgIFBvc2l0
aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKLQogICAgIE5vZGUqIG4gPSBz
dGFydE5vZGU7CiAgICAgd2hpbGUgKG4pIHsKICNpZiBFTkFCTEUoVVNFUlNFTEVDVF9BTEwpCkBA
IC0xMTk4LDggKzExODMsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29u
c3QgVgogICAgICAgICAgICAgICAgIGlmIChuID09IHN0YXJ0Tm9kZSAmJiBvIDwgaSkKICAgICAg
ICAgICAgICAgICAgICAgaSA9IHN0ZDo6bWF4KDAsIG8pOwogICAgICAgICAgICAgICAgIHdoaWxl
ICgtLWkgPj0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PSAnXG4nKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihk
b3duY2FzdDxUZXh0PihuKSwgaSArIDEpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHRleHRbaV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0
ID0gaSArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG5vZGUgPSBuOwpAQCAtMTIxMywzMyArMTIwMCwxMiBAQCBWaXNpYmxlUG9zaXRpb24gc3RhcnRP
ZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgICAgICBuID0gTm9kZVRyYXZlcnNhbDo6cHJldmlv
dXNQb3N0T3JkZXIoKm4sIHN0YXJ0QmxvY2spOwogICAgIH0KIAotICAgIGlmICh0eXBlID09IFBv
c2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpIHsKLSAgICAgICAgQVNTRVJUKHR5cGUg
PT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvciB8fCAhb2Zmc2V0KTsKLSAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUpLCBE
T1dOU1RSRUFNKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KG5vZGUsIHR5cGUpLCBET1dOU1RSRUFNKTsKKyAgICByZXR1cm4gbm9kZTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGlu
Z0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQoteyAgICAKLSAgICBp
ZiAoYy5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOwotCi0gICAg
UG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBw
LmRlcHJlY2F0ZWROb2RlKCk7Ci0KLSAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJ
bWFnZU9ySFIoc3RhcnROb2RlKSkKLSAgICAgICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKHN0
YXJ0Tm9kZSk7Ci0gICAgCi0gICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0
YXJ0Tm9kZSk7Ci0gICAgTm9kZSogc3RheUluc2lkZUJsb2NrID0gc3RhcnRCbG9jazsKLSAgICAK
K05vZGUqIGZpbmRFbmRPZlBhcmFncmFwaChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGhpZ2hlc3RS
b290LCBOb2RlKiBzdGF5SW5zaWRlQmxvY2ssIGludCYgb2Zmc2V0LCBQb3NpdGlvbjo6QW5jaG9y
VHlwZSYgdHlwZSwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdS
dWxlKQorewogICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7Ci0gICAgTm9kZSogaGlnaGVzdFJv
b3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwotICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCk7Ci0gICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5j
aG9yVHlwZSgpOwotCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewog
I2lmIEVOQUJMRShVU0VSU0VMRUNUX0FMTCkKQEAgLTEyNzksOCArMTI0NSwxMCBAQCBWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzCiAgICAgICAgICAgICAgICAgaW50IG8g
PSBuID09IHN0YXJ0Tm9kZSA/IG9mZnNldCA6IDA7CiAgICAgICAgICAgICAgICAgaW50IGxlbmd0
aCA9IHRleHQubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IG87IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PSAnXG4nKQot
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihk
b3duY2FzdDxUZXh0PihuKSwgaSksIERPV05TVFJFQU0pOworICAgICAgICAgICAgICAgICAgICBp
ZiAodGV4dFtpXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBp
OworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0g
bjsKQEAgLTEyOTMsNyArMTI2MSw2MiBAQCBWaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgo
Y29uc3QgVmlzCiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6
Om5leHQoKm4sIHN0YXlJbnNpZGVCbG9jayk7CiAgICAgfQorICAgIHJldHVybiBub2RlOworfQog
CitWaXNpYmxlUG9zaXRpb24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWaXNpYmxlUG9zaXRpb24m
IGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNyb3NzaW5nUnVsZSkKK3sK
KyAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOworICAgIE5vZGUqIHN0YXJ0Tm9k
ZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAKKyAgICBpZiAoIXN0YXJ0Tm9kZSkKKyAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIAorICAgIGlmIChpc1JlbmRlcmVkQXNO
b25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUpKQorICAgICAgICByZXR1cm4gcG9zaXRp
b25CZWZvcmVOb2RlKHN0YXJ0Tm9kZSk7CisgICAgCisgICAgTm9kZSogc3RhcnRCbG9jayA9IGVu
Y2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgCisgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBo
aWdoZXN0RWRpdGFibGVSb290KHApOworICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlw
ZSgpOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBmaW5kU3RhcnRPZlBhcmFncmFwaChzdGFydE5v
ZGUsIGhpZ2hlc3RSb290LCBzdGFydEJsb2NrLCBvZmZzZXQsIHR5cGUsIGJvdW5kYXJ5Q3Jvc3Np
bmdSdWxlKTsKKyAgICAKKyAgICBpZiAoaXM8VGV4dD4obm9kZSkpCisgICAgICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4obm9kZSksIG9mZnNldCksIERP
V05TVFJFQU0pOworICAgIAorICAgIGlmICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zm
c2V0SW5BbmNob3IpIHsKKyAgICAgICAgQVNTRVJUKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9u
SXNPZmZzZXRJbkFuY2hvciB8fCAhb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbihQb3NpdGlvbihub2RlLCBvZmZzZXQsIHR5cGUpLCBET1dOU1RSRUFNKTsKKyAgICB9Cisg
ICAgCisgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCB0eXBlKSwgRE9X
TlNUUkVBTSk7Cit9CisKK1Zpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNyb3Nz
aW5nUnVsZSkKK3sgICAgCisgICAgaWYgKGMuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oKTsKKyAgICAKKyAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgp
OworICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAKKyAgICBp
ZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKKyAgICAg
ICAgcmV0dXJuIHBvc2l0aW9uQWZ0ZXJOb2RlKHN0YXJ0Tm9kZSk7CisgICAgCisgICAgTm9kZSog
c3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9kZSk7CisgICAgTm9kZSogc3RheUlu
c2lkZUJsb2NrID0gc3RhcnRCbG9jazsKKyAgICAKKyAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhp
Z2hlc3RFZGl0YWJsZVJvb3QocCk7CisgICAgaW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRp
bmdPZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBl
KCk7CisgICAgCisgICAgTm9kZSogbm9kZSA9IGZpbmRFbmRPZlBhcmFncmFwaChzdGFydE5vZGUs
IGhpZ2hlc3RSb290LCBzdGF5SW5zaWRlQmxvY2ssIG9mZnNldCwgdHlwZSwgYm91bmRhcnlDcm9z
c2luZ1J1bGUpOworICAgIAorICAgIGlmIChpczxUZXh0Pihub2RlKSkKKyAgICAgICAgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihkb3duY2FzdDxUZXh0Pihub2RlKSwgb2Zmc2V0KSwg
RE9XTlNUUkVBTSk7CisgICAgCiAgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNP
ZmZzZXRJbkFuY2hvcikKICAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihu
b2RlLCBvZmZzZXQsIHR5cGUpLCBET1dOU1RSRUFNKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVVbml0cy5oCShyZXZpc2lvbiAxOTYzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVVbml0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDggQEAg
dW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoUmVmUHRyPFJhbgogdW5zaWduZWQgcHJlZml4
TGVuZ3RoRm9yUmFuZ2UoUmVmUHRyPFJhbmdlPiwgVmVjdG9yPFVDaGFyLCAxMDI0PiYpOwogdW5z
aWduZWQgYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvciYsIFZlY3RvcjxVQ2hhciwgMTAyND4mLCB1bnNpZ25lZCwg
Qm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CiB1bnNpZ25lZCBmb3J3YXJkU2VhcmNoRm9yQm91bmRh
cnlXaXRoVGV4dEl0ZXJhdG9yKFRleHRJdGVyYXRvciYsIFZlY3RvcjxVQ2hhciwgMTAyND4mLCB1
bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CitOb2RlKiBmaW5kU3RhcnRPZlBhcmFn
cmFwaChOb2RlKiwgTm9kZSosIE5vZGUqLCBpbnQmLCBQb3NpdGlvbjo6QW5jaG9yVHlwZSYsIEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSk7CitOb2RlKiBmaW5kRW5kT2ZQYXJhZ3JhcGgoTm9k
ZSosIE5vZGUqLCBOb2RlKiwgaW50JiwgUG9zaXRpb246OkFuY2hvclR5cGUmLCBFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUpOwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5
NjQwNykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBA
CisyMDE2LTAyLTEwICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6
IEltcGxlbWVudCBwYXJhZ3JhcGggcmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgdXNpbmcg
VGV4dEl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTQwOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0MjY5Njc1PgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChuZXh0V29yZEVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2spOgorICAgICAgICAocGFyYWdyYXBoVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlckNhbGxiYWNrKToKKyAgICAgICAgKHByZXZpb3VzUGFyYWdyYXBoU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrKToKKyAgICAgICAgKG5leHRQYXJhZ3Jh
cGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrKToKKyAgICAgICAgKHNldFNlbGVj
dGVkVmlzaWJsZVRleHRSYW5nZUNhbGxiYWNrKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
cik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTQ2xhc3MpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAgICAgICAgKEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4
dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFn
cmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbToK
KyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBo
VGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgor
ICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1cHBv
cnRlZEFjdGlvbnMpOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHA6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1dvcmRTdGFydFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIp
OgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlF
bGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgor
ICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5oOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmlu
ZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGw6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbToKKyAg
ICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFdvcmRFbmRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpBY2Nl
c3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFn
cmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjptYXRoUG9zdHNjcmlwdHNEZXNjcmlwdGlvbik6CisgICAgICAgICog
V2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dE1hYy5tbToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFdvcmRF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4
dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAo
V1RSOjpfY29udmVydE1hdGhNdWx0aXNjcmlwdFBhaXJzVG9TdHJpbmcpOgorCiAyMDE2LTAyLTEw
ICBKYXNvbiBNYXJjZWxsICA8am1hcmNlbGxAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBj
YWxscyB0byBwYXJzZUludCBpbiBvcmRlciB0byB3b3JrIHdpdGggbm9uLWludGVnZXIgcmV2aXNp
b25zCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50LmNwcAkocmV2aXNpb24gMTk2MzYwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMTAsNiArMTAxMCwzMyBA
QCBzdGF0aWMgSlNWYWx1ZVJlZiBuZXh0V29yZEVuZFRleHRNYXJrZXJGCiAgICAgcmV0dXJuIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb250
ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+bmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlcihtYXJrZXIpKTsKIH0KIAorc3RhdGljIEpTVmFsdWVSZWYgcGFyYWdyYXBoVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50
Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogbWFya2VyID0gbnVsbHB0cjsKKyAg
ICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXIgPSB0b1RleHRNYXJrZXIo
SlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAg
CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6Om1ha2VKU0FjY2Vzc2li
aWxpdHlUZXh0TWFya2VyUmFuZ2UoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPnBh
cmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIobWFya2VyKSk7Cit9CisKK3N0YXRp
YyBKU1ZhbHVlUmVmIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
ckNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNP
YmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVS
ZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciogbWFya2VyID0gbnVsbHB0cjsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9
PSAxKQorICAgICAgICBtYXJrZXIgPSB0b1RleHRNYXJrZXIoSlNWYWx1ZVRvT2JqZWN0KGNvbnRl
eHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb250ZXh0LCB0
b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyKG1hcmtlcikpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBuZXh0UGFyYWdy
YXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4
dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBh
cmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBl
eGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG1hcmtlciA9IG51bGxw
dHI7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgbWFya2VyID0gdG9UZXh0
TWFya2VyKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikp
OworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6bWFrZUpTQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCktPm5leHRQ
YXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihtYXJrZXIpKTsKK30KKwogc3RhdGlj
IEpTVmFsdWVSZWYgc2V0U2VsZWN0ZWRWaXNpYmxlVGV4dFJhbmdlQ2FsbGJhY2soSlNDb250ZXh0
UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0
LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNW
YWx1ZVJlZiogZXhjZXB0aW9uKQogewogICAgIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQqIHVpRWxl
bWVudCA9IHRvQVhFbGVtZW50KHRoaXNPYmplY3QpOwpAQCAtMTYyMCw2ICsxNjQ3LDIxIEBAIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUUKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KIAorQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVt
ZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogI2VuZGlm
CiAKIC8vIERlc3RydWN0aW9uCkBAIC0xODA0LDYgKzE4NDYsOSBAQCBKU0NsYXNzUmVmIEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6OmdldEpTCiAgICAgICAgIHsgInJpZ2h0V29yZFRleHRNYXJrZXJS
YW5nZUZvclRleHRNYXJrZXIiLCByaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2Vy
Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJp
YnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlciIsIHByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJD
YWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmli
dXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIiwgbmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRl
IH0sCisgICAgICAgIHsgInBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiLCBw
YXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5
QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKKyAg
ICAgICAgeyAicHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiwg
cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2ssIGtK
U1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxl
dGUgfSwKKyAgICAgICAgeyAibmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
IiwgbmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2ssIGtKU1By
b3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUg
fSwKICAgICAgICAgeyAic2V0U2VsZWN0ZWRDaGlsZCIsIHNldFNlbGVjdGVkQ2hpbGRDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAogICAgICAgICB7ICJzZXRTZWxlY3RlZENoaWxkQXRJbmRleCIsIHNldFNlbGVj
dGVkQ2hpbGRBdEluZGV4Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBr
SlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAicmVtb3ZlU2VsZWN0
aW9uQXRJbmRleCIsIHJlbW92ZVNlbGVjdGlvbkF0SW5kZXhDYWxsYmFjaywga0pTUHJvcGVydHlB
dHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LApJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2
aXNpb24gMTk2MzYwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNjQsNiArMjY0LDkgQEAgcHVibGljOgogICAgIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgcmlnaHRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4
dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOwogICAgIEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIHByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBuZXh0V29yZEVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CisgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CisgICAgQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgcHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgbmV4
dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKik7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBzZWxlY3RlZFRleHRNYXJr
ZXJSYW5nZSgpOwogICAgIHZvaWQgcmVzZXRTZWxlY3RlZFRleHRNYXJrZXJSYW5nZSgpOwogICAg
IGJvb2wgc2V0U2VsZWN0ZWRWaXNpYmxlVGV4dFJhbmdlKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UqKTsKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50SU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nl
c3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lvbiAxOTYzNjApCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNTcwLDYgKzU3MCwyMSBAQCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmls
aXR5VUlFCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9y
VGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6
OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxp
dHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKICNlbmRpZiAvLyBTVVBQT1JUU19BWF9URVhUTUFSS0VSUyAmJiBQ
TEFURk9STShJT1MpCiAKICNwcmFnbWEgbWFyayBVbnVzZWQKSW5kZXg6IFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShyZXZp
c2lvbiAxOTYzNjApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg4Niw2ICsxODg2LDM2IEBAIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUUKICAgICByZXR1cm4gbnVsbHB0cjsK
IH0KIAorQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAg
IGlkIHRleHRNYXJrZXJSYW5nZSA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiBmb3JQYXJhbWV0
ZXI6KGlkKXRleHRNYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgIEVORF9BWF9P
QkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhT
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0
TWFya2VyKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIGlkIHByZXZpb3Vz
VGV4dE1hcmtlciA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhQ
cmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiIGZvclBhcmFtZXRl
cjooaWQpdGV4dE1hcmtlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcihwcmV2aW91c1RleHRNYXJrZXIpOworICAgIEVORF9BWF9PQkpD
X0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQor
eworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIGlkIG5leHRUZXh0TWFya2VyID0g
W21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWE5leHRQYXJhZ3JhcGhF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIgZm9yUGFyYW1ldGVyOihpZCl0ZXh0TWFya2VyLT5w
bGF0Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KG5leHRUZXh0TWFya2VyKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKICNlbmRpZiAvLyBTVVBQT1JUU19BWF9URVhUTUFSS0VSUyAm
JiBQTEFURk9STShNQUMpCiAKIEpTU3RyaW5nUmVmIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnN1
cHBvcnRlZEFjdGlvbnMoKQpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxOTYzNjApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDksNiArMjQ5
LDkgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPgogUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpy
aWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyKikgeyByZXR1cm4gbnVsbHB0cjsgfQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIG51bGxwdHI7
IH0KIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIqKSB7IHJldHVybiBudWxscHRyOyB9CitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7IHJldHVybiBu
dWxscHRyOyB9CitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqKSB7IHJldHVybiBudWxscHRyOyB9CitQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1Bh
cmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIqKSB7IHJldHVybiBudWxscHRyOyB9CiAjZW5kaWYKIAogfSAvLyBuYW1lc3BhY2UgV1RSCklu
ZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVk
QnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkocmV2aXNpb24gMTk2MzYwKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI1NSw2ICsyNTUsOSBAQCBwdWJsaWM6CiAgICAgUGFzc1Jl
ZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiByaWdodFdvcmRUZXh0TWFya2VyUmFu
Z2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CiAgICAgUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gcHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOwogICAgIFBhc3NSZWZQdHI8QWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXI+IG5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIo
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKKyAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2U+IHBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKKyAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyPiBuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKTsKKyAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
PiBwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKTsKIAogICAgIC8vIFJldHVybnMgYW4gb3JkZXJlZCBsaXN0IG9mIHN1
cHBvcnRlZCBhY3Rpb25zIGZvciBhbiBlbGVtZW50LgogICAgIEpTUmV0YWluUHRyPEpTU3RyaW5n
UmVmPiBzdXBwb3J0ZWRBY3Rpb25zKCkgY29uc3Q7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGlu
Z3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5pZGwJKHJldmlzaW9uIDE5NjM2MCkKKysrIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudC5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTIwNSw2ICsyMDUsOSBAQCBpbnRlcmZhY2Ug
QWNjZXNzaWJpbGl0eVVJRWxlbWVudCB7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5n
ZSByaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIHRleHRNYXJrZXIpOwogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHByZXZpb3Vz
V29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
dGV4dE1hcmtlcik7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgbmV4dFdvcmRFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyKTsK
KyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcik7CisgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgcHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXIpOworICAgIEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIG5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyKTsKIAogICAgIC8vIFJldHVy
bnMgYW4gb3JkZXJlZCBsaXN0IG9mIHN1cHBvcnRlZCBhY3Rpb25zIGZvciBhbiBlbGVtZW50Lgog
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBET01TdHJpbmcgc3VwcG9ydGVkQWN0aW9uczsKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9Jbmpl
Y3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQkocmV2aXNpb24gMTk2
MzYwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNz
aWJpbGl0eVVJRWxlbWVudElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTExNiw2ICsxMTE2LDIx
IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2UKICAgICByZXR1cm4g
bnVsbHB0cjsKIH0KIAorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFy
a2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIHJldHVybiBu
dWxscHRyOworfQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIo
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
cihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwogSlNSZXRhaW5QdHI8SlNTdHJpbmdSZWY+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6Om1hdGhQb3N0c2NyaXB0c0Rlc2NyaXB0aW9uKCkgY29uc3QKIHsKICAgICByZXR1cm4gMDsK
SW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5l
ci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNp
b24gMTk2MzYwKQorKysgVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTkxMyw2ICsx
OTEzLDM2IEBAIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2UKICAgICBy
ZXR1cm4gbnVsbHB0cjsKIH0KIAorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIEJF
R0lOX0FYX09CSkNfRVhDRVBUSU9OUworICAgIGlkIHRleHRNYXJrZXJSYW5nZSA9IFttX2VsZW1l
bnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhQYXJhZ3JhcGhUZXh0TWFya2VyUmFu
Z2VGb3JUZXh0TWFya2VyIiBmb3JQYXJhbWV0ZXI6KGlkKXRleHRNYXJrZXItPnBsYXRmb3JtVGV4
dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6Y3Jl
YXRlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAor
ICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7
CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgcHJldmlvdXNQYXJhZ3JhcGhT
dGFydE1hcmtlciA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhQ
cmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiIGZvclBhcmFtZXRl
cjooaWQpdGV4dE1hcmtlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOworICAgIHJldHVybiBBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlcjo6Y3JlYXRlKHByZXZpb3VzUGFyYWdyYXBoU3RhcnRNYXJrZXIp
OworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhDRVBU
SU9OUworICAgIGlkIG5leHRQYXJhZ3JhcGhFbmRNYXJrZXIgPSBbbV9lbGVtZW50IGFjY2Vzc2li
aWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYTmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIiBmb3JQYXJhbWV0ZXI6KGlkKXRleHRNYXJrZXItPnBsYXRmb3JtVGV4dE1hcmtlcigp
XTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmNyZWF0ZShuZXh0UGFyYWdy
YXBoRW5kTWFya2VyKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKIHN0YXRpYyBOU1N0cmluZyAqX2NvbnZlcnRNYXRoTXVsdGlzY3Jp
cHRQYWlyc1RvU3RyaW5nKE5TQXJyYXkgKnBhaXJzKQogewogICAgIF9fYmxvY2sgTlNNdXRhYmxl
U3RyaW5nICpyZXN1bHQgPSBbTlNNdXRhYmxlU3RyaW5nIHN0cmluZ107CkluZGV4OiBMYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxOTYzNjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxNCBAQAorMjAxNi0wMi0xMCAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgor
CisgICAgICAgIEFYOiBJbXBsZW1lbnQgcGFyYWdyYXBoIHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVu
Y3Rpb25zIHVzaW5nIFRleHRJdGVyYXRvcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MDk4CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS8yNDI2OTY3
NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFncmFwaC1uYXYtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1wYXJhZ3JhcGgt
bmF2Lmh0bWw6IEFkZGVkLgorCiAyMDE2LTAyLTA5ICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5j
b20+CiAKICAgICAgICAgQVg6IEltcGxlbWVudCB3b3JkIHJlbGF0ZWQgdGV4dCBtYXJrZXIgZnVu
Y3Rpb25zIHVzaW5nIFRleHRJdGVyYXRvcgpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0
eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5hdi1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5h
di1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5
L21hYy90ZXh0LW1hcmtlci1wYXJhZ3JhcGgtbmF2LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc0IEBACitwYXJhZ3JhcGggdGVzdAorVGVzdCBDb250ZW50ZWRpdGFibGUg
aXMgd29ya2luZy4KK2MgZAordGVzdCBhdWRpbyBmaWxlCitjYW4ndCBzZWxlY3QKK+W3p+WFi+WK
myDmmK/po5/nianlkJc/CivZg9mK2YEg2K3Yp9mE2YPYnworYm90aCAgIHNwYWNlcworbGluZSBi
cmVha3MKK3NvbWUKK3RleHQKK1RoaXMgdGVzdHMgdGhhdCBwYXJhZ3JhcGggbmF2aWdhdGlvbiBp
cyB3b3JraW5nIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK0N1
cnJlbnQgY2hhcmFjdGVyIGlzOiBwCitDdXJyZW50IHBhcmFncmFwaCBpczogcGFyYWdyYXBoIHRl
c3QKK1ByZSBwYXJhZ3JhcGggc3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5kOiBwYXJhZ3JhcGgg
dGVzdAorCitDdXJyZW50IGNoYXJhY3RlciBpczogVAorQ3VycmVudCBwYXJhZ3JhcGggaXM6IFRl
c3QgQ29udGVudAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6IFRl
c3QgQ29udGVudAorCitDdXJyZW50IGNoYXJhY3RlciBpczogYworQ3VycmVudCBwYXJhZ3JhcGgg
aXM6IGMgW0FUVEFDSE1FTlRdZAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFw
aCBlbmQ6IGMgW0FUVEFDSE1FTlRdZAorCitDdXJyZW50IGNoYXJhY3RlciBpczogZAorQ3VycmVu
dCBwYXJhZ3JhcGggaXM6IGMgW0FUVEFDSE1FTlRdZAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBu
ZXh0IHBhcmFncmFwaCBlbmQ6IGMgW0FUVEFDSE1FTlRdZAordGVzdCBhdWRpbyDvv7xmaWxlCisK
K0N1cnJlbnQgY2hhcmFjdGVyIGlzOiB0CitDdXJyZW50IHBhcmFncmFwaCBpczogdGVzdCBhdWRp
byBbQVRUQUNITUVOVF1maWxlCitQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBo
IGVuZDogdGVzdCBhdWRpbyBbQVRUQUNITUVOVF1maWxlCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlz
OiBjCitDdXJyZW50IHBhcmFncmFwaCBpczogY2FuJ3Qgc2VsZWN0CitQcmUgcGFyYWdyYXBoIHN0
YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogY2FuJ3Qgc2VsZWN0CisKK0N1cnJlbnQgY2hhcmFj
dGVyIGlzOiDlt6cKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiDlt6flhYvlipsg5piv6aOf54mp5ZCX
PworUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6IOW3p+WFi+WKmyDm
mK/po5/nianlkJc/CisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiDZgworQ3VycmVudCBwYXJhZ3Jh
cGggaXM6INmD2YrZgSDYrdin2YTZg9ifCitQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFy
YWdyYXBoIGVuZDog2YPZitmBINit2KfZhNmD2J8KKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IGIK
K0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBib3RoICAgc3BhY2VzCitQcmUgcGFyYWdyYXBoIHN0YXJ0
IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogYm90aCAgIHNwYWNlcworCitDdXJyZW50IGNoYXJhY3Rl
ciBpczogaQorQ3VycmVudCBwYXJhZ3JhcGggaXM6IGxpbmUgYnJlYWtzCitQcmUgcGFyYWdyYXBo
IHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogbGluZSBicmVha3MKKworQ3VycmVudCBjaGFy
YWN0ZXIgaXM6IHMKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBzb21lCitQcmUgcGFyYWdyYXBoIHN0
YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogc29tZQorCitDdXJyZW50IGNoYXJhY3RlciBpczog
dAorQ3VycmVudCBwYXJhZ3JhcGggaXM6IHRleHQKK1ByZSBwYXJhZ3JhcGggc3RhcnQgdG8gbmV4
dCBwYXJhZ3JhcGggZW5kOiB0ZXh0CisKK1Rlc3QgZ29pbmcgZm9yd2FyZC4KK0VuZCBwYXJhZ3Jh
cGg6IHRleHQKKworVGVzdCBnb2luZyBiYWNrd2FyZHMuCitTdGFydCBwYXJhZ3JhcGg6IHBhcmFn
cmFwaCB0ZXN0CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFy
YWdyYXBoLW5hdi5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkv
bWFjL3RleHQtbWFya2VyLXBhcmFncmFwaC1uYXYuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFncmFwaC1uYXYuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIGNoYXJzZXQ9InV0
Zi04Ij4gCis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Nj
cmlwdD4KKzwvaGVhZD4KKzxzdHlsZT4KKy51c2Vyc2VsZWN0IHsgdXNlci1zZWxlY3Q6IG5vbmU7
IC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7IH0KKzwvc3R5bGU+Cis8Ym9keSBpZD0iYm9keSI+
CisKKzxkaXYgaWQ9InRleHQxIiB0YWJpbmRleD0iMCI+CitwYXJhPHNwYW4+Z3JhcGg8L3NwYW4+
Cit0ZXN0Cis8L2Rpdj4KKworPGRpdiBpZD0idGV4dDIiPgorVGVzdCBDb250ZW50PHNwYW4gY29u
dGVudGVkaXRhYmxlPSJ0cnVlIj5lZGl0YWJsZSBpcyB3b3JraW5nLjwvc3Bhbj4KKzwvZGl2Pgor
Cis8ZGl2IGlkPSJ0ZXh0MyI+CitjIDxpbWcgc3JjPSIjIiBhcmlhLWxhYmVsPSJibGFoIiBzdHls
ZT0iYmFja2dyb3VuZC1jb2xvcjogI2FhYWFhYTsgd2lkdGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4
OyI+ZAorPC9kaXY+CisKKzxkaXYgaWQ9InRleHQ0Ij4KK3Rlc3QgYXVkaW8gPGF1ZGlvIGNvbnRy
b2xzPjxzb3VyY2Ugc3JjPSJ0ZXN0Lm1wMyIgdHlwZT0iYXVkaW8vbXBlZyI+PC9hdWRpbz5maWxl
Cis8L2Rpdj4KKworPGRpdiBjbGFzcz0idXNlcnNlbGVjdCIgaWQ9InRleHQ1Ij5jYW4ndCBzZWxl
Y3Q8L2Rpdj4KKworPGRpdiBpZD0idGV4dDYiPgor5ben5YWL5YqbCivmmK/po5/nianlkJc/Cis8
L2Rpdj4KKworPGRpdiBpZD0idGV4dDZhIj4KK9mD2YrZgSDYrdin2YTZg9ifCis8L2Rpdj4KKwor
PHByZSBpZD0idGV4dDciPgorYm90aCAgIHNwYWNlcworbGluZSBicmVha3MKKzwvcHJlPgorCis8
ZGl2IGlkPSJ0ZXh0OCI+Citzb21lPGJyPnRleHQKKzwvZGl2PgorCis8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorCis8c2NyaXB0PgorCisgICAgZGVz
Y3JpcHRpb24oIlRoaXMgdGVzdHMgdGhhdCBwYXJhZ3JhcGggbmF2aWdhdGlvbiBpcyB3b3JraW5n
IGNvcnJlY3RseS4iKTsKKyAgICAKKyAgICBpZiAod2luZG93LmFjY2Vzc2liaWxpdHlDb250cm9s
bGVyKSB7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIHBh
cmFncmFwaCByYW5nZSB3aXRoIHNwYW4gdGFnLgorICAgICAgICB2YXIgdGV4dCA9IGFjY2Vzc2li
aWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDEiKTsKKyAgICAgICAg
dmFyIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0
KTsKKyAgICAgICAgdmFyIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgdmFyIGN1cnJlbnRNYXJrZXIg
PSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgCisgICAg
ICAgIC8vIENoZWNrIHdpdGggY29udGVudGVkaXRhYmxlLgorICAgICAgICB0ZXh0ID0gYWNjZXNz
aWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MiIpOworICAgICAg
ICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7
CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoc3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgd2l0aCByZXBsYWNlZCBlbGVtZW50cy4KKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDMiKTsKKyAgICAgICAgdGV4dE1h
cmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAg
ICBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRl
eHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5
KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoY3VycmVudE1hcmtlciwgMywgdGV4dCk7CisgICAgICAgIC8vIEF1ZGlvIHRhZy4K
KyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50
QnlJZCgidGV4dDQiKTsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2Vy
UmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1
cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIHdpdGggdXNlci1zZWxlY3Q6bm9uZS4KKyAgICAgICAg
dGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4
dDUiKTsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JF
bGVtZW50KHRleHQpOworICAgICAgICBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJr
ZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgCisg
ICAgICAgIC8vIE11bHRpLWxhbmd1YWdlcy4KKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDYiKTsKKyAgICAgICAgdGV4dE1h
cmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAg
ICBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRl
eHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5
KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIHRleHQgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ2YSIpOworICAgICAg
ICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7
CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
UmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoc3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgdGhlIGNhc2Ugd2l0aCBwcmUgdGFnLgorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NyIpOworICAgICAgICB0ZXh0TWFy
a2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAg
IHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4
dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnko
c3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFu
ZFZlcmlmeShjdXJyZW50TWFya2VyLCAxNSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBD
aGVjayB0aGUgY2FzZSB3aXRoIGJyIHRhZy4KKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlD
b250cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDgiKTsKKyAgICAgICAgdGV4dE1h
cmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAg
ICBzdGFydE1hcmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRl
eHRNYXJrZXJSYW5nZSk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5
KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoY3VycmVudE1hcmtlciwgNSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBD
aGVjayB0aGUgcGFyYWdyYXBoIG1hcmtlciBydW5zIGZyb20gc3RhcnQgdG8gZW5kLCBhbmQgYmFj
a3dhcmRzLgorICAgICAgICAvLyBNYWtlIHN1cmUgaXQgd29uJ3QgaGFuZy4KKyAgICAgICAgdmVy
aWZ5RG9jdW1lbnQodGV4dCk7CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBhZHZhbmNlQW5k
VmVyaWZ5KGN1cnJlbnRNYXJrZXIsIG9mZnNldCwgb2JqKSB7CisgICAgICAgICAgICB2YXIgcHJl
dmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2VyOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBvZmZzZXQ7IGkrKykgeworICAgICAgICAgICAgICAgIHByZXZpb3VzTWFya2VyID0gY3Vy
cmVudE1hcmtlcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5leHRUZXh0
TWFya2VyKHByZXZpb3VzTWFya2VyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZlcmlm
eVBhcmFncmFwaFJhbmdlRm9yVGV4dE1hcmtlcihwcmV2aW91c01hcmtlciwgY3VycmVudE1hcmtl
ciwgb2JqKTsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50TWFya2VyOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBmdW5jdGlvbiByZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKHN0cikg
eworICAgICAgICAgICAgc3RyID0gIHN0ci5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNvZGUoNjU1
MzIpLCAiW0FUVEFDSE1FTlRdIik7CisgICAgICAgICAgICByZXR1cm4gc3RyOworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiB2ZXJpZnlQYXJhZ3JhcGhSYW5nZUZvclRleHRN
YXJrZXIocHJlTWFya2VyLCB0ZXh0TWFya2VyLCBvYmopIHsKKyAgICAgICAgICAgIHZhciBtYXJr
ZXJSYW5nZSA9IG9iai50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZU1hcmtlciwgdGV4dE1h
cmtlcik7CisgICAgICAgICAgICB2YXIgY3VycmVudENoYXJhY3RlciA9IHJlcGxhY2VBdHRhY2ht
ZW50SW5TdHJpbmcob2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkpOwor
ICAgICAgICAgICAgZGVidWcoIkN1cnJlbnQgY2hhcmFjdGVyIGlzOiAiICsgY3VycmVudENoYXJh
Y3Rlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwYXJhZ3JhcGhSYW5nZSA9IG9i
ai5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIpOworICAg
ICAgICAgICAgdmFyIHBhcmFncmFwaCA9IHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmcob2JqLnN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSkpOworICAgICAgICAgICAgZGVi
dWcoIkN1cnJlbnQgcGFyYWdyYXBoIGlzOiAiICsgcGFyYWdyYXBoKTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgdmFyIHByZVN0YXJ0ID0gb2JqLnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBuZXh0RW5k
ID0gb2JqLm5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2Vy
KTsKKyAgICAgICAgICAgIHZhciBwcmVBbmROZXh0UGFyYWdyYXBoUmFuZ2UgPSBvYmoudGV4dE1h
cmtlclJhbmdlRm9yTWFya2VycyhwcmVTdGFydCwgbmV4dEVuZCk7CisgICAgICAgICAgICB2YXIg
cHJlQW5kTmV4dFBhcmFncmFwaCA9IHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmcob2JqLnN0cmlu
Z0ZvclRleHRNYXJrZXJSYW5nZShwcmVBbmROZXh0UGFyYWdyYXBoUmFuZ2UpKTsKKyAgICAgICAg
ICAgIGRlYnVnKCJQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogIiAr
IHByZUFuZE5leHRQYXJhZ3JhcGggKyAiXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgZnVuY3Rpb24gdmVyaWZ5RG9jdW1lbnQob2JqKSB7CisgICAgICAgICAgICB2YXIgc3RhcnQg
PSBvYmouc3RhcnRUZXh0TWFya2VyOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBHb2lu
ZyBmb3J3YXJkLgorICAgICAgICAgICAgZGVidWcoIlRlc3QgZ29pbmcgZm9yd2FyZC4iKTsKKyAg
ICAgICAgICAgIHZhciBjdXJyZW50ID0gc3RhcnQ7CisgICAgICAgICAgICB2YXIgZW5kID0gInRl
eHQiOworICAgICAgICAgICAgdmFyIGN1cnJQYXJhZ3JhcGggPSAiIjsKKyAgICAgICAgICAgIHdo
aWxlKGN1cnJQYXJhZ3JhcGggIT0gZW5kKSB7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJSYW5n
ZSA9IG9iai5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKGN1cnJlbnQpOwor
ICAgICAgICAgICAgICAgIGN1cnJQYXJhZ3JhcGggPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlKGN1cnJSYW5nZSk7CisgICAgICAgICAgICAgICAgY3VycmVudCA9IG9iai5uZXh0UGFyYWdy
YXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoY3VycmVudCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBkZWJ1ZygiRW5kIHBhcmFncmFwaDogIiArIHJlcGxhY2VBdHRhY2htZW50SW5T
dHJpbmcoY3VyclBhcmFncmFwaCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBHb2lu
ZyBiYWNrd2FyZHMuCisgICAgICAgICAgICBkZWJ1ZygiXG5UZXN0IGdvaW5nIGJhY2t3YXJkcy4i
KTsKKyAgICAgICAgICAgIHZhciBzdGFydCA9ICJwYXJhZ3JhcGggdGVzdCI7CisgICAgICAgICAg
ICBjdXJyUGFyYWdyYXBoID0gIiI7IAorICAgICAgICAgICAgd2hpbGUoY3VyclBhcmFncmFwaCAh
PSBzdGFydCkgeworICAgICAgICAgICAgICAgIHZhciBjdXJyZW50UmFuZ2UgPSBvYmoucGFyYWdy
YXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihjdXJyZW50KTsKKyAgICAgICAgICAgICAg
ICBjdXJyUGFyYWdyYXBoID0gb2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShjdXJyZW50UmFu
Z2UpOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBvYmoucHJldmlvdXNQYXJhZ3JhcGhTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKGN1cnJlbnQpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZGVidWcoIlN0YXJ0IHBhcmFncmFwaDogIiArIHJlcGxhY2VBdHRhY2htZW50SW5TdHJp
bmcoY3VyclBhcmFncmFwaCkpOworICAgICAgICB9CisgICAgfQorCis8L3NjcmlwdD4KKworPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271042</attachid>
            <date>2016-02-10 18:10:34 -0800</date>
            <delta_ts>2016-02-12 15:37:19 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>62320</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE2LTAyLTEwICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBwYXJhZ3JhcGgg
cmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgdXNpbmcgVGV4dEl0ZXJhdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwOTgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0MjY5Njc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzaW5nIENoYXJhY3Rlck9mZnNldCB0byBpbXBsZW1lbnQgcGFy
YWdyYXBoIHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMuIFJldXNlZAorICAgICAgICBsb2dpYyBm
cm9tIFZpc2libGVVbml0cyBjbGFzcy4gQWxzbyByZWZhY3RvcmVkIHRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQgbWV0aG9kCisgICAgICAgIHRvIGdldCBiZXR0ZXIgcGVyZm9ybWFuY2UuCisK
KyAgICAgICAgVGVzdDogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5h
di5odG1sCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9m
ZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZv
ckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjp0ZXh0
TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0
Q2FjaGU6OnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OnN0YXJ0
V29yZEJvdW5kYXJ5KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OmVuZENoYXJh
Y3Rlck9mZnNldE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwcmV2
aW91c1dvcmRTdGFydENoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpwcmV2aW91c1dvcmRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVj
dENhY2hlOjpzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OkFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldCk6
CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpuZXh0UGFyYWdyYXBoRW5kQ2hhcmFj
dGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUGFy
YWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50KToKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6cmVtYWlu
aW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6aXNOdWxsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNoYXJhY3Rlck9mZnNldDo6aXNFcXVhbCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW06CisgICAgICAg
ICgrW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zm
c2V0OmNhY2hlOl0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBu
ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Ol0pOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciBwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAg
ICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1h
Yy5tbToKKyAgICAgICAgKHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UpOgorICAgICAgICAo
bmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAocHJldmlvdXNUZXh0
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXIgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAg
ICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHByZXZpb3VzVGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBw
ZXIgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKHRleHRNYXJrZXJG
b3JDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6Zm9yUGFyYW1ldGVyOl0pOgorICAgICAg
ICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBuZXh0VGV4dE1hcmtlckZvck5vZGU6
b2Zmc2V0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlciBwcmV2aW91c1RleHRNYXJrZXJGb3JOb2RlOm9mZnNldDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlckZvck5vZGU6b2Zm
c2V0Omlnbm9yZVN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5
T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyRm9yTm9kZTpvZmZzZXQ6XSk6IERlbGV0ZWQuCisgICAg
ICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bmV4dFNl
bnRlbmNlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmluZFN0YXJ0T2ZQYXJhZ3JhcGgp
OgorICAgICAgICAoV2ViQ29yZTo6ZmluZEVuZE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNv
cmU6OnN0YXJ0T2ZQYXJhZ3JhcGgpOgorICAgICAgICAoV2ViQ29yZTo6ZW5kT2ZQYXJhZ3JhcGgp
OgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmg6CisKIDIwMTYtMDItMDkgIEFha2Fz
aCBKYWluICA8YWFrYXNoX2phaW5AYXBwbGUuY29tPgogCiAgICAgICAgIEhlYWRlcnMgdGhhdCB1
c2UgV0VCQ09SRV9FWFBPUlQgc2hvdWxkIGluY2x1ZGUgUGxhdGZvcm1FeHBvcnRNYWNyb3MuaApJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3Bw
CShyZXZpc2lvbiAxOTYzNjApCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2Jq
ZWN0Q2FjaGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw2ICs4Myw3IEBACiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgIlRleHRCb3VuZGFyaWVzLmgiCiAjaW5jbHVkZSAiVGV4
dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiaHRtbGVkaXRpbmcuaCIKICNpbmNsdWRlIDx3dGYvRGF0
YUxvZy5oPgogCiAjaWYgRU5BQkxFKFZJREVPKQpAQCAtMTc1MCwxMSArMTc1MSw5IEBAIENoYXJh
Y3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXIKICAgICByZXR1cm4gY2hhcmFjdGVy
T2Zmc2V0OwogfQogCi12b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFj
dGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgTm9kZSYgbm9kZSwgaW50
IG9mZnNldCwgYm9vbCB0b05vZGVFbmQsIGJvb2wgaWdub3JlU3RhcnQpCit2b2lkIEFYT2JqZWN0
Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0
ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7
CiAgICAgbWVtc2V0KCZ0ZXh0TWFya2VyRGF0YSwgMCwgc2l6ZW9mKFRleHRNYXJrZXJEYXRhKSk7
Ci0gICAgCi0gICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9m
ZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwgb2Zmc2V0LCB0b05vZGVFbmQsIGlnbm9yZVN0YXJ0
KTsKICAgICBzZXRUZXh0TWFya2VyRGF0YVdpdGhDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRh
dGEsIGNoYXJhY3Rlck9mZnNldCk7CiB9CiAKQEAgLTE4NzUsMjAgKzE4NzQsMzIgQEAgdm9pZCBB
WE9iamVjdENhY2hlOjp0ZXh0TWFya2VyRGF0YUZvclZpcwogICAgIGNhY2hlLT5zZXROb2RlSW5V
c2UoZG9tTm9kZSk7CiB9CiAKLUNoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hh
cmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQorQ2hh
cmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6Om5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaWdub3JlU3RhcnQpCiB7CiAgICAg
aWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9m
ZnNldCgpOwogICAgIAotICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0
KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCArIDEpOworICAg
IC8vIFNvbWV0aW1lcyBhIHRleHQgbm9kZSdzIGNoYXJhY3RlciBjb3VudCBkb2Vzbid0IGluY2x1
ZGUgY2hhcmFjdGVycyBiZWZvcmUgYSBsaW5lIGJyZWFrLAorICAgIC8vIHNvIG5leHRDaGFyYWN0
ZXJPZmZzZXQgY2FuIG5ldmVyIG1vdmUgZm9yd2FyZC4KKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0
Lm5vZGUtPmlzVGV4dE5vZGUoKSkgeworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kID0gc3Rh
cnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKGNoYXJh
Y3Rlck9mZnNldC5ub2RlKSwgZmFsc2UpOworICAgICAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0Lmlz
RXF1YWwoZW5kKSkgeworICAgICAgICAgICAgTm9kZSogbmV4dCA9IG5leHROb2RlKGNoYXJhY3Rl
ck9mZnNldC5ub2RlKTsKKyAgICAgICAgICAgIGlmICghbmV4dCkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zm
c2V0Rm9yTm9kZUFuZE9mZnNldCgqbmV4dCwgMSwgZmFsc2UsIGlnbm9yZVN0YXJ0KTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9m
ZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAxLCBm
YWxzZSwgaWdub3JlU3RhcnQpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
cHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJP
ZmZzZXQpCitDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQsIGJvb2wgaWdub3Jl
U3RhcnQpCiB7CiAgICAgaWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAgcmV0
dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAotICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRG
b3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9m
ZnNldCAtIDEsIGZhbHNlLCBmYWxzZSk7CisgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5v
ZGVBbmRPZmZzZXQoKmNoYXJhY3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0
IC0gMSwgZmFsc2UsIGlnbm9yZVN0YXJ0KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIHN0YXJ0V29y
ZEJvdW5kYXJ5KFN0cmluZ1ZpZXcgdGV4dCwgdW5zaWduZWQgb2Zmc2V0LCBCb3VuZGFyeVNlYXJj
aENvbnRleHRBdmFpbGFiaWxpdHkgbWF5SGF2ZU1vcmVDb250ZXh0LCBib29sJiBuZWVkTW9yZUNv
bnRleHQpCkBAIC0xOTI1LDkgKzE5MzYsOCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6c3RhcnRDaGFyCiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGMgPSBjaGFyYWN0ZXJPZmZz
ZXQ7CiAgICAgaWYgKHNpZGUgPT0gUmlnaHRXb3JkSWZPbkJvdW5kYXJ5KSB7Ci0gICAgICAgIC8v
IEZJWE1FOiBuZWVkIHRvIHJlbW92ZSB0aGlzIHdoZW4gaXNFbmRPZlBhcmFncmFwaCBpcyBpbXBs
ZW1lbnRlZCBmb3IgQ2hhcmFjdGVyT2Zmc2V0LgotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdnAg
PSB2aXNpYmxlUG9zaXRpb25Gcm9tQ2hhcmFjdGVyT2Zmc2V0KGMpOwotICAgICAgICBpZiAoaXNF
bmRPZlBhcmFncmFwaCh2cCkpCisgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmRPZlBhcmFncmFw
aCA9IGVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGMpOworICAgICAgICBpZiAoYy5pc0Vx
dWFsKGVuZE9mUGFyYWdyYXBoKSkKICAgICAgICAgICAgIHJldHVybiBjOwogICAgICAgICAKICAg
ICAgICAgYyA9IG5leHRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKQEAgLTE5NDUs
MTIgKzE5NTUsMTEgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhYwog
ICAgIAogICAgIENoYXJhY3Rlck9mZnNldCBjID0gY2hhcmFjdGVyT2Zmc2V0OwogICAgIGlmIChz
aWRlID09IExlZnRXb3JkSWZPbkJvdW5kYXJ5KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBuZWVkIHRv
IHJlbW92ZSB0aGlzIHdoZW4gaXNTdGFydE9mUGFyYWdyYXBoIGlzIGltcGxlbWVudGVkIGZvciBD
aGFyYWN0ZXJPZmZzZXQuCi0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2cCA9IHZpc2libGVQb3Np
dGlvbkZyb21DaGFyYWN0ZXJPZmZzZXQoYyk7Ci0gICAgICAgIGlmIChpc1N0YXJ0T2ZQYXJhZ3Jh
cGgodnApKQorICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRPZlBhcmFncmFwaCA9IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoYyk7CisgICAgICAgIGlmIChjLmlzRXF1YWwoc3Rh
cnRPZlBhcmFncmFwaCkpCiAgICAgICAgICAgICByZXR1cm4gYzsKICAgICAgICAgCi0gICAgICAg
IGMgPSBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgICAgICBj
ID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSk7CiAgICAg
ICAgIGlmIChjLmlzTnVsbCgpKQogICAgICAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldDsK
ICAgICB9CkBAIC0xOTYzLDcgKzE5NzIsNyBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNo
ZTo6cHJldmlvdXNXCiAgICAgaWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKICAgICAgICAg
cmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOwogICAgIAotICAgIENoYXJhY3Rlck9mZnNldCBwcmV2
aW91c09mZnNldCA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7Cisg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzT2Zmc2V0ID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSk7CiAgICAgaWYgKHByZXZpb3VzT2Zmc2V0LmlzTnVs
bCgpKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgCkBAIC0yMTExLDEz
ICsyMTIwLDEwMCBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6cHJldmlvdXNXCiAg
ICAgICAgIC8vIFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8g
YSB0ZXh0IG5vZGUKICAgICAgICAgaWYgKCZub2RlID09IGNoYXJhY3Rlck9mZnNldC5ub2RlKQog
ICAgICAgICAgICAgbmV4dCAtPSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJbmRleDsKLSAgICAgICAg
cmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQobm9kZSwgbmV4dCwgZmFsc2Up
OworICAgICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldChub2RlLCBu
ZXh0LCBmYWxzZSwgZmFsc2UpOwogICAgIH0KICAgICAKICAgICBpbnQgY2hhcmFjdGVyQ291bnQg
PSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0IC0gKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGgg
LSBuZXh0KTsKICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hh
cmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3RlckNvdW50LCBmYWxzZSwgZmFsc2UpOwogfQogCitD
aGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFn
cmFwaChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCwgRWRpdGluZ0JvdW5k
YXJ5Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQoreworICAgIGlmIChjaGFyYWN0
ZXJPZmZzZXQuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKKyAg
ICAKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBjaGFyYWN0ZXJPZmZzZXQubm9kZTsKKyAgICAKKyAg
ICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIoc3RhcnROb2RlKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRGb3JSYW5nZShyYW5nZUZvck5v
ZGVDb250ZW50cyhzdGFydE5vZGUpLCB0cnVlKTsKKyAgICAKKyAgICBOb2RlKiBzdGFydEJsb2Nr
ID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKKyAgICBpbnQgb2Zmc2V0ID0gY2hhcmFjdGVy
T2Zmc2V0LnN0YXJ0SW5kZXggKyBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0OworICAgIFBvc2l0aW9u
IHAoc3RhcnROb2RlLCBvZmZzZXQsIFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3Ip
OworICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKKyAgICBQ
b3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFu
Y2hvcjsKKyAgICAKKyAgICBOb2RlKiBub2RlID0gZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnRO
b2RlLCBoaWdoZXN0Um9vdCwgc3RhcnRCbG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3Nz
aW5nUnVsZSk7CisgICAgCisgICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcikKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZz
ZXQoKm5vZGUsIG9mZnNldCwgZmFsc2UsIGZhbHNlKTsKKyAgICAKKyAgICByZXR1cm4gc3RhcnRP
ckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUpLCB0
cnVlKTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9m
ZnNldE9mUGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBF
ZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCit7CisgICAg
aWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9m
ZnNldCgpOworICAgIAorICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGNoYXJhY3Rlck9mZnNldC5ub2Rl
OworICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUp
KQorICAgICAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdl
Rm9yTm9kZUNvbnRlbnRzKHN0YXJ0Tm9kZSksIGZhbHNlKTsKKyAgICAKKyAgICBOb2RlKiBzdGF5
SW5zaWRlQmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOworICAgIGludCBvZmZzZXQg
PSBjaGFyYWN0ZXJPZmZzZXQuc3RhcnRJbmRleCArIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7Cisg
ICAgUG9zaXRpb24gcChzdGFydE5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZz
ZXRJbkFuY2hvcik7CisgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290
KHApOworICAgIFBvc2l0aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25J
c09mZnNldEluQW5jaG9yOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBmaW5kRW5kT2ZQYXJhZ3Jh
cGgoc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwgc3RheUluc2lkZUJsb2NrLCBvZmZzZXQsIHR5cGUs
IGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKTsKKyAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRp
b25Jc09mZnNldEluQW5jaG9yKSB7CisgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsK
KyAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBlbmRPZmZzZXQgPSBzdGFydE9yRW5kQ2hhcmFj
dGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZSksIGZhbHNlKTsKKyAg
ICAgICAgICAgIGlmIChvZmZzZXQgPT0gZW5kT2Zmc2V0LnN0YXJ0SW5kZXggKyBlbmRPZmZzZXQu
b2Zmc2V0KQorICAgICAgICAgICAgICAgIHJldHVybiBlbmRPZmZzZXQ7CisgICAgICAgICAgICBv
ZmZzZXQgLT0gZW5kT2Zmc2V0LnN0YXJ0SW5kZXg7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu
IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKm5vZGUsIG9mZnNldCwgZmFsc2UsIGZh
bHNlKTsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRG
b3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgZmFsc2UpOworfQorCitSZWZQdHI8
UmFuZ2U+IEFYT2JqZWN0Q2FjaGU6OnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKK3sKKyAgICBDaGFyYWN0ZXJPZmZzZXQg
c3RhcnQgPSBzdGFydENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGNoYXJhY3Rlck9mZnNldCk7
CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZCA9IGVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBo
KGNoYXJhY3Rlck9mZnNldCk7CisgICAgCisgICAgcmV0dXJuIHJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhzdGFydCwgZW5kKTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0
Q2FjaGU6Om5leHRQYXJhZ3JhcGhFbmRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zm
c2V0JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAgaWYgKGNoYXJhY3Rlck9mZnNldC5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAgIC8vIG1ha2Ug
c3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHBhcmFncmFwaCBlbmQKKyAgICBDaGFyYWN0ZXJPZmZzZXQg
bmV4dCA9IG5leHRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBpZiAobmV4
dC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAg
IHJldHVybiBlbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChuZXh0KTsKK30KKworQ2hhcmFj
dGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRDaGFyYWN0ZXJP
ZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAgaWYg
KGNoYXJhY3Rlck9mZnNldC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNl
dCgpOworICAgIAorICAgIC8vIG1ha2Ugc3VyZSB3ZSBtb3ZlIG9mZiBvZiBhIHBhcmFncmFwaCBz
dGFydAorICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91cyA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zm
c2V0KGNoYXJhY3Rlck9mZnNldCwgZmFsc2UpOworICAgIGlmIChwcmV2aW91cy5pc051bGwoKSkK
KyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAgIAorICAgIHJldHVybiBzdGFy
dENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKHByZXZpb3VzKTsKK30KKwogY29uc3QgRWxlbWVu
dCogQVhPYmplY3RDYWNoZTo6cm9vdEFYRWRpdGFibGVFbGVtZW50KGNvbnN0IE5vZGUqIG5vZGUp
CiB7CiAgICAgY29uc3QgRWxlbWVudCogcmVzdWx0ID0gbm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hl
LmgJKHJldmlzaW9uIDE5NjM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhP
YmplY3RDYWNoZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NCw2ICs3NCwxMiBAQCBzdHJ1Y3QgQ2hh
cmFjdGVyT2Zmc2V0IHsKICAgICAKICAgICBpbnQgcmVtYWluaW5nKCkgY29uc3QgeyByZXR1cm4g
cmVtYWluaW5nT2Zmc2V0OyB9CiAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbm9k
ZTsgfQorICAgIGJvb2wgaXNFcXVhbChDaGFyYWN0ZXJPZmZzZXQmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGlzTnVsbCgpIHx8IG90aGVyLmlzTnVsbCgpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbm9kZSA9PSBvdGhlci5ub2RlICYmIHN0YXJ0
SW5kZXggPT0gb3RoZXIuc3RhcnRJbmRleCAmJiBvZmZzZXQgPT0gb3RoZXIub2Zmc2V0OworICAg
IH0KIH07CiAKIGNsYXNzIEFYQ29tcHV0ZWRPYmplY3RBdHRyaWJ1dGVDYWNoZSB7CkBAIC0xODUs
OSArMTkxLDExIEBAIHB1YmxpYzoKIAogICAgIC8vIFRleHQgbWFya2VyIHV0aWxpdGllcy4KICAg
ICB2b2lkIHRleHRNYXJrZXJEYXRhRm9yVmlzaWJsZVBvc2l0aW9uKFRleHRNYXJrZXJEYXRhJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CisgICAgdm9pZCB0ZXh0TWFya2VyRGF0YUZvckNoYXJh
Y3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0TWFy
a2VyRGF0YSYpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFy
a2VyRGF0YShUZXh0TWFya2VyRGF0YSYpOwotICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JDaGFy
YWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBOb2RlJiwgaW50LCBib29sIHRvTm9kZUVuZCA9
IGZhbHNlLCBib29sIGlnbm9yZVN0YXJ0ID0gdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5l
eHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgYm9vbCBpZ25vcmVTdGFy
dCA9IHRydWUpOworICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBib29sIGlnbm9yZVN0YXJ0ID0gdHJ1ZSk7CiAgICAgdm9p
ZCBzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZShUZXh0TWFya2VyRGF0YSYsIFJlZlB0
cjxSYW5nZT4sIGJvb2wpOwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxpdHlP
YmplY3RGb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYpOwogICAgIFJlZlB0cjxSYW5n
ZT4gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwpAQCAtMTk1LDEyICsyMDMsMTUgQEAgcHVibGlj
OgogICAgIHN0YXRpYyBpbnQgbGVuZ3RoRm9yUmFuZ2UoUmFuZ2UqKTsKICAgICAKICAgICAvLyBX
b3JkIGJvdW5kYXJ5Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZX
b3JkKGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3Vu
ZGFyeSk7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChjb25z
dCBDaGFyYWN0ZXJPZmZzZXQmLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOwog
ICAgIENoYXJhY3Rlck9mZnNldCBuZXh0V29yZEVuZENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFy
YWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNXb3JkU3RhcnRDaGFy
YWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgUmVmUHRyPFJhbmdlPiBs
ZWZ0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIFJlZlB0cjxSYW5nZT4g
cmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgCisgICAgLy8gUGFy
YWdyYXBoCisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY29u
c3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRQYXJhZ3JhcGhF
bmRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hhcmFjdGVy
T2Zmc2V0IHByZXZpb3VzUGFyYWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFj
dGVyT2Zmc2V0Jik7CiAKICAgICBlbnVtIEFYTm90aWZpY2F0aW9uIHsKICAgICAgICAgQVhBY3Rp
dmVEZXNjZW5kYW50Q2hhbmdlZCwKQEAgLTMwMywxMCArMzE0LDEyIEBAIHByb3RlY3RlZDoKICAg
ICBVQ2hhcjMyIGNoYXJhY3RlckJlZm9yZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBD
aGFyYWN0ZXJPZmZzZXQgc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4sIGJvb2wpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JOb2Rl
QW5kT2Zmc2V0KE5vZGUmLCBpbnQsIGJvb2wgdG9Ob2RlRW5kID0gZmFsc2UsIGJvb2wgaWdub3Jl
U3RhcnQgPSB0cnVlKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dENoYXJhY3Rlck9mZnNldChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNDaGFy
YWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0
IHByZXZpb3VzV29yZEJvdW5kYXJ5KENoYXJhY3Rlck9mZnNldCYsIEJvdW5kYXJ5U2VhcmNoRnVu
Y3Rpb24pOwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0V29yZEJvdW5kYXJ5KENoYXJhY3Rlck9m
ZnNldCYsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24pOworICAgIENoYXJhY3Rlck9mZnNldCBzdGFy
dENoYXJhY3Rlck9mZnNldE9mV29yZChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBFV29yZFNpZGUg
PSBSaWdodFdvcmRJZk9uQm91bmRhcnkpOworICAgIENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0
ZXJPZmZzZXRPZldvcmQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgRVdvcmRTaWRlID0gUmlnaHRX
b3JkSWZPbkJvdW5kYXJ5KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZz
ZXRPZlBhcmFncmFwaChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CisgICAgQ2hhcmFjdGVyT2Zm
c2V0IGVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdyYXBoKGNvbnN0IENoYXJhY3Rlck9mZnNldCYs
IEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSA9IENhbm5vdENyb3NzRWRpdGluZ0JvdW5kYXJ5
KTsKIAogcHJpdmF0ZToKICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiByb290V2ViQXJlYSgpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9i
amVjdFdyYXBwZXJJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHJldmlzaW9uIDE5
NjM2MCkKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxp
dHlPYmplY3RXcmFwcGVySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODksNyArMTg5LDcgQEAg
KyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFyawogICAgICAgICByZXR1cm4g
bmlsOwogICAgIAogICAgIFRleHRNYXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOwotICAgIGNhY2hl
LT50ZXh0TWFya2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldCh0ZXh0TWFya2VyRGF0YSwgKmNoYXJh
Y3Rlck9mZnNldC5ub2RlLCBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0LCBmYWxzZSk7CisgICAgY2Fj
aGUtPnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFy
YWN0ZXJPZmZzZXQpOwogICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCAmJiAhdGV4dE1hcmtl
ckRhdGEuaWdub3JlZCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICByZXR1cm4gW1tbV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtl
ckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKQEAgLTI0MjUsMTkgKzI0MjUsMjUgQEAg
LSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFyawogCiAtIChXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rl
ck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CiB7Ci0gICAgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCA9
IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAxOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyICp0ZXh0TWFya2VyID0gW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJX
aXRoQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldCBjYWNoZTptX29iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpXTsKKyAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVj
dENhY2hlKCk7CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBDaGFy
YWN0ZXJPZmZzZXQgbmV4dCA9IGNhY2hlLT5uZXh0Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9m
ZnNldCk7CisgICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKnRleHRNYXJrZXIgPSBbV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6bmV4
dCBjYWNoZTpjYWNoZV07CiAgICAgaWYgKHRleHRNYXJrZXIgJiYgdGV4dE1hcmtlci5pc0lnbm9y
ZWQpCi0gICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBuZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zm
c2V0OmNoYXJhY3Rlck9mZnNldF07CisgICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBuZXh0TWFy
a2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Om5leHRdOwogICAgIHJldHVybiB0ZXh0TWFya2VyOwogfQog
CiAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXByZXZpb3VzTWFya2VyRm9yQ2hhcmFj
dGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIGNoYXJh
Y3Rlck9mZnNldC5vZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0IC0gMTsKLSAgICBXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqdGV4dE1hcmtlciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXQgY2Fj
aGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUg
PSBtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJl
dHVybiBuaWw7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzID0gY2FjaGUtPnByZXZpb3Vz
Q2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rlck9mZnNldCk7CisgICAgV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgKnRleHRNYXJrZXIgPSBbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1h
cmtlcldpdGhDaGFyYWN0ZXJPZmZzZXQ6cHJldmlvdXMgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0
Q2FjaGUoKV07CiAgICAgaWYgKHRleHRNYXJrZXIgJiYgdGV4dE1hcmtlci5pc0lnbm9yZWQpCi0g
ICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNl
dDpjaGFyYWN0ZXJPZmZzZXRdOworICAgICAgICB0ZXh0TWFya2VyID0gW3NlbGYgcHJldmlvdXNN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6cHJldmlvdXNdOwogICAgIHJldHVybiB0ZXh0TWFya2Vy
OwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbQkocmV2
aXNpb24gMTk2MzYwKQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTg0MCw0NSAr
ODQwLDUyIEBAIHN0YXRpYyBpZCBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKEEKICAgICBy
ZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJE
YXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLS0gKGlkKW5leHRUZXh0TWFya2Vy
Rm9yTm9kZTooTm9kZSYpbm9kZSBvZmZzZXQ6KGludClvZmZzZXQKK3N0YXRpYyBpZCBuZXh0VGV4
dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgQ2hhcmFjdGVy
T2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7Ci0gICAgaW50IG5leHRPZmZzZXQgPSBvZmZzZXQg
KyAxOwotICAgIGlkIHRleHRNYXJrZXIgPSBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZTpub2RlIG9m
ZnNldDpuZXh0T2Zmc2V0XTsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOwor
ICAgIAorICAgIENoYXJhY3Rlck9mZnNldCBuZXh0ID0gY2FjaGUtPm5leHRDaGFyYWN0ZXJPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBpZCB0ZXh0TWFya2VyID0gdGV4dE1hcmtlckZvckNo
YXJhY3Rlck9mZnNldChjYWNoZSwgbmV4dCk7CiAgICAgaWYgKGlzVGV4dE1hcmtlcklnbm9yZWQo
dGV4dE1hcmtlcikpCi0gICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBuZXh0VGV4dE1hcmtlckZv
ck5vZGU6bm9kZSBvZmZzZXQ6bmV4dE9mZnNldF07CisgICAgICAgIHRleHRNYXJrZXIgPSBuZXh0
VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChjYWNoZSwgbmV4dCk7CiAgICAgcmV0dXJuIHRl
eHRNYXJrZXI7CiB9CiAKLS0gKGlkKXByZXZpb3VzVGV4dE1hcmtlckZvck5vZGU6KE5vZGUmKW5v
ZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CitzdGF0aWMgaWQgcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hh
cmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJh
Y3Rlck9mZnNldCkKIHsKLSAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSBvZmZzZXQgLSAxOwotICAg
IGlkIHRleHRNYXJrZXIgPSBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZTpub2RlIG9mZnNldDpwcmV2
aW91c09mZnNldF07CisgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAK
KyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXMgPSBjYWNoZS0+cHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBpZCB0ZXh0TWFya2VyID0gdGV4dE1hcmtlckZv
ckNoYXJhY3Rlck9mZnNldChjYWNoZSwgcHJldmlvdXMpOwogICAgIGlmIChpc1RleHRNYXJrZXJJ
Z25vcmVkKHRleHRNYXJrZXIpKQotICAgICAgICB0ZXh0TWFya2VyID0gW3NlbGYgcHJldmlvdXNU
ZXh0TWFya2VyRm9yTm9kZTpub2RlIG9mZnNldDpwcmV2aW91c09mZnNldF07CisgICAgICAgIHRl
eHRNYXJrZXIgPSBwcmV2aW91c1RleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoY2FjaGUsIHBy
ZXZpb3VzKTsKICAgICByZXR1cm4gdGV4dE1hcmtlcjsKIH0KIAotLSAoaWQpdGV4dE1hcmtlckZv
ck5vZGU6KE5vZGUmKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0IGlnbm9yZVN0YXJ0OihCT09MKWln
bm9yZVN0YXJ0CistIChpZCluZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFj
dGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQKK3sKKyAgICByZXR1cm4gbmV4dFRleHRNYXJrZXJG
b3JDaGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFjdGVyT2Zm
c2V0KTsKK30KKworLSAoaWQpcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OihD
aGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAogewotICAgIHJldHVybiB0ZXh0TWFya2Vy
Rm9yQ2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIG5vZGUsIG9mZnNl
dCwgZmFsc2UsIGlnbm9yZVN0YXJ0KTsKKyAgICByZXR1cm4gcHJldmlvdXNUZXh0TWFya2VyRm9y
Q2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNoYXJhY3Rlck9mZnNl
dCk7CiB9CiAKLS0gKGlkKXRleHRNYXJrZXJGb3JOb2RlOihOb2RlJilub2RlIG9mZnNldDooaW50
KW9mZnNldAorLSAoaWQpdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zm
c2V0JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvck5v
ZGU6bm9kZSBvZmZzZXQ6b2Zmc2V0IGlnbm9yZVN0YXJ0OllFU107CisgICAgcmV0dXJuIHRleHRN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgY2hhcmFj
dGVyT2Zmc2V0KTsKIH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQo
QVhPYmplY3RDYWNoZSogY2FjaGUsIE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIGJvb2wgdG9Ob2Rl
RW5kLCBib29sIGlnbm9yZVN0YXJ0KQorc3RhdGljIGlkIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJP
ZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFj
dGVyT2Zmc2V0KQogewogICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
Ci0gICAgTm9kZSogZG9tTm9kZSA9ICZub2RlOwotICAgIGlmICghZG9tTm9kZSkKLSAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICAKICAgICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAg
ICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEs
IG5vZGUsIG9mZnNldCwgdG9Ob2RlRW5kLCBpZ25vcmVTdGFydCk7CisgICAgY2FjaGUtPnRleHRN
YXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZz
ZXQpOwogICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCAmJiAhdGV4dE1hcmtlckRhdGEuaWdu
b3JlZCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTQwNjYsMTIgKzQwNzMsMTIgQEAg
LSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIAogICAgIGlmIChb
YXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
Il0pIHsKICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07Ci0gICAgICAgIHJldHVybiBb
c2VsZiBuZXh0VGV4dE1hcmtlckZvck5vZGU6KmNoYXJhY3Rlck9mZnNldC5ub2RlIG9mZnNldDpj
aGFyYWN0ZXJPZmZzZXQub2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIG5leHRUZXh0TWFy
a2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07CiAgICAgfQogICAgIAogICAg
IGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNUZXh0TWFya2VyRm9y
VGV4dE1hcmtlciJdKSB7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQg
PSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAg
ICByZXR1cm4gW3NlbGYgcHJldmlvdXNUZXh0TWFya2VyRm9yTm9kZToqY2hhcmFjdGVyT2Zmc2V0
Lm5vZGUgb2Zmc2V0OmNoYXJhY3Rlck9mZnNldC5vZmZzZXRdOworICAgICAgICByZXR1cm4gW3Nl
bGYgcHJldmlvdXNUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07
CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYTGVm
dFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKQEAgLTQxMTEsOSArNDExOCwx
MiBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgfQogICAg
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUGFyYWdyYXBoVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcild
OwotICAgICAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB2cFJhbmdlID0gbV9vYmplY3QtPnBhcmFn
cmFwaEZvclBvc2l0aW9uKHZpc2libGVQb3MpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVZpc2libGVQb3NpdGlvbnM6dnBSYW5nZS5zdGFydCBlbmRQb3NpdGlvbjp2
cFJhbmdlLmVuZF07CisgICAgICAgIEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gbV9vYmplY3QtPmF4
T2JqZWN0Q2FjaGUoKTsKKyAgICAgICAgaWYgKCFjYWNoZSkKKyAgICAgICAgICAgIHJldHVybiBu
aWw7CisgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFy
YWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOworICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gY2FjaGUtPnBhcmFncmFwaEZvckNoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJP
ZmZzZXQpOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJh
bmdlXTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAi
QVhOZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKQEAgLTQxMjIsNyArNDEz
Miw3IEBAIC0gKGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAg
ICAgIHJldHVybiBuaWw7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQg
PSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAg
ICBDaGFyYWN0ZXJPZmZzZXQgbmV4dEVuZCA9IGNhY2hlLT5uZXh0V29yZEVuZENoYXJhY3Rlck9m
ZnNldChjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZv
ck5vZGU6Km5leHRFbmQubm9kZSBvZmZzZXQ6bmV4dEVuZC5vZmZzZXRdOworICAgICAgICByZXR1
cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpuZXh0RW5kXTsKICAgICB9CiAg
ICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhQcmV2aW91c1dvcmRT
dGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIl0pIHsKQEAgLTQxMzEsNyArNDE0MSw3IEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBj
aGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwogICAgICAgICBDaGFyYWN0
ZXJPZmZzZXQgcHJldmlvdXNTdGFydCA9IGNhY2hlLT5wcmV2aW91c1dvcmRTdGFydENoYXJhY3Rl
ck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtl
ckZvck5vZGU6KnByZXZpb3VzU3RhcnQubm9kZSBvZmZzZXQ6cHJldmlvdXNTdGFydC5vZmZzZXQg
aWdub3JlU3RhcnQ6Tk9dOworICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldDpwcmV2aW91c1N0YXJ0XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhOZXh0TGluZUVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
Il0pIHsKQEAgLTQxNTUsMTMgKzQxNjUsMjEgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0
ZVZhbHVlOihOU1N0cgogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9T
dHJpbmc6QCJBWE5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7Ci0g
ICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9u
Rm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4dE1h
cmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+bmV4dFBhcmFncmFwaEVuZFBvc2l0aW9u
KHZpc2libGVQb3MpXTsKKyAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVjdC0+
YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9IFtzZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAgIENoYXJhY3Rl
ck9mZnNldCBuZXh0RW5kID0gY2FjaGUtPm5leHRQYXJhZ3JhcGhFbmRDaGFyYWN0ZXJPZmZzZXQo
Y2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQ6bmV4dEVuZF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlz
RXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyIl0pIHsKLSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3MgPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyOih0ZXh0TWFya2VyKV07Ci0gICAgICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2VyRm9yVmlzaWJsZVBvc2l0aW9uOm1fb2JqZWN0LT5wcmV2aW91c1Bh
cmFncmFwaFN0YXJ0UG9zaXRpb24odmlzaWJsZVBvcyldOworICAgICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUp
CisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFj
dGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2Vy
XTsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzU3RhcnQgPSBjYWNoZS0+cHJldmlv
dXNQYXJhZ3JhcGhTdGFydENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpOworICAgICAg
ICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpwcmV2aW91c1N0YXJ0
XTsKICAgICB9CiAgICAgCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhT
dHlsZVRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewpJbmRleDogU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAkocmV2aXNpb24gMTk2MzYwKQorKysgU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQyLDI0
ICsxMTQyLDkgQEAgVmlzaWJsZVBvc2l0aW9uIG5leHRTZW50ZW5jZVBvc2l0aW9uKGNvbgogICAg
IHJldHVybiBwb3NpdGlvbi5ob25vckVkaXRpbmdCb3VuZGFyeUF0T3JBZnRlcihuZXh0Qm91bmRh
cnkocG9zaXRpb24sIG5leHRTZW50ZW5jZVBvc2l0aW9uQm91bmRhcnkpKTsKIH0KIAotVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCitOb2RlKiBmaW5k
U3RhcnRPZlBhcmFncmFwaChOb2RlKiBzdGFydE5vZGUsIE5vZGUqIGhpZ2hlc3RSb290LCBOb2Rl
KiBzdGFydEJsb2NrLCBpbnQmIG9mZnNldCwgUG9zaXRpb246OkFuY2hvclR5cGUmIHR5cGUsIEVk
aXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNyb3NzaW5nUnVsZSkKIHsKLSAgICBQ
b3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHAu
ZGVwcmVjYXRlZE5vZGUoKTsKLQotICAgIGlmICghc3RhcnROb2RlKQotICAgICAgICByZXR1cm4g
VmlzaWJsZVBvc2l0aW9uKCk7Ci0gICAgCi0gICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRh
YmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0gICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5v
ZGUoc3RhcnROb2RlKTsKLQotICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhz
dGFydE5vZGUpOwotCiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9kZTsKLSAgICBOb2RlKiBoaWdo
ZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7Ci0gICAgaW50IG9mZnNldCA9IHAuZGVw
cmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBQb3NpdGlvbjo6QW5jaG9yVHlwZSB0eXBlID0g
cC5hbmNob3JUeXBlKCk7Ci0KICAgICBOb2RlKiBuID0gc3RhcnROb2RlOwogICAgIHdoaWxlIChu
KSB7CiAjaWYgRU5BQkxFKFVTRVJTRUxFQ1RfQUxMKQpAQCAtMTE5OCw4ICsxMTgzLDEwIEBAIFZp
c2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgICAgICBp
ZiAobiA9PSBzdGFydE5vZGUgJiYgbyA8IGkpCiAgICAgICAgICAgICAgICAgICAgIGkgPSBzdGQ6
Om1heCgwLCBvKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoLS1pID49IDApIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4obiksIGkgKyAx
KSwgRE9XTlNUUkVBTSk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0W2ldID09ICdcbicp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGkgKyAxOworICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIG47CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBub2RlID0gbjsKQEAgLTEyMTMsMzMg
KzEyMDAsMTIgQEAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0T2ZQYXJhZ3JhcGgoY29uc3QgVgogICAg
ICAgICAgICAgbiA9IE5vZGVUcmF2ZXJzYWw6OnByZXZpb3VzUG9zdE9yZGVyKCpuLCBzdGFydEJs
b2NrKTsKICAgICB9CiAKLSAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNl
dEluQW5jaG9yKSB7Ci0gICAgICAgIEFTU0VSVCh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklz
T2Zmc2V0SW5BbmNob3IgfHwgIW9mZnNldCk7Ci0gICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCB0eXBlKSwgRE9XTlNUUkVBTSk7Ci0gICAgfQotCi0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihub2RlLCB0eXBlKSwgRE9XTlNUUkVB
TSk7CisgICAgcmV0dXJuIG5vZGU7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFw
aChjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBi
b3VuZGFyeUNyb3NzaW5nUnVsZSkKLXsgICAgCi0gICAgaWYgKGMuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLQotICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVp
dmFsZW50KCk7Ci0gICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOwotCi0g
ICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCi0g
ICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVyTm9kZShzdGFydE5vZGUpOwotICAgIAotICAgIE5v
ZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOwotICAgIE5vZGUqIHN0
YXlJbnNpZGVCbG9jayA9IHN0YXJ0QmxvY2s7Ci0gICAgCitOb2RlKiBmaW5kRW5kT2ZQYXJhZ3Jh
cGgoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBoaWdoZXN0Um9vdCwgTm9kZSogc3RheUluc2lkZUJs
b2NrLCBpbnQmIG9mZnNldCwgUG9zaXRpb246OkFuY2hvclR5cGUmIHR5cGUsIEVkaXRpbmdCb3Vu
ZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNyb3NzaW5nUnVsZSkKK3sKICAgICBOb2RlKiBub2Rl
ID0gc3RhcnROb2RlOwotICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9v
dChwKTsKLSAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOwotICAg
IFBvc2l0aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKLQogICAgIE5vZGUq
IG4gPSBzdGFydE5vZGU7CiAgICAgd2hpbGUgKG4pIHsKICNpZiBFTkFCTEUoVVNFUlNFTEVDVF9B
TEwpCkBAIC0xMjc5LDggKzEyNDUsMTAgQEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBo
KGNvbnN0IFZpcwogICAgICAgICAgICAgICAgIGludCBvID0gbiA9PSBzdGFydE5vZGUgPyBvZmZz
ZXQgOiAwOwogICAgICAgICAgICAgICAgIGludCBsZW5ndGggPSB0ZXh0Lmxlbmd0aCgpOwogICAg
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSBvOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24oZG93bmNhc3Q8VGV4dD4obiksIGkpLCBE
T1dOU1RSRUFNKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRleHRbaV0gPT0gJ1xuJykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gaTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBuOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CkBAIC0xMjkzLDcgKzEyNjEsNjIg
QEAgVmlzaWJsZVBvc2l0aW9uIGVuZE9mUGFyYWdyYXBoKGNvbnN0IFZpcwogICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgIG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpuLCBzdGF5SW5zaWRlQmxv
Y2spOwogICAgIH0KKyAgICByZXR1cm4gbm9kZTsKK30KIAorVmlzaWJsZVBvc2l0aW9uIHN0YXJ0
T2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRhcnlDcm9z
c2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCit7CisgICAgUG9zaXRpb24gcCA9IGMuZGVl
cEVxdWl2YWxlbnQoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUgPSBwLmRlcHJlY2F0ZWROb2RlKCk7
CisgICAgCisgICAgaWYgKCFzdGFydE5vZGUpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRp
b24oKTsKKyAgICAKKyAgICBpZiAoaXNSZW5kZXJlZEFzTm9uSW5saW5lVGFibGVJbWFnZU9ySFIo
c3RhcnROb2RlKSkKKyAgICAgICAgcmV0dXJuIHBvc2l0aW9uQmVmb3JlTm9kZShzdGFydE5vZGUp
OworICAgIAorICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUp
OworICAgIAorICAgIE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsK
KyAgICBpbnQgb2Zmc2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFBvc2l0
aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKKyAgICAKKyAgICBOb2RlKiBu
b2RlID0gZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwgc3RhcnRC
bG9jaywgb2Zmc2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7CisgICAgCisgICAgaWYg
KGlzPFRleHQ+KG5vZGUpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KGRvd25jYXN0PFRleHQ+KG5vZGUpLCBvZmZzZXQpLCBET1dOU1RSRUFNKTsKKyAgICAKKyAgICBp
ZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKSB7CisgICAgICAg
IEFTU0VSVCh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IgfHwgIW9m
ZnNldCk7CisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zm
c2V0LCB0eXBlKSwgRE9XTlNUUkVBTSk7CisgICAgfQorICAgIAorICAgIHJldHVybiBWaXNpYmxl
UG9zaXRpb24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOworfQorCitWaXNpYmxl
UG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5n
Qm91bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCit7ICAgIAorICAgIGlm
IChjLmlzTnVsbCgpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAgCisg
ICAgUG9zaXRpb24gcCA9IGMuZGVlcEVxdWl2YWxlbnQoKTsKKyAgICBOb2RlKiBzdGFydE5vZGUg
PSBwLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgCisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGlu
ZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBwb3NpdGlvbkFmdGVy
Tm9kZShzdGFydE5vZGUpOworICAgIAorICAgIE5vZGUqIHN0YXJ0QmxvY2sgPSBlbmNsb3NpbmdC
bG9jayhzdGFydE5vZGUpOworICAgIE5vZGUqIHN0YXlJbnNpZGVCbG9jayA9IHN0YXJ0QmxvY2s7
CisgICAgCisgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOwor
ICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCk7CisgICAgUG9zaXRp
b246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlwZSgpOworICAgIAorICAgIE5vZGUqIG5v
ZGUgPSBmaW5kRW5kT2ZQYXJhZ3JhcGgoc3RhcnROb2RlLCBoaWdoZXN0Um9vdCwgc3RheUluc2lk
ZUJsb2NrLCBvZmZzZXQsIHR5cGUsIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKTsKKyAgICAKKyAgICBp
ZiAoaXM8VGV4dD4obm9kZSkpCisgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRp
b24oZG93bmNhc3Q8VGV4dD4obm9kZSksIG9mZnNldCksIERPV05TVFJFQU0pOworICAgIAogICAg
IGlmICh0eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCiAgICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgb2Zmc2V0LCB0eXBlKSwgRE9X
TlNUUkVBTSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAkocmV2
aXNpb24gMTk2MzYwKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE2LDYgKzExNiw4IEBAIHVuc2lnbmVkIHN1ZmZpeExlbmd0aEZv
clJhbmdlKFJlZlB0cjxSYW4KIHVuc2lnbmVkIHByZWZpeExlbmd0aEZvclJhbmdlKFJlZlB0cjxS
YW5nZT4sIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKIHVuc2lnbmVkIGJhY2t3YXJkU2VhcmNoRm9y
Qm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0SXRlcmF0b3Im
LCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24p
OwogdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihUZXh0
SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNo
RnVuY3Rpb24pOworTm9kZSogZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoTm9kZSosIE5vZGUqLCBOb2Rl
KiwgaW50JiwgUG9zaXRpb246OkFuY2hvclR5cGUmLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1
bGUpOworTm9kZSogZmluZEVuZE9mUGFyYWdyYXBoKE5vZGUqLCBOb2RlKiwgTm9kZSosIGludCYs
IFBvc2l0aW9uOjpBbmNob3JUeXBlJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlKTsKIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCkluZGV4OiBUb29scy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gVG9vbHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTY0MDcpCisrKyBUb29scy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NiBAQAorMjAxNi0wMi0xMCAgTmFuIFdhbmcg
IDxuX3dhbmdAYXBwbGUuY29tPgorCisgICAgICAgIEFYOiBJbXBsZW1lbnQgcGFyYWdyYXBoIHJl
bGF0ZWQgdGV4dCBtYXJrZXIgZnVuY3Rpb25zIHVzaW5nIFRleHRJdGVyYXRvcgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU0MDk4CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yNDI2OTY3NT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwOgorICAgICAgICAobmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNr
KToKKyAgICAgICAgKHBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJDYWxsYmFj
ayk6CisgICAgICAgIChwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJr
ZXJDYWxsYmFjayk6CisgICAgICAgIChuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXJDYWxsYmFjayk6CisgICAgICAgIChzZXRTZWxlY3RlZFZpc2libGVUZXh0UmFuZ2VDYWxs
YmFjayk6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0V29yZEVuZFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBh
cmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJp
bGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpnZXRKU0NsYXNzKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50Lmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnRJT1MubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0V29yZEVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3Jh
cGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChBY2Nlc3NpYmlsaXR5
VUlFbGVtZW50OjpuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAg
KEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRN
YXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3Jh
cGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdXBwb3J0ZWRBY3Rpb25zKToKKyAgICAgICAg
KiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpyaWdodFdvcmRUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAg
ICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJh
Z3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3Jh
cGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVu
bmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaDoKKyAgICAgICAgKiBX
ZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaWRsOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW06CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAg
ICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4
dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bWF0aFBv
c3RzY3JpcHRzRGVzY3JpcHRpb24pOgorICAgICAgICAqIFdlYktpdFRlc3RSdW5uZXIvSW5qZWN0
ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW06CisgICAgICAgIChXVFI6
OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXIpOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToK
KyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVuZFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6X2NvbnZlcnRNYXRoTXVsdGlz
Y3JpcHRQYWlyc1RvU3RyaW5nKToKKwogMjAxNi0wMi0xMCAgSmFzb24gTWFyY2VsbCAgPGptYXJj
ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgY2FsbHMgdG8gcGFyc2VJbnQgaW4gb3Jk
ZXIgdG8gd29yayB3aXRoIG5vbi1pbnRlZ2VyIHJldmlzaW9ucwpJbmRleDogVG9vbHMvRHVtcFJl
bmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHJldmlzaW9uIDE5NjM2
MCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMDEwLDYgKzEwMTAsMzMgQEAgc3RhdGljIEpTVmFsdWVSZWYgbmV4
dFdvcmRFbmRUZXh0TWFya2VyRgogICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6
bWFrZUpTQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09i
amVjdCktPm5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIobWFya2VyKSk7CiB9CiAK
K3N0YXRpYyBKU1ZhbHVlUmVmIHBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJD
YWxsYmFjayhKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2Jq
ZWN0UmVmIHRoaXNPYmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVm
IGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqIG1hcmtlciA9IG51bGxwdHI7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0g
MSkKKyAgICAgICAgbWFya2VyID0gdG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVjdChjb250ZXh0
LCBhcmd1bWVudHNbMF0sIGV4Y2VwdGlvbikpOworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlclJhbmdlOjptYWtlSlNBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKGNv
bnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKG1hcmtlcikpOworfQorCitzdGF0aWMgSlNWYWx1ZVJlZiBwcmV2aW91c1Bh
cmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFjayhKU0NvbnRleHRSZWYg
Y29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNPYmplY3QsIHNp
emVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVl
UmVmKiBleGNlcHRpb24pCit7CisgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIG1hcmtlciA9
IG51bGxwdHI7CisgICAgaWYgKGFyZ3VtZW50Q291bnQgPT0gMSkKKyAgICAgICAgbWFya2VyID0g
dG9UZXh0TWFya2VyKEpTVmFsdWVUb09iamVjdChjb250ZXh0LCBhcmd1bWVudHNbMF0sIGV4Y2Vw
dGlvbikpOworICAgIAorICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6bWFrZUpT
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIoY29udGV4dCwgdG9BWEVsZW1lbnQodGhpc09iamVjdCkt
PnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihtYXJrZXIpKTsK
K30KKworc3RhdGljIEpTVmFsdWVSZWYgbmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIgPSBudWxscHRyOworICAgIGlmIChhcmd1bWVudENv
dW50ID09IDEpCisgICAgICAgIG1hcmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXI6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnRl
eHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5uZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIobWFya2VyKSk7Cit9CisKIHN0YXRpYyBKU1ZhbHVlUmVmIHNldFNlbGVjdGVk
VmlzaWJsZVRleHRSYW5nZUNhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJl
ZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6ZV90IGFyZ3VtZW50Q291bnQs
IGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKIHsK
ICAgICBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50KiB1aUVsZW1lbnQgPSB0b0FYRWxlbWVudCh0aGlz
T2JqZWN0KTsKQEAgLTE2MjAsNiArMTY0NywyMSBAQCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBB
Y2Nlc3NpYmlsaXR5VUlFCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0FjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0Fj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3Jh
cGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopCit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKICNlbmRpZgogCiAvLyBEZXN0cnVjdGlvbgpAQCAt
MTgwNCw2ICsxODQ2LDkgQEAgSlNDbGFzc1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpnZXRK
UwogICAgICAgICB7ICJyaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwgcmln
aHRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAg
ICAgIHsgInByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIiLCBwcmV2aW91
c1dvcmRTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0
cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAg
ICAgeyAibmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsIG5leHRXb3JkRW5kVGV4
dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAorICAgICAgICB7ICJwYXJhZ3Jh
cGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyIiwgcGFyYWdyYXBoVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pT
UHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgInByZXZpb3VzUGFyYWdy
YXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRP
bmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCisgICAgICAgIHsgIm5leHRQ
YXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIsIG5leHRQYXJhZ3JhcGhFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5
IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldFNlbGVj
dGVkQ2hpbGQiLCBzZXRTZWxlY3RlZENoaWxkQ2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRl
UmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKICAgICAgICAgeyAi
c2V0U2VsZWN0ZWRDaGlsZEF0SW5kZXgiLCBzZXRTZWxlY3RlZENoaWxkQXRJbmRleENhbGxiYWNr
LCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250
RGVsZXRlIH0sCiAgICAgICAgIHsgInJlbW92ZVNlbGVjdGlvbkF0SW5kZXgiLCByZW1vdmVTZWxl
Y3Rpb25BdEluZGV4Q2FsbGJhY2ssIGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQ
cm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUgfSwKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgJKHJldmlzaW9uIDE5NjM2MCkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMjY0LDYgKzI2NCw5IEBAIHB1YmxpYzoKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJh
bmdlIHJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIqKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBwcmV2aW91c1dvcmRTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CiAgICAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgbmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
cihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
UmFuZ2UgcGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciopOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHByZXZpb3VzUGFyYWdy
YXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciop
OworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIG5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOwogICAgIEFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyUmFuZ2Ugc2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKICAgICB2b2lkIHJl
c2V0U2VsZWN0ZWRUZXh0TWFya2VyUmFuZ2UoKTsKICAgICBib29sIHNldFNlbGVjdGVkVmlzaWJs
ZVRleHRSYW5nZShBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKik7CkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9pb3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudElPUy5t
bQkocmV2aXNpb24gMTk2MzYwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTU3MCw2ICs1NzAsMjEgQEAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRQogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0YXJ0
VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKQoreworICAg
IHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCiAjZW5k
aWYgLy8gU1VQUE9SVFNfQVhfVEVYVE1BUktFUlMgJiYgUExBVEZPUk0oSU9TKQogCiAjcHJhZ21h
IG1hcmsgVW51c2VkCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMvQWNjZXNzaWJpbGl0
eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
QWNjZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQkocmV2aXNpb24gMTk2MzYwKQorKysgVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTE4ODYsNiArMTg4NiwzNiBAQCBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nl
c3NpYmlsaXR5VUlFCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK0FjY2Vzc2liaWxpdHlUZXh0
TWFya2VyUmFuZ2UgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sK
KyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBb
bV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYUGFyYWdyYXBoVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciIgZm9yUGFyYW1ldGVyOihpZCl0ZXh0TWFya2VyLT5wbGF0
Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisgICAgCisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2li
aWxpdHlVSUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sKKyAgICBCRUdJTl9B
WF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCBwcmV2aW91c1RleHRNYXJrZXIgPSBbbV9lbGVtZW50
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyIiBmb3JQYXJhbWV0ZXI6KGlkKXRleHRNYXJrZXItPnBsYXRm
b3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIocHJl
dmlvdXNUZXh0TWFya2VyKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisgICAgCisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vzc2liaWxp
dHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VY
Q0VQVElPTlMKKyAgICBpZCBuZXh0VGV4dE1hcmtlciA9IFttX2VsZW1lbnQgYWNjZXNzaWJpbGl0
eUF0dHJpYnV0ZVZhbHVlOkAiQVhOZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiIGZvclBhcmFtZXRlcjooaWQpdGV4dE1hcmtlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOwor
ICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihuZXh0VGV4dE1hcmtlcik7CisgICAg
RU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCiAj
ZW5kaWYgLy8gU1VQUE9SVFNfQVhfVEVYVE1BUktFUlMgJiYgUExBVEZPUk0oTUFDKQogCiBKU1N0
cmluZ1JlZiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpzdXBwb3J0ZWRBY3Rpb25zKCkKSW5kZXg6
IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1
bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkocmV2aXNpb24gMTk2MzYwKQorKysgVG9v
bHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDYgKzI0OSw5IEBAIFBhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXJSYW5nZT4KIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmlnaHRXb3JkVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIG51bGxwdHI7
IH0KIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKSB7IHJldHVybiBudWxscHRyOyB9CiBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0V29yZEVuZFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikgeyByZXR1cm4gbnVs
bHB0cjsgfQorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyKikgeyByZXR1cm4gbnVsbHB0cjsgfQorUGFzc1JlZlB0cjxB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFn
cmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikg
eyByZXR1cm4gbnVsbHB0cjsgfQorUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4g
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikgeyByZXR1cm4gbnVsbHB0cjsg
fQogI2VuZGlmCiAKIH0gLy8gbmFtZXNwYWNlIFdUUgpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlF
bGVtZW50LmgJKHJldmlzaW9uIDE5NjM2MCkKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
NTUsNiArMjU1LDkgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZT4gcmlnaHRXb3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciopOwogICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXI+IHByZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqKTsKICAgICBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBu
ZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
Kik7CisgICAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlPiBwYXJhZ3Jh
cGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7
CisgICAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gbmV4dFBhcmFncmFwaEVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CisgICAg
UGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gcHJldmlvdXNQYXJhZ3JhcGhTdGFy
dFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CiAKICAg
ICAvLyBSZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBvZiBzdXBwb3J0ZWQgYWN0aW9ucyBmb3IgYW4g
ZWxlbWVudC4KICAgICBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gc3VwcG9ydGVkQWN0aW9ucygp
IGNvbnN0OwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5k
aW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJL
aXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuaWRsCShyZXZpc2lvbiAxOTYzNjApCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0JpbmRpbmdzL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuaWRsCSh3b3JraW5nIGNv
cHkpCkBAIC0yMDUsNiArMjA1LDkgQEAgaW50ZXJmYWNlIEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQg
ewogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgcmlnaHRXb3JkVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyKTsKICAg
ICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBwcmV2aW91c1dvcmRTdGFydFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXIpOwogICAgIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyIG5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcik7CisgICAgQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSBwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
IHByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBu
ZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgdGV4dE1hcmtlcik7CiAKICAgICAvLyBSZXR1cm5zIGFuIG9yZGVyZWQgbGlzdCBvZiBz
dXBwb3J0ZWQgYWN0aW9ucyBmb3IgYW4gZWxlbWVudC4KICAgICByZWFkb25seSBhdHRyaWJ1dGUg
RE9NU3RyaW5nIHN1cHBvcnRlZEFjdGlvbnM7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2li
aWxpdHlVSUVsZW1lbnRJT1MubW0JKHJldmlzaW9uIDE5NjM2MCkKKysrIFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvaW9zL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0J
KHdvcmtpbmcgY29weSkKQEAgLTExMTYsNiArMTExNiwyMSBAQCBQYXNzUmVmUHRyPEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyPiBBY2NlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1Bhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciogdGV4dE1hcmtlcikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBh
cmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KiB0ZXh0TWFya2VyKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1Bh
cmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIqIHRleHRNYXJrZXIpCit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKIEpTUmV0YWluUHRy
PEpTU3RyaW5nUmVmPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjptYXRoUG9zdHNjcmlwdHNEZXNj
cmlwdGlvbigpIGNvbnN0CiB7CiAgICAgcmV0dXJuIDA7CkluZGV4OiBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0Fj
Y2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0JKHJldmlzaW9uIDE5NjM2MCkKKysrIFRvb2xzL1dl
YktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRN
YWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTE5MTMsNiArMTkxMywzNiBAQCBQYXNzUmVmUHRyPEFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2NlCiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKK1Bh
c3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMK
KyAgICBpZCB0ZXh0TWFya2VyUmFuZ2UgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1
dGVWYWx1ZTpAIkFYUGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciIgZm9yUGFy
YW1ldGVyOihpZCl0ZXh0TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U6OmNyZWF0ZSh0ZXh0TWFya2VyUmFuZ2UpOwor
ICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICAKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIEJFR0lOX0FYX09CSkNfRVhD
RVBUSU9OUworICAgIGlkIHByZXZpb3VzUGFyYWdyYXBoU3RhcnRNYXJrZXIgPSBbbV9lbGVtZW50
IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYUHJldmlvdXNQYXJhZ3JhcGhTdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyIiBmb3JQYXJhbWV0ZXI6KGlkKXRleHRNYXJrZXItPnBsYXRm
b3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6OmNy
ZWF0ZShwcmV2aW91c1BhcmFncmFwaFN0YXJ0TWFya2VyKTsKKyAgICBFTkRfQVhfT0JKQ19FWENF
UFRJT05TCisgICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNz
aWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1h
cmtlcikKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCBuZXh0UGFyYWdy
YXBoRW5kTWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJB
WE5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIgZm9yUGFyYW1ldGVyOihp
ZCl0ZXh0TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyOjpjcmVhdGUobmV4dFBhcmFncmFwaEVuZE1hcmtlcik7CisgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCiBzdGF0
aWMgTlNTdHJpbmcgKl9jb252ZXJ0TWF0aE11bHRpc2NyaXB0UGFpcnNUb1N0cmluZyhOU0FycmF5
ICpwYWlycykKIHsKICAgICBfX2Jsb2NrIE5TTXV0YWJsZVN0cmluZyAqcmVzdWx0ID0gW05TTXV0
YWJsZVN0cmluZyBzdHJpbmddOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MzYwKQorKysgTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTYtMDIt
MTAgIE5hbiBXYW5nICA8bl93YW5nQGFwcGxlLmNvbT4KKworICAgICAgICBBWDogSW1wbGVtZW50
IHBhcmFncmFwaCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB1c2luZyBUZXh0SXRlcmF0
b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDA5
OAorICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjQyNjk2NzU+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1h
cmtlci1wYXJhZ3JhcGgtbmF2LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5hdi5odG1sOiBBZGRlZC4KKwogMjAx
Ni0wMi0wOSAgTmFuIFdhbmcgIDxuX3dhbmdAYXBwbGUuY29tPgogCiAgICAgICAgIEFYOiBJbXBs
ZW1lbnQgd29yZCByZWxhdGVkIHRleHQgbWFya2VyIGZ1bmN0aW9ucyB1c2luZyBUZXh0SXRlcmF0
b3IKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFn
cmFwaC1uYXYtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2FjY2Vzc2li
aWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFncmFwaC1uYXYtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdy
YXBoLW5hdi1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorcGFy
YWdyYXBoIHRlc3QKK1Rlc3QgQ29udGVudGVkaXRhYmxlIGlzIHdvcmtpbmcuCitjIGQKK3Rlc3Qg
YXVkaW8gZmlsZQorY2FuJ3Qgc2VsZWN0Civlt6flhYvlipsg5piv6aOf54mp5ZCXPwor2YPZitmB
INit2KfZhNmD2J8KK2JvdGggICBzcGFjZXMKK2xpbmUgYnJlYWtzCitzb21lCit0ZXh0CitUaGlz
IHRlc3RzIHRoYXQgcGFyYWdyYXBoIG5hdmlnYXRpb24gaXMgd29ya2luZyBjb3JyZWN0bHkuCisK
K09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZv
bGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDdXJyZW50IGNoYXJhY3RlciBpczogcAor
Q3VycmVudCBwYXJhZ3JhcGggaXM6IHBhcmFncmFwaCB0ZXN0CitQcmUgcGFyYWdyYXBoIHN0YXJ0
IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogcGFyYWdyYXBoIHRlc3QKKworQ3VycmVudCBjaGFyYWN0
ZXIgaXM6IFQKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBUZXN0IENvbnRlbnQKK1ByZSBwYXJhZ3Jh
cGggc3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5kOiBUZXN0IENvbnRlbnQKKworQ3VycmVudCBj
aGFyYWN0ZXIgaXM6IGMKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBjIFtBVFRBQ0hNRU5UXWQKK1By
ZSBwYXJhZ3JhcGggc3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5kOiBjIFtBVFRBQ0hNRU5UXWQK
KworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IGQKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBjIFtBVFRB
Q0hNRU5UXWQKK1ByZSBwYXJhZ3JhcGggc3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5kOiBjIFtB
VFRBQ0hNRU5UXWQKK3Rlc3QgYXVkaW8g77+8ZmlsZQorCitDdXJyZW50IGNoYXJhY3RlciBpczog
dAorQ3VycmVudCBwYXJhZ3JhcGggaXM6IHRlc3QgYXVkaW8gW0FUVEFDSE1FTlRdZmlsZQorUHJl
IHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6IHRlc3QgYXVkaW8gW0FUVEFD
SE1FTlRdZmlsZQorCitDdXJyZW50IGNoYXJhY3RlciBpczogYworQ3VycmVudCBwYXJhZ3JhcGgg
aXM6IGNhbid0IHNlbGVjdAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBl
bmQ6IGNhbid0IHNlbGVjdAorCitDdXJyZW50IGNoYXJhY3RlciBpczog5benCitDdXJyZW50IHBh
cmFncmFwaCBpczog5ben5YWL5YqbIOaYr+mjn+eJqeWQlz8KK1ByZSBwYXJhZ3JhcGggc3RhcnQg
dG8gbmV4dCBwYXJhZ3JhcGggZW5kOiDlt6flhYvlipsg5piv6aOf54mp5ZCXPworCitDdXJyZW50
IGNoYXJhY3RlciBpczog2YMKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiDZg9mK2YEg2K3Yp9mE2YPY
nworUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6INmD2YrZgSDYrdin
2YTZg9ifCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiBiCitDdXJyZW50IHBhcmFncmFwaCBpczog
Ym90aCAgIHNwYWNlcworUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6
IGJvdGggICBzcGFjZXMKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IGkKK0N1cnJlbnQgcGFyYWdy
YXBoIGlzOiBsaW5lIGJyZWFrcworUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFw
aCBlbmQ6IGxpbmUgYnJlYWtzCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiBzCitDdXJyZW50IHBh
cmFncmFwaCBpczogc29tZQorUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBl
bmQ6IHNvbWUKKworQ3VycmVudCBjaGFyYWN0ZXIgaXM6IHQKK0N1cnJlbnQgcGFyYWdyYXBoIGlz
OiB0ZXh0CitQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogdGV4dAor
CitUZXN0IGdvaW5nIGZvcndhcmQuCitFbmQgcGFyYWdyYXBoOiB0ZXh0CisKK1Rlc3QgZ29pbmcg
YmFja3dhcmRzLgorU3RhcnQgcGFyYWdyYXBoOiBwYXJhZ3JhcGggdGVzdAorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3Rz
L2FjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFncmFwaC1uYXYuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1wYXJhZ3Jh
cGgtbmF2Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci1wYXJhZ3JhcGgtbmF2Lmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxODAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4K
KzxodG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+IAorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8c3R5bGU+
CisudXNlcnNlbGVjdCB7IHVzZXItc2VsZWN0OiBub25lOyAtd2Via2l0LXVzZXItc2VsZWN0OiBu
b25lOyB9Cis8L3N0eWxlPgorPGJvZHkgaWQ9ImJvZHkiPgorCis8ZGl2IGlkPSJ0ZXh0MSIgdGFi
aW5kZXg9IjAiPgorcGFyYTxzcGFuPmdyYXBoPC9zcGFuPgordGVzdAorPC9kaXY+CisKKzxkaXYg
aWQ9InRleHQyIj4KK1Rlc3QgQ29udGVudDxzcGFuIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSI+ZWRp
dGFibGUgaXMgd29ya2luZy48L3NwYW4+Cis8L2Rpdj4KKworPGRpdiBpZD0idGV4dDMiPgorYyA8
aW1nIHNyYz0iIyIgYXJpYS1sYWJlbD0iYmxhaCIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICNh
YWFhYWE7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiAxMDBweDsiPmQKKzwvZGl2PgorCis8ZGl2IGlk
PSJ0ZXh0NCI+Cit0ZXN0IGF1ZGlvIDxhdWRpbyBjb250cm9scz48c291cmNlIHNyYz0idGVzdC5t
cDMiIHR5cGU9ImF1ZGlvL21wZWciPjwvYXVkaW8+ZmlsZQorPC9kaXY+CisKKzxkaXYgY2xhc3M9
InVzZXJzZWxlY3QiIGlkPSJ0ZXh0NSI+Y2FuJ3Qgc2VsZWN0PC9kaXY+CisKKzxkaXYgaWQ9InRl
eHQ2Ij4KK+W3p+WFi+WKmwor5piv6aOf54mp5ZCXPworPC9kaXY+CisKKzxkaXYgaWQ9InRleHQ2
YSI+CivZg9mK2YEg2K3Yp9mE2YPYnworPC9kaXY+CisKKzxwcmUgaWQ9InRleHQ3Ij4KK2JvdGgg
ICBzcGFjZXMKK2xpbmUgYnJlYWtzCis8L3ByZT4KKworPGRpdiBpZD0idGV4dDgiPgorc29tZTxi
cj50ZXh0Cis8L2Rpdj4KKworPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKworPHNjcmlwdD4KKworICAgIGRlc2NyaXB0aW9uKCJUaGlzIHRlc3RzIHRo
YXQgcGFyYWdyYXBoIG5hdmlnYXRpb24gaXMgd29ya2luZyBjb3JyZWN0bHkuIik7CisgICAgCisg
ICAgaWYgKHdpbmRvdy5hY2Nlc3NpYmlsaXR5Q29udHJvbGxlcikgeworICAgICAgICAKKyAgICAg
ICAgLy8gQ2hlY2sgdGhhdCB3ZSBjYW4gZ2V0IHRoZSBwYXJhZ3JhcGggcmFuZ2Ugd2l0aCBzcGFu
IHRhZy4KKyAgICAgICAgdmFyIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3Np
YmxlRWxlbWVudEJ5SWQoInRleHQxIik7CisgICAgICAgIHZhciB0ZXh0TWFya2VyUmFuZ2UgPSB0
ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHZhciBzdGFydE1h
cmtlciA9IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJS
YW5nZSk7CisgICAgICAgIHZhciBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFy
dE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB3aXRoIGNvbnRl
bnRlZGl0YWJsZS4KKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vz
c2libGVFbGVtZW50QnlJZCgidGV4dDIiKTsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4
dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICBzdGFydE1hcmtlciA9
IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7
CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAx
LCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHdpdGggcmVwbGFjZWQgZWxlbWVu
dHMuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInRleHQzIik7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAg
ICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtlciwgMSwgdGV4dCk7
CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIs
IDMsIHRleHQpOworICAgICAgICAvLyBBdWRpbyB0YWcuCisgICAgICAgIHRleHQgPSBhY2Nlc3Np
YmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ0Iik7CisgICAgICAg
IHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsK
KyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJS
YW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFu
ZFZlcmlmeShzdGFydE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVj
ayB3aXRoIHVzZXItc2VsZWN0Om5vbmUuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ1Iik7CisgICAgICAgIHRleHRNYXJr
ZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAg
c3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0
TWFya2VyUmFuZ2UpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShz
dGFydE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBNdWx0aS1sYW5ndWFn
ZXMuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInRleHQ2Iik7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAg
ICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtlciwgMSwgdGV4dCk7
CisgICAgICAgIAorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNz
aWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NmEiKTsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4
dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICBzdGFydE1hcmtlciA9
IHRleHQuc3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7
CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAx
LCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoZSBjYXNlIHdpdGggcHJlIHRh
Zy4KKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250cm9sbGVyLmFjY2Vzc2libGVFbGVt
ZW50QnlJZCgidGV4dDciKTsKKyAgICAgICAgdGV4dE1hcmtlclJhbmdlID0gdGV4dC50ZXh0TWFy
a2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAgICBzdGFydE1hcmtlciA9IHRleHQuc3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgICAg
IGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KHN0YXJ0TWFya2VyLCAxLCB0ZXh0KTsK
KyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoY3VycmVudE1hcmtlciwg
MTUsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhlIGNhc2Ugd2l0aCBiciB0
YWcuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5hY2Nlc3NpYmxlRWxl
bWVudEJ5SWQoInRleHQ4Iik7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9IHRleHQudGV4dE1h
cmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAg
ICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtlciwgMSwgdGV4dCk7
CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIs
IDUsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hlY2sgdGhlIHBhcmFncmFwaCBtYXJr
ZXIgcnVucyBmcm9tIHN0YXJ0IHRvIGVuZCwgYW5kIGJhY2t3YXJkcy4KKyAgICAgICAgLy8gTWFr
ZSBzdXJlIGl0IHdvbid0IGhhbmcuCisgICAgICAgIHZlcmlmeURvY3VtZW50KHRleHQpOworICAg
ICAgICAKKyAgICAgICAgZnVuY3Rpb24gYWR2YW5jZUFuZFZlcmlmeShjdXJyZW50TWFya2VyLCBv
ZmZzZXQsIG9iaikgeworICAgICAgICAgICAgdmFyIHByZXZpb3VzTWFya2VyID0gY3VycmVudE1h
cmtlcjsKKyAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgb2Zmc2V0OyBpKyspIHsKKyAg
ICAgICAgICAgICAgICBwcmV2aW91c01hcmtlciA9IGN1cnJlbnRNYXJrZXI7CisgICAgICAgICAg
ICAgICAgY3VycmVudE1hcmtlciA9IG9iai5uZXh0VGV4dE1hcmtlcihwcmV2aW91c01hcmtlcik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2ZXJpZnlQYXJhZ3JhcGhSYW5nZUZvclRleHRN
YXJrZXIocHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIsIG9iaik7CisgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudE1hcmtlcjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rp
b24gcmVwbGFjZUF0dGFjaG1lbnRJblN0cmluZyhzdHIpIHsKKyAgICAgICAgICAgIHN0ciA9ICBz
dHIucmVwbGFjZShTdHJpbmcuZnJvbUNoYXJDb2RlKDY1NTMyKSwgIltBVFRBQ0hNRU5UXSIpOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVu
Y3Rpb24gdmVyaWZ5UGFyYWdyYXBoUmFuZ2VGb3JUZXh0TWFya2VyKHByZU1hcmtlciwgdGV4dE1h
cmtlciwgb2JqKSB7CisgICAgICAgICAgICB2YXIgbWFya2VyUmFuZ2UgPSBvYmoudGV4dE1hcmtl
clJhbmdlRm9yTWFya2VycyhwcmVNYXJrZXIsIHRleHRNYXJrZXIpOworICAgICAgICAgICAgdmFy
IGN1cnJlbnRDaGFyYWN0ZXIgPSByZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKG9iai5zdHJpbmdG
b3JUZXh0TWFya2VyUmFuZ2UobWFya2VyUmFuZ2UpKTsKKyAgICAgICAgICAgIGRlYnVnKCJDdXJy
ZW50IGNoYXJhY3RlciBpczogIiArIGN1cnJlbnRDaGFyYWN0ZXIpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICB2YXIgcGFyYWdyYXBoUmFuZ2UgPSBvYmoucGFyYWdyYXBoVGV4dE1hcmtlclJh
bmdlRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBwYXJhZ3JhcGgg
PSByZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2Uo
cGFyYWdyYXBoUmFuZ2UpKTsKKyAgICAgICAgICAgIGRlYnVnKCJDdXJyZW50IHBhcmFncmFwaCBp
czogIiArIHBhcmFncmFwaCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwcmVTdGFy
dCA9IG9iai5wcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIodGV4
dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgbmV4dEVuZCA9IG9iai5uZXh0UGFyYWdyYXBoRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIodGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgcHJl
QW5kTmV4dFBhcmFncmFwaFJhbmdlID0gb2JqLnRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnMocHJl
U3RhcnQsIG5leHRFbmQpOworICAgICAgICAgICAgdmFyIHByZUFuZE5leHRQYXJhZ3JhcGggPSBy
ZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKG9iai5zdHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UocHJl
QW5kTmV4dFBhcmFncmFwaFJhbmdlKSk7CisgICAgICAgICAgICBkZWJ1ZygiUHJlIHBhcmFncmFw
aCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6ICIgKyBwcmVBbmROZXh0UGFyYWdyYXBoICsg
IlxuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGZ1bmN0aW9uIHZlcmlmeURvY3Vt
ZW50KG9iaikgeworICAgICAgICAgICAgdmFyIHN0YXJ0ID0gb2JqLnN0YXJ0VGV4dE1hcmtlcjsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR29pbmcgZm9yd2FyZC4KKyAgICAgICAgICAg
IGRlYnVnKCJUZXN0IGdvaW5nIGZvcndhcmQuIik7CisgICAgICAgICAgICB2YXIgY3VycmVudCA9
IHN0YXJ0OworICAgICAgICAgICAgdmFyIGVuZCA9ICJ0ZXh0IjsKKyAgICAgICAgICAgIHZhciBj
dXJyUGFyYWdyYXBoID0gIiI7CisgICAgICAgICAgICB3aGlsZShjdXJyUGFyYWdyYXBoICE9IGVu
ZCkgeworICAgICAgICAgICAgICAgIHZhciBjdXJyUmFuZ2UgPSBvYmoucGFyYWdyYXBoVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlcihjdXJyZW50KTsKKyAgICAgICAgICAgICAgICBjdXJyUGFy
YWdyYXBoID0gb2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShjdXJyUmFuZ2UpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnQgPSBvYmoubmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyKGN1cnJlbnQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoIkVuZCBw
YXJhZ3JhcGg6ICIgKyByZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKGN1cnJQYXJhZ3JhcGgpKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gR29pbmcgYmFja3dhcmRzLgorICAgICAgICAg
ICAgZGVidWcoIlxuVGVzdCBnb2luZyBiYWNrd2FyZHMuIik7CisgICAgICAgICAgICB2YXIgc3Rh
cnQgPSAicGFyYWdyYXBoIHRlc3QiOworICAgICAgICAgICAgY3VyclBhcmFncmFwaCA9ICIiOyAK
KyAgICAgICAgICAgIHdoaWxlKGN1cnJQYXJhZ3JhcGggIT0gc3RhcnQpIHsKKyAgICAgICAgICAg
ICAgICB2YXIgY3VycmVudFJhbmdlID0gb2JqLnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRl
eHRNYXJrZXIoY3VycmVudCk7CisgICAgICAgICAgICAgICAgY3VyclBhcmFncmFwaCA9IG9iai5z
dHJpbmdGb3JUZXh0TWFya2VyUmFuZ2UoY3VycmVudFJhbmdlKTsKKyAgICAgICAgICAgICAgICBj
dXJyZW50ID0gb2JqLnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
cihjdXJyZW50KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRlYnVnKCJTdGFydCBwYXJh
Z3JhcGg6ICIgKyByZXBsYWNlQXR0YWNobWVudEluU3RyaW5nKGN1cnJQYXJhZ3JhcGgpKTsKKyAg
ICAgICAgfQorICAgIH0KKworPC9zY3JpcHQ+CisKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>271236</attachid>
            <date>2016-02-12 15:37:19 -0800</date>
            <delta_ts>2016-02-12 21:24:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>72246</size>
            <attacher name="Nan Wang">n_wang</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5NjQyMykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDcxIEBACisyMDE2LTAyLTEyICBOYW4gV2Fu
ZyAgPG5fd2FuZ0BhcHBsZS5jb20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBwYXJhZ3JhcGgg
cmVsYXRlZCB0ZXh0IG1hcmtlciBmdW5jdGlvbnMgdXNpbmcgVGV4dEl0ZXJhdG9yCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwOTgKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI0MjY5Njc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzaW5nIENoYXJhY3Rlck9mZnNldCB0byBpbXBsZW1lbnQgcGFy
YWdyYXBoIHJlbGF0ZWQgdGV4dCBtYXJrZXIgY2FsbHMuIFJldXNlZAorICAgICAgICBsb2dpYyBm
cm9tIFZpc2libGVVbml0cyBjbGFzcy4gQW5kIHJlZmFjdG9yZWQgdGV4dE1hcmtlckZvckNoYXJh
Y3Rlck9mZnNldCBtZXRob2QKKyAgICAgICAgdG8gZ2V0IGJldHRlciBwZXJmb3JtYW5jZS4gQWxz
byBmaXhlZCBhbiBpc3N1ZSB3aGVyZSB3ZSBjYW4ndCBuYXZpZ2F0ZSB0aHJvdWdoIGEgdGV4dAor
ICAgICAgICBub2RlIHdpdGggbGluZSBicmVha3MgaW4gaXQgdXNpbmcgbmV4dC9wcmV2aW91c0No
YXJhY3Rlck9mZnNldCBjYWxsLgorCisgICAgICAgIFRlc3Q6IGFjY2Vzc2liaWxpdHkvbWFjL3Rl
eHQtbWFya2VyLXBhcmFncmFwaC1uYXYuaHRtbAorCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9B
WE9iamVjdENhY2hlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRyYXZl
cnNlVG9PZmZzZXRJblJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnN0
YXJ0T3JFbmRUZXh0TWFya2VyRGF0YUZvclJhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2Jq
ZWN0Q2FjaGU6OmNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hh
cmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OkFYT2JqZWN0Q2FjaGU6OnRleHRNYXJr
ZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6bmV4dE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6
dGV4dE1hcmtlckRhdGFGb3JWaXNpYmxlUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6QVhP
YmplY3RDYWNoZTo6bmV4dENoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9i
amVjdENhY2hlOjpwcmV2aW91c0NoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpz
dGFydFdvcmRCb3VuZGFyeSk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpzdGFy
dENoYXJhY3Rlck9mZnNldE9mV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hl
OjplbmRDaGFyYWN0ZXJPZmZzZXRPZldvcmQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RD
YWNoZTo6cHJldmlvdXNXb3JkU3RhcnRDaGFyYWN0ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6cHJldmlvdXNXb3JkQm91bmRhcnkpOgorICAgICAgICAoV2ViQ29y
ZTo6QVhPYmplY3RDYWNoZTo6c3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaCk6CisgICAg
ICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjplbmRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFw
aCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpwYXJhZ3JhcGhGb3JDaGFyYWN0
ZXJPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6bmV4dFBhcmFncmFw
aEVuZENoYXJhY3Rlck9mZnNldCk6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpw
cmV2aW91c1BhcmFncmFwaFN0YXJ0Q2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6
OkFYT2JqZWN0Q2FjaGU6OnJvb3RBWEVkaXRhYmxlRWxlbWVudCk6CisgICAgICAgICogYWNjZXNz
aWJpbGl0eS9BWE9iamVjdENhY2hlLmg6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJPZmZz
ZXQ6OnJlbWFpbmluZyk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJPZmZzZXQ6OmlzTnVs
bCk6CisgICAgICAgIChXZWJDb3JlOjpDaGFyYWN0ZXJPZmZzZXQ6OmlzRXF1YWwpOgorICAgICAg
ICAoV2ViQ29yZTo6QVhPYmplY3RDYWNoZTo6aXNOb2RlSW5Vc2UpOgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tOgorICAgICAg
ICAoK1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9m
ZnNldDpjYWNoZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIg
bmV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgcHJldmlvdXNNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6Cisg
ICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtl
cnM6XSk6CisgICAgICAgICogYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXJNYWMubW06CisgICAgICAgIChzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKToK
KyAgICAgICAgKG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKHBy
ZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldCk6CisgICAgICAgICgtW1dlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyIG5leHRUZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0Ol0p
OgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBwcmV2aW91c1RleHRN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6XSk6CisgICAgICAgICh0
ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOmZvclBhcmFtZXRlcjpd
KToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgbmV4dFRleHRNYXJr
ZXJGb3JOb2RlOm9mZnNldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgcHJldmlvdXNUZXh0TWFya2VyRm9yTm9kZTpvZmZzZXQ6XSk6IERlbGV0
ZWQuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJG
b3JOb2RlOm9mZnNldDppZ25vcmVTdGFydDpdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlckZvck5vZGU6b2Zmc2V0Ol0pOiBEZWxl
dGVkLgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRTZW50ZW5jZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRTdGFydE9m
UGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRFbmRPZlBhcmFncmFwaCk6CisgICAg
ICAgIChXZWJDb3JlOjpzdGFydE9mUGFyYWdyYXBoKToKKyAgICAgICAgKFdlYkNvcmU6OmVuZE9m
UGFyYWdyYXBoKToKKyAgICAgICAgKiBlZGl0aW5nL1Zpc2libGVVbml0cy5oOgorCiAyMDE2LTAy
LTExICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnbGVu
Z3RoJyBwcm9wZXJ0eSB0byB0aGUgcHJvdG90eXBlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHJldmlzaW9uIDE5NjQyMykKKysrIFNv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTgzLDYgKzgzLDcgQEAKICNpbmNsdWRlICJTY3JvbGxWaWV3LmgiCiAjaW5jbHVkZSAi
VGV4dEJvdW5kYXJpZXMuaCIKICNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgogI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CiAKICNpZiBFTkFCTEUoVklE
RU8pCkBAIC0xNDY5LDYgKzE0NzAsOSBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
dHJhdmVyc2VUCiAgICAgICAgIH0KICAgICB9CiAgICAgCisgICAgLy8gU29tZXRpbWVzIHRleHQg
Y29udGVudHMgaW4gYSBub2RlIGFyZSBzcGxpdHRlZCBpbnRvIHNldmVyYWwgaXRlcmF0aW9ucywg
c28gdGhhdCBpdGVyYXRvci5yYW5nZSgpLT5zdGFydE9mZnNldCgpCisgICAgLy8gbWlnaHQgbm90
IGJlIHRoZSBjb3JyZWN0IGNoYXJhY3RlciBjb3VudC4gSGVyZSB3ZSB1c2UgYSBwcmV2aW91c05v
ZGUgb2JqZWN0IHRvIGtlZXAgdHJhY2sgb2YgdGhhdC4KKyAgICBOb2RlKiBwcmV2aW91c05vZGUg
PSBudWxscHRyOwogICAgIGZvciAoOyAhaXRlcmF0b3IuYXRFbmQoKTsgaXRlcmF0b3IuYWR2YW5j
ZSgpKSB7CiAgICAgICAgIGludCBjdXJyZW50TGVuZ3RoID0gaXRlcmF0b3IudGV4dCgpLmxlbmd0
aCgpOwogICAgICAgICBib29sIGhhc1JlcGxhY2VkTm9kZU9yQlIgPSBmYWxzZTsKQEAgLTE0OTcs
MjIgKzE1MDEsMjcgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnRyYXZlcnNlVAog
ICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGROb2RlICYmIGNoaWxkTm9kZS0+cmVuZGVyZXIo
KSAmJiBjaGlsZE5vZGUtPnJlbmRlcmVyKCktPmlzQlIoKSkgewogICAgICAgICAgICAgICAgICAg
ICAgICAgY3VycmVudE5vZGUgPSBjaGlsZE5vZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICBo
YXNSZXBsYWNlZE5vZGVPckJSID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoY3VycmVudE5vZGUgIT0gcHJldmlvdXNOb2Rl
KQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgb2Zmc2V0U29GYXIgKz0gY3VycmVudExlbmd0aDsK
ICAgICAgICAgfQogCi0gICAgICAgIGxhc3RMZW5ndGggPSBjdXJyZW50TGVuZ3RoOwotICAgICAg
ICBsYXN0U3RhcnRPZmZzZXQgPSBoYXNSZXBsYWNlZE5vZGVPckJSID8gMCA6IGl0ZXJhdG9yLnJh
bmdlKCktPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIGlmIChjdXJyZW50Tm9kZSA9PSBwcmV2aW91
c05vZGUpCisgICAgICAgICAgICBsYXN0TGVuZ3RoICs9IGN1cnJlbnRMZW5ndGg7CisgICAgICAg
IGVsc2UgeworICAgICAgICAgICAgbGFzdExlbmd0aCA9IGN1cnJlbnRMZW5ndGg7CisgICAgICAg
ICAgICBsYXN0U3RhcnRPZmZzZXQgPSBoYXNSZXBsYWNlZE5vZGVPckJSID8gMCA6IGl0ZXJhdG9y
LnJhbmdlKCktPnN0YXJ0T2Zmc2V0KCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIC8v
IEJyZWFrIGVhcmx5IGlmIHdlIGhhdmUgYWR2YW5jZWQgZW5vdWdoIGNoYXJhY3RlcnMuCiAgICAg
ICAgIGlmICghdG9Ob2RlRW5kICYmIG9mZnNldFNvRmFyID49IG9mZnNldCkgewotICAgICAgICAg
ICAgb2Zmc2V0SW5DaGFyYWN0ZXIgPSBvZmZzZXQgLSAob2Zmc2V0U29GYXIgLSBjdXJyZW50TGVu
Z3RoKTsKKyAgICAgICAgICAgIG9mZnNldEluQ2hhcmFjdGVyID0gb2Zmc2V0IC0gKG9mZnNldFNv
RmFyIC0gbGFzdExlbmd0aCk7CiAgICAgICAgICAgICBmaW5pc2hlZCA9IHRydWU7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBwcmV2aW91c05vZGUgPSBjdXJyZW50Tm9k
ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKCFmaW5pc2hlZCkgewpAQCAtMTcwNywxNSArMTcxNiwx
OCBAQCB2b2lkIEFYT2JqZWN0Q2FjaGU6OnN0YXJ0T3JFbmRUZXh0TWFya2VyCiAgICAgc2V0VGV4
dE1hcmtlckRhdGFXaXRoQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJP
ZmZzZXQpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6Y2hhcmFjdGVyT2Zm
c2V0Rm9yTm9kZUFuZE9mZnNldChOb2RlJiBub2RlLCBpbnQgb2Zmc2V0LCBib29sIHRvTm9kZUVu
ZCwgYm9vbCBpZ25vcmVTdGFydCkKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFy
YWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KE5vZGUmIG5vZGUsIGludCBvZmZzZXQsIFRyYXZl
cnNlT3B0aW9uIG9wdGlvbikKIHsKICAgICBOb2RlKiBkb21Ob2RlID0gJm5vZGU7CiAgICAgaWYg
KCFkb21Ob2RlKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgCisgICAg
Ym9vbCB0b05vZGVFbmQgPSBvcHRpb24gJiBUcmF2ZXJzZU9wdGlvblRvTm9kZUVuZDsKKyAgICBi
b29sIGluY2x1ZGVTdGFydCA9IG9wdGlvbiAmIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0Owor
ICAgIAogICAgIC8vIGlnbm9yZVN0YXJ0IGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHdlIHNob3Vs
ZCBnbyB0byBwcmV2aW91cyBub2RlIG9yCiAgICAgLy8gc3RheSBpbiBjdXJyZW50IG5vZGUgd2hl
biBvZmZzZXQgaXMgMC4KLSAgICBpZiAoIXRvTm9kZUVuZCAmJiAob2Zmc2V0IDwgMCB8fCAoIW9m
ZnNldCAmJiBpZ25vcmVTdGFydCkpKSB7CisgICAgaWYgKCF0b05vZGVFbmQgJiYgKG9mZnNldCA8
IDAgfHwgKCFvZmZzZXQgJiYgIWluY2x1ZGVTdGFydCkpKSB7CiAgICAgICAgIC8vIFNldCB0aGUg
b2Zmc2V0IHRvIHRoZSBhbW91bnQgb2YgY2hhcmFjdGVycyB3ZSBuZWVkIHRvIGdvIGJhY2t3YXJk
cy4KICAgICAgICAgb2Zmc2V0ID0gLSBvZmZzZXQ7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBj
aGFyT2Zmc2V0ID0gQ2hhcmFjdGVyT2Zmc2V0KCk7CkBAIC0xNzIzLDE0ICsxNzM1LDE0IEBAIENo
YXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpjaGFyYWN0ZXIKICAgICAgICAgICAgIG9mZnNl
dCAtPSBjaGFyT2Zmc2V0Lm9mZnNldDsKICAgICAgICAgICAgIGRvbU5vZGUgPSBwcmV2aW91c05v
ZGUoZG9tTm9kZSk7CiAgICAgICAgICAgICBpZiAoZG9tTm9kZSkgewotICAgICAgICAgICAgICAg
IGNoYXJPZmZzZXQgPSBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpkb21Ob2RlLCAw
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICBjaGFyT2Zmc2V0ID0gY2hhcmFjdGVyT2Zmc2V0Rm9y
Tm9kZUFuZE9mZnNldCgqZG9tTm9kZSwgMCwgVHJhdmVyc2VPcHRpb25Ub05vZGVFbmQpOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgp
OwogICAgICAgICAgICAgaWYgKCFvZmZzZXQpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICAgICAgaWYgKG9mZnNldCA+IDApCi0gICAgICAgICAgICBjaGFyT2Zmc2V0ID0g
Y2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhck9mZnNldC5ub2RlLCBjaGFyT2Zm
c2V0Lm9mZnNldCAtIG9mZnNldCwgZmFsc2UpOworICAgICAgICAgICAgY2hhck9mZnNldCA9IGNo
YXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoKmNoYXJPZmZzZXQubm9kZSwgY2hhck9mZnNl
dC5vZmZzZXQgLSBvZmZzZXQpOwogICAgICAgICByZXR1cm4gY2hhck9mZnNldDsKICAgICB9CiAg
ICAgCkBAIC0xNzUwLDE0ICsxNzYyLDMwIEBAIENoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hl
OjpjaGFyYWN0ZXIKICAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0OwogfQogCi12b2lkIEFYT2Jq
ZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRh
JiB0ZXh0TWFya2VyRGF0YSwgTm9kZSYgbm9kZSwgaW50IG9mZnNldCwgYm9vbCB0b05vZGVFbmQs
IGJvb2wgaWdub3JlU3RhcnQpCit2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9y
Q2hhcmFjdGVyT2Zmc2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCiB7CiAgICAgbWVtc2V0KCZ0ZXh0TWFya2Vy
RGF0YSwgMCwgc2l6ZW9mKFRleHRNYXJrZXJEYXRhKSk7Ci0gICAgCi0gICAgQ2hhcmFjdGVyT2Zm
c2V0IGNoYXJhY3Rlck9mZnNldCA9IGNoYXJhY3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQobm9k
ZSwgb2Zmc2V0LCB0b05vZGVFbmQsIGlnbm9yZVN0YXJ0KTsKICAgICBzZXRUZXh0TWFya2VyRGF0
YVdpdGhDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIGNoYXJhY3Rlck9mZnNldCk7CiB9
CiAKK3ZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hhcmFjdGVyT2Zm
c2V0KFRleHRNYXJrZXJEYXRhJiB0ZXh0TWFya2VyRGF0YSwgY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHQgPSBjaGFyYWN0
ZXJPZmZzZXQ7CisgICAgZG8geworICAgICAgICBuZXh0ID0gbmV4dENoYXJhY3Rlck9mZnNldChu
ZXh0KTsKKyAgICAgICAgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtl
ckRhdGEsIG5leHQpOworICAgIH0gd2hpbGUgKHRleHRNYXJrZXJEYXRhLmlnbm9yZWQpOworfQor
Cit2b2lkIEFYT2JqZWN0Q2FjaGU6OnRleHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoVGV4dE1hcmtlckRhdGEmIHRleHRNYXJrZXJEYXRhLCBjb25zdCBDaGFyYWN0ZXJPZmZz
ZXQmIGNoYXJhY3Rlck9mZnNldCkKK3sKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXMgPSBj
aGFyYWN0ZXJPZmZzZXQ7CisgICAgZG8geworICAgICAgICBwcmV2aW91cyA9IHByZXZpb3VzQ2hh
cmFjdGVyT2Zmc2V0KHByZXZpb3VzKTsKKyAgICAgICAgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0
ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIHByZXZpb3VzKTsKKyAgICB9IHdoaWxlICh0ZXh0TWFy
a2VyRGF0YS5pZ25vcmVkKTsKK30KKwogTm9kZSogQVhPYmplY3RDYWNoZTo6bmV4dE5vZGUoTm9k
ZSogbm9kZSkgY29uc3QKIHsKICAgICBpZiAoIW5vZGUpCkBAIC0xODc1LDIwICsxOTAzLDIwIEBA
IHZvaWQgQVhPYmplY3RDYWNoZTo6dGV4dE1hcmtlckRhdGFGb3JWaXMKICAgICBjYWNoZS0+c2V0
Tm9kZUluVXNlKGRvbU5vZGUpOwogfQogCi1DaGFyYWN0ZXJPZmZzZXQgQVhPYmplY3RDYWNoZTo6
bmV4dENoYXJhY3Rlck9mZnNldChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rlck9mZnNl
dCkKK0NoYXJhY3Rlck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0Q2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGlnbm9yZVN0YXJ0KQog
ewogICAgIGlmIChjaGFyYWN0ZXJPZmZzZXQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBDaGFy
YWN0ZXJPZmZzZXQoKTsKICAgICAKLSAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFu
ZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAx
KTsKKyAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhcmFjdGVy
T2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgKyAxLCBpZ25vcmVTdGFydCA/IFRy
YXZlcnNlT3B0aW9uRGVmYXVsdCA6IFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKIH0KIAot
Q2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQorQ2hhcmFjdGVyT2Zmc2V0IEFY
T2JqZWN0Q2FjaGU6OnByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNvbnN0IENoYXJhY3Rlck9mZnNl
dCYgY2hhcmFjdGVyT2Zmc2V0LCBib29sIGlnbm9yZVN0YXJ0KQogewogICAgIGlmIChjaGFyYWN0
ZXJPZmZzZXQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQoKTsKICAg
ICAKLSAgICByZXR1cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhcmFjdGVy
T2Zmc2V0Lm5vZGUsIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgLSAxLCBmYWxzZSwgZmFsc2UpOwor
ICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZz
ZXQubm9kZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCAtIDEsIGlnbm9yZVN0YXJ0ID8gVHJhdmVy
c2VPcHRpb25EZWZhdWx0IDogVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOwogfQogCiBzdGF0
aWMgdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnkoU3RyaW5nVmlldyB0ZXh0LCB1bnNpZ25lZCBv
ZmZzZXQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSBtYXlIYXZlTW9yZUNvbnRl
eHQsIGJvb2wmIG5lZWRNb3JlQ29udGV4dCkKQEAgLTE5MjUsOSArMTk1Myw4IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjpzdGFydENoYXIKICAgICAKICAgICBDaGFyYWN0ZXJPZmZz
ZXQgYyA9IGNoYXJhY3Rlck9mZnNldDsKICAgICBpZiAoc2lkZSA9PSBSaWdodFdvcmRJZk9uQm91
bmRhcnkpIHsKLSAgICAgICAgLy8gRklYTUU6IG5lZWQgdG8gcmVtb3ZlIHRoaXMgd2hlbiBpc0Vu
ZE9mUGFyYWdyYXBoIGlzIGltcGxlbWVudGVkIGZvciBDaGFyYWN0ZXJPZmZzZXQuCi0gICAgICAg
IFZpc2libGVQb3NpdGlvbiB2cCA9IHZpc2libGVQb3NpdGlvbkZyb21DaGFyYWN0ZXJPZmZzZXQo
Yyk7Ci0gICAgICAgIGlmIChpc0VuZE9mUGFyYWdyYXBoKHZwKSkKKyAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGVuZE9mUGFyYWdyYXBoID0gZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoYyk7
CisgICAgICAgIGlmIChjLmlzRXF1YWwoZW5kT2ZQYXJhZ3JhcGgpKQogICAgICAgICAgICAgcmV0
dXJuIGM7CiAgICAgICAgIAogICAgICAgICBjID0gbmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0
ZXJPZmZzZXQpOwpAQCAtMTk0NSwxMiArMTk3MiwxMSBAQCBDaGFyYWN0ZXJPZmZzZXQgQVhPYmpl
Y3RDYWNoZTo6ZW5kQ2hhcmFjCiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGMgPSBjaGFyYWN0
ZXJPZmZzZXQ7CiAgICAgaWYgKHNpZGUgPT0gTGVmdFdvcmRJZk9uQm91bmRhcnkpIHsKLSAgICAg
ICAgLy8gRklYTUU6IG5lZWQgdG8gcmVtb3ZlIHRoaXMgd2hlbiBpc1N0YXJ0T2ZQYXJhZ3JhcGgg
aXMgaW1wbGVtZW50ZWQgZm9yIENoYXJhY3Rlck9mZnNldC4KLSAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHZwID0gdmlzaWJsZVBvc2l0aW9uRnJvbUNoYXJhY3Rlck9mZnNldChjKTsKLSAgICAgICAg
aWYgKGlzU3RhcnRPZlBhcmFncmFwaCh2cCkpCisgICAgICAgIENoYXJhY3Rlck9mZnNldCBzdGFy
dE9mUGFyYWdyYXBoID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChjKTsKKyAgICAg
ICAgaWYgKGMuaXNFcXVhbChzdGFydE9mUGFyYWdyYXBoKSkKICAgICAgICAgICAgIHJldHVybiBj
OwogICAgICAgICAKLSAgICAgICAgYyA9IHByZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KGNoYXJhY3Rl
ck9mZnNldCk7CisgICAgICAgIGMgPSBwcmV2aW91c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJP
ZmZzZXQsIGZhbHNlKTsKICAgICAgICAgaWYgKGMuaXNOdWxsKCkpCiAgICAgICAgICAgICByZXR1
cm4gY2hhcmFjdGVyT2Zmc2V0OwogICAgIH0KQEAgLTE5NjMsNyArMTk4OSw3IEBAIENoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjpwcmV2aW91c1cKICAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0
LmlzTnVsbCgpKQogICAgICAgICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CiAgICAgCi0gICAg
Q2hhcmFjdGVyT2Zmc2V0IHByZXZpb3VzT2Zmc2V0ID0gcHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQo
Y2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNPZmZzZXQgPSBw
cmV2aW91c0NoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQsIGZhbHNlKTsKICAgICBpZiAo
cHJldmlvdXNPZmZzZXQuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBDaGFyYWN0ZXJPZmZzZXQo
KTsKICAgICAKQEAgLTIxMTEsMTEgKzIxMzcsODIgQEAgQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0
Q2FjaGU6OnByZXZpb3VzVwogICAgICAgICAvLyBUaGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBh
IHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2RlCiAgICAgICAgIGlmICgmbm9kZSA9PSBjaGFy
YWN0ZXJPZmZzZXQubm9kZSkKICAgICAgICAgICAgIG5leHQgLT0gY2hhcmFjdGVyT2Zmc2V0LnN0
YXJ0SW5kZXg7Ci0gICAgICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0
KG5vZGUsIG5leHQsIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIGNoYXJhY3Rlck9mZnNldEZvck5v
ZGVBbmRPZmZzZXQobm9kZSwgbmV4dCwgVHJhdmVyc2VPcHRpb25JbmNsdWRlU3RhcnQpOwogICAg
IH0KICAgICAKICAgICBpbnQgY2hhcmFjdGVyQ291bnQgPSBjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0
IC0gKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0KTsKLSAgICByZXR1cm4gY2hh
cmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqY2hhcmFjdGVyT2Zmc2V0Lm5vZGUsIGNoYXJh
Y3RlckNvdW50LCBmYWxzZSwgZmFsc2UpOworICAgIHJldHVybiBjaGFyYWN0ZXJPZmZzZXRGb3JO
b2RlQW5kT2Zmc2V0KCpjaGFyYWN0ZXJPZmZzZXQubm9kZSwgY2hhcmFjdGVyQ291bnQsIFRyYXZl
cnNlT3B0aW9uSW5jbHVkZVN0YXJ0KTsKK30KKworQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2Fj
aGU6OnN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0
JiBjaGFyYWN0ZXJPZmZzZXQsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBib3VuZGFyeUNy
b3NzaW5nUnVsZSkKK3sKKyAgICBpZiAoY2hhcmFjdGVyT2Zmc2V0LmlzTnVsbCgpKQorICAgICAg
ICByZXR1cm4gQ2hhcmFjdGVyT2Zmc2V0KCk7CisgICAgCisgICAgTm9kZSogc3RhcnROb2RlID0g
Y2hhcmFjdGVyT2Zmc2V0Lm5vZGU7CisgICAgCisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGlu
ZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkpCisgICAgICAgIHJldHVybiBzdGFydE9yRW5kQ2hh
cmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMoc3RhcnROb2RlKSwgdHJ1
ZSk7CisgICAgCisgICAgTm9kZSogc3RhcnRCbG9jayA9IGVuY2xvc2luZ0Jsb2NrKHN0YXJ0Tm9k
ZSk7CisgICAgaW50IG9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5zdGFydEluZGV4ICsgY2hhcmFj
dGVyT2Zmc2V0Lm9mZnNldDsKKyAgICBQb3NpdGlvbiBwKHN0YXJ0Tm9kZSwgb2Zmc2V0LCBQb3Np
dGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKTsKKyAgICBOb2RlKiBoaWdoZXN0Um9vdCA9
IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CisgICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9
IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3I7CisgICAgCisgICAgTm9kZSogbm9k
ZSA9IGZpbmRTdGFydE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXJ0Qmxv
Y2ssIG9mZnNldCwgdHlwZSwgYm91bmRhcnlDcm9zc2luZ1J1bGUpOworICAgIAorICAgIGlmICh0
eXBlID09IFBvc2l0aW9uOjpQb3NpdGlvbklzT2Zmc2V0SW5BbmNob3IpCisgICAgICAgIHJldHVy
biBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zmc2V0KCpub2RlLCBvZmZzZXQsIFRyYXZlcnNl
T3B0aW9uSW5jbHVkZVN0YXJ0KTsKKyAgICAKKyAgICByZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rl
ck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRlbnRzKG5vZGUpLCB0cnVlKTsKK30KKwor
Q2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OmVuZENoYXJhY3Rlck9mZnNldE9mUGFyYWdy
YXBoKGNvbnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0LCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCit7CisgICAgaWYgKGNoYXJhY3Rl
ck9mZnNldC5pc051bGwoKSkKKyAgICAgICAgcmV0dXJuIENoYXJhY3Rlck9mZnNldCgpOworICAg
IAorICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IGNoYXJhY3Rlck9mZnNldC5ub2RlOworICAgIGlmIChp
c1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUpKQorICAgICAgICBy
ZXR1cm4gc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKHJhbmdlRm9yTm9kZUNvbnRl
bnRzKHN0YXJ0Tm9kZSksIGZhbHNlKTsKKyAgICAKKyAgICBOb2RlKiBzdGF5SW5zaWRlQmxvY2sg
PSBlbmNsb3NpbmdCbG9jayhzdGFydE5vZGUpOworICAgIGludCBvZmZzZXQgPSBjaGFyYWN0ZXJP
ZmZzZXQuc3RhcnRJbmRleCArIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQ7CisgICAgUG9zaXRpb24g
cChzdGFydE5vZGUsIG9mZnNldCwgUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcik7
CisgICAgTm9kZSogaGlnaGVzdFJvb3QgPSBoaWdoZXN0RWRpdGFibGVSb290KHApOworICAgIFBv
c2l0aW9uOjpBbmNob3JUeXBlIHR5cGUgPSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yOworICAgIAorICAgIE5vZGUqIG5vZGUgPSBmaW5kRW5kT2ZQYXJhZ3JhcGgoc3RhcnROb2Rl
LCBoaWdoZXN0Um9vdCwgc3RheUluc2lkZUJsb2NrLCBvZmZzZXQsIHR5cGUsIGJvdW5kYXJ5Q3Jv
c3NpbmdSdWxlKTsKKyAgICBpZiAodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldElu
QW5jaG9yKSB7CisgICAgICAgIGlmIChub2RlLT5pc1RleHROb2RlKCkpIHsKKyAgICAgICAgICAg
IENoYXJhY3Rlck9mZnNldCBzdGFydE9mZnNldCA9IHN0YXJ0T3JFbmRDaGFyYWN0ZXJPZmZzZXRG
b3JSYW5nZShyYW5nZUZvck5vZGVDb250ZW50cyhub2RlKSwgdHJ1ZSk7CisgICAgICAgICAgICBv
ZmZzZXQgLT0gc3RhcnRPZmZzZXQuc3RhcnRJbmRleDsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gY2hhcmFjdGVyT2Zmc2V0Rm9yTm9kZUFuZE9mZnNldCgqbm9kZSwgb2Zmc2V0LCBUcmF2ZXJz
ZU9wdGlvbkluY2x1ZGVTdGFydCk7CisgICAgfQorICAgIAorICAgIHJldHVybiBzdGFydE9yRW5k
Q2hhcmFjdGVyT2Zmc2V0Rm9yUmFuZ2UocmFuZ2VGb3JOb2RlQ29udGVudHMobm9kZSksIGZhbHNl
KTsKK30KKworUmVmUHRyPFJhbmdlPiBBWE9iamVjdENhY2hlOjpwYXJhZ3JhcGhGb3JDaGFyYWN0
ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQpCit7CisgICAg
Q2hhcmFjdGVyT2Zmc2V0IHN0YXJ0ID0gc3RhcnRDaGFyYWN0ZXJPZmZzZXRPZlBhcmFncmFwaChj
aGFyYWN0ZXJPZmZzZXQpOworICAgIENoYXJhY3Rlck9mZnNldCBlbmQgPSBlbmRDaGFyYWN0ZXJP
ZmZzZXRPZlBhcmFncmFwaChjaGFyYWN0ZXJPZmZzZXQpOworICAgIAorICAgIHJldHVybiByYW5n
ZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnQsIGVuZCk7Cit9CisKK0NoYXJhY3Rl
ck9mZnNldCBBWE9iamVjdENhY2hlOjpuZXh0UGFyYWdyYXBoRW5kQ2hhcmFjdGVyT2Zmc2V0KGNv
bnN0IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQoreworICAgIC8vIG1ha2Ugc3Vy
ZSB3ZSBtb3ZlIG9mZiBvZiBhIHBhcmFncmFwaCBlbmQKKyAgICByZXR1cm4gZW5kQ2hhcmFjdGVy
T2Zmc2V0T2ZQYXJhZ3JhcGgobmV4dENoYXJhY3Rlck9mZnNldChjaGFyYWN0ZXJPZmZzZXQpKTsK
K30KKworQ2hhcmFjdGVyT2Zmc2V0IEFYT2JqZWN0Q2FjaGU6OnByZXZpb3VzUGFyYWdyYXBoU3Rh
cnRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiBjaGFyYWN0ZXJPZmZzZXQp
Cit7CisgICAgLy8gbWFrZSBzdXJlIHdlIG1vdmUgb2ZmIG9mIGEgcGFyYWdyYXBoIHN0YXJ0Cisg
ICAgcmV0dXJuIHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgocHJldmlvdXNDaGFyYWN0
ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0LCBmYWxzZSkpOwogfQogCiBjb25zdCBFbGVtZW50KiBB
WE9iamVjdENhY2hlOjpyb290QVhFZGl0YWJsZUVsZW1lbnQoY29uc3QgTm9kZSogbm9kZSkKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5oCShyZXZp
c2lvbiAxOTY0MjMpCisrKyBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2Fj
aGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzQsNiArNzQsMTIgQEAgc3RydWN0IENoYXJhY3Rlck9m
ZnNldCB7CiAgICAgCiAgICAgaW50IHJlbWFpbmluZygpIGNvbnN0IHsgcmV0dXJuIHJlbWFpbmlu
Z09mZnNldDsgfQogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gIW5vZGU7IH0KKyAg
ICBib29sIGlzRXF1YWwoQ2hhcmFjdGVyT2Zmc2V0JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc051bGwoKSB8fCBvdGhlci5pc051bGwoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIG5vZGUgPT0gb3RoZXIubm9kZSAmJiBzdGFydEluZGV4ID09
IG90aGVyLnN0YXJ0SW5kZXggJiYgb2Zmc2V0ID09IG90aGVyLm9mZnNldDsKKyAgICB9CiB9Owog
CiBjbGFzcyBBWENvbXB1dGVkT2JqZWN0QXR0cmlidXRlQ2FjaGUgewpAQCAtMTg1LDkgKzE5MSwx
MyBAQCBwdWJsaWM6CiAKICAgICAvLyBUZXh0IG1hcmtlciB1dGlsaXRpZXMuCiAgICAgdm9pZCB0
ZXh0TWFya2VyRGF0YUZvclZpc2libGVQb3NpdGlvbihUZXh0TWFya2VyRGF0YSYsIGNvbnN0IFZp
c2libGVQb3NpdGlvbiYpOworICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JDaGFyYWN0ZXJPZmZz
ZXQoVGV4dE1hcmtlckRhdGEmLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKKyAgICB2b2lkIHRl
eHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNvbnN0
IENoYXJhY3Rlck9mZnNldCYpOworICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JQcmV2aW91c0No
YXJhY3Rlck9mZnNldChUZXh0TWFya2VyRGF0YSYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwog
ICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JUZXh0TWFya2VyRGF0YShUZXh0
TWFya2VyRGF0YSYpOwogICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0
TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYpOwotICAgIHZvaWQgdGV4dE1hcmtlckRhdGFGb3JD
aGFyYWN0ZXJPZmZzZXQoVGV4dE1hcmtlckRhdGEmLCBOb2RlJiwgaW50LCBib29sIHRvTm9kZUVu
ZCA9IGZhbHNlLCBib29sIGlnbm9yZVN0YXJ0ID0gdHJ1ZSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0
IG5leHRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgYm9vbCBpZ25vcmVT
dGFydCA9IHRydWUpOworICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c0NoYXJhY3Rlck9mZnNl
dChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBib29sIGlnbm9yZVN0YXJ0ID0gdHJ1ZSk7CiAgICAg
dm9pZCBzdGFydE9yRW5kVGV4dE1hcmtlckRhdGFGb3JSYW5nZShUZXh0TWFya2VyRGF0YSYsIFJl
ZlB0cjxSYW5nZT4sIGJvb2wpOwogICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGFjY2Vzc2liaWxp
dHlPYmplY3RGb3JUZXh0TWFya2VyRGF0YShUZXh0TWFya2VyRGF0YSYpOwogICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNvbnN0IENoYXJhY3Rlck9m
ZnNldCYsIGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwpAQCAtMTk1LDEyICsyMDUsMTUgQEAgcHVi
bGljOgogICAgIHN0YXRpYyBpbnQgbGVuZ3RoRm9yUmFuZ2UoUmFuZ2UqKTsKICAgICAKICAgICAv
LyBXb3JkIGJvdW5kYXJ5Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0
T2ZXb3JkKGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25C
b3VuZGFyeSk7Ci0gICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldE9mV29yZChj
b25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBFV29yZFNpZGUgPSBSaWdodFdvcmRJZk9uQm91bmRhcnkp
OwogICAgIENoYXJhY3Rlck9mZnNldCBuZXh0V29yZEVuZENoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNXb3JkU3RhcnRD
aGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CiAgICAgUmVmUHRyPFJhbmdl
PiBsZWZ0V29yZFJhbmdlKGNvbnN0IENoYXJhY3Rlck9mZnNldCYpOwogICAgIFJlZlB0cjxSYW5n
ZT4gcmlnaHRXb3JkUmFuZ2UoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgCisgICAgLy8g
UGFyYWdyYXBoCisgICAgUmVmUHRyPFJhbmdlPiBwYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQo
Y29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IG5leHRQYXJhZ3Jh
cGhFbmRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hhcmFj
dGVyT2Zmc2V0IHByZXZpb3VzUGFyYWdyYXBoU3RhcnRDaGFyYWN0ZXJPZmZzZXQoY29uc3QgQ2hh
cmFjdGVyT2Zmc2V0Jik7CiAKICAgICBlbnVtIEFYTm90aWZpY2F0aW9uIHsKICAgICAgICAgQVhB
Y3RpdmVEZXNjZW5kYW50Q2hhbmdlZCwKQEAgLTI5Myw2ICszMDYsNyBAQCBwcm90ZWN0ZWQ6CiAg
ICAgYm9vbCBpc05vZGVJblVzZShOb2RlKiBuKSB7IHJldHVybiBtX3RleHRNYXJrZXJOb2Rlcy5j
b250YWlucyhuKTsgfQogICAgIAogICAgIC8vIENoYXJhY3Rlck9mZnNldCBmdW5jdGlvbnMuCisg
ICAgZW51bSBUcmF2ZXJzZU9wdGlvbiB7IFRyYXZlcnNlT3B0aW9uRGVmYXVsdCA9IDEgPDwgMCwg
VHJhdmVyc2VPcHRpb25Ub05vZGVFbmQgPSAxIDw8IDEsIFRyYXZlcnNlT3B0aW9uSW5jbHVkZVN0
YXJ0ID0gMSA8PCAyIH07CiAgICAgTm9kZSogbmV4dE5vZGUoTm9kZSopIGNvbnN0OwogICAgIE5v
ZGUqIHByZXZpb3VzTm9kZShOb2RlKikgY29uc3Q7CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHRyYXZl
cnNlVG9PZmZzZXRJblJhbmdlKFJlZlB0cjxSYW5nZT4sIGludCwgYm9vbCwgYm9vbCBzdGF5V2l0
aGluUmFuZ2UgPSBmYWxzZSk7CkBAIC0zMDIsMTEgKzMxNiwxMyBAQCBwcm90ZWN0ZWQ6CiAgICAg
VUNoYXIzMiBjaGFyYWN0ZXJBZnRlcihjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBVQ2hh
cjMyIGNoYXJhY3RlckJlZm9yZShjb25zdCBDaGFyYWN0ZXJPZmZzZXQmKTsKICAgICBDaGFyYWN0
ZXJPZmZzZXQgc3RhcnRPckVuZENoYXJhY3Rlck9mZnNldEZvclJhbmdlKFJlZlB0cjxSYW5nZT4s
IGJvb2wpOwotICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXRGb3JOb2RlQW5kT2Zm
c2V0KE5vZGUmLCBpbnQsIGJvb2wgdG9Ob2RlRW5kID0gZmFsc2UsIGJvb2wgaWdub3JlU3RhcnQg
PSB0cnVlKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgbmV4dENoYXJhY3Rlck9mZnNldChjb25zdCBD
aGFyYWN0ZXJPZmZzZXQmKTsKLSAgICBDaGFyYWN0ZXJPZmZzZXQgcHJldmlvdXNDaGFyYWN0ZXJP
ZmZzZXQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0Jik7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJh
Y3Rlck9mZnNldEZvck5vZGVBbmRPZmZzZXQoTm9kZSYsIGludCwgVHJhdmVyc2VPcHRpb24gPSBU
cmF2ZXJzZU9wdGlvbkRlZmF1bHQpOwogICAgIENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1dvcmRC
b3VuZGFyeShDaGFyYWN0ZXJPZmZzZXQmLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKTsKICAgICBD
aGFyYWN0ZXJPZmZzZXQgbmV4dFdvcmRCb3VuZGFyeShDaGFyYWN0ZXJPZmZzZXQmLCBCb3VuZGFy
eVNlYXJjaEZ1bmN0aW9uKTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZz
ZXRPZldvcmQoY29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgRVdvcmRTaWRlID0gUmlnaHRXb3JkSWZP
bkJvdW5kYXJ5KTsKKyAgICBDaGFyYWN0ZXJPZmZzZXQgZW5kQ2hhcmFjdGVyT2Zmc2V0T2ZXb3Jk
KGNvbnN0IENoYXJhY3Rlck9mZnNldCYsIEVXb3JkU2lkZSA9IFJpZ2h0V29yZElmT25Cb3VuZGFy
eSk7CisgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0T2ZQYXJhZ3JhcGgo
Y29uc3QgQ2hhcmFjdGVyT2Zmc2V0JiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlID0gQ2Fu
bm90Q3Jvc3NFZGl0aW5nQm91bmRhcnkpOworICAgIENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0
ZXJPZmZzZXRPZlBhcmFncmFwaChjb25zdCBDaGFyYWN0ZXJPZmZzZXQmLCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZ1J1bGUgPSBDYW5ub3RDcm9zc0VkaXRpbmdCb3VuZGFyeSk7CiAKIHByaXZhdGU6
CiAgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcm9vdFdlYkFyZWEoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCShyZXZpc2lvbiAxOTY0MjMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
cklPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw3IEBAICsgKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAg
ICBUZXh0TWFya2VyRGF0YSB0ZXh0TWFya2VyRGF0YTsKLSAgICBjYWNoZS0+dGV4dE1hcmtlckRh
dGFGb3JDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsICpjaGFyYWN0ZXJPZmZzZXQubm9k
ZSwgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCwgZmFsc2UpOworICAgIGNhY2hlLT50ZXh0TWFya2Vy
RGF0YUZvckNoYXJhY3Rlck9mZnNldCh0ZXh0TWFya2VyRGF0YSwgY2hhcmFjdGVyT2Zmc2V0KTsK
ICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQgJiYgIXRleHRNYXJrZXJEYXRhLmlnbm9yZWQp
CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIGFsbG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhIGNhY2hlOmNh
Y2hlXSBhdXRvcmVsZWFzZV07CkBAIC0yNDI1LDIwICsyNDI1LDI4IEBAIC0gKFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmsKIAogLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgKiluZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJh
Y3Rlck9mZnNldAogewotICAgIGNoYXJhY3Rlck9mZnNldC5vZmZzZXQgPSBjaGFyYWN0ZXJPZmZz
ZXQub2Zmc2V0ICsgMTsKLSAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqdGV4dE1hcmtl
ciA9IFtXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9m
ZnNldDpjaGFyYWN0ZXJPZmZzZXQgY2FjaGU6bV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKV07Ci0g
ICAgaWYgKHRleHRNYXJrZXIgJiYgdGV4dE1hcmtlci5pc0lnbm9yZWQpCi0gICAgICAgIHRleHRN
YXJrZXIgPSBbc2VsZiBuZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNl
dF07Ci0gICAgcmV0dXJuIHRleHRNYXJrZXI7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgY2Fj
aGUtPnRleHRNYXJrZXJEYXRhRm9yTmV4dENoYXJhY3Rlck9mZnNldCh0ZXh0TWFya2VyRGF0YSwg
Y2hhcmFjdGVyT2Zmc2V0KTsKKyAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQpCisgICAgICAg
IHJldHVybiBuaWw7CisgICAgcmV0dXJuIFtbW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGFs
bG9jXSBpbml0V2l0aFRleHRNYXJrZXI6JnRleHRNYXJrZXJEYXRhIGNhY2hlOmNhY2hlXSBhdXRv
cmVsZWFzZV07CiB9CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopcHJldmlvdXNN
YXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rlck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0
CiB7Ci0gICAgY2hhcmFjdGVyT2Zmc2V0Lm9mZnNldCA9IGNoYXJhY3Rlck9mZnNldC5vZmZzZXQg
LSAxOwotICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICp0ZXh0TWFya2VyID0gW1dlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0OmNoYXJh
Y3Rlck9mZnNldCBjYWNoZTptX29iamVjdC0+YXhPYmplY3RDYWNoZSgpXTsKLSAgICBpZiAodGV4
dE1hcmtlciAmJiB0ZXh0TWFya2VyLmlzSWdub3JlZCkKLSAgICAgICAgdGV4dE1hcmtlciA9IFtz
ZWxmIHByZXZpb3VzTWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0OmNoYXJhY3Rlck9mZnNldF07Ci0g
ICAgcmV0dXJuIHRleHRNYXJrZXI7CisgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBtX29iamVj
dC0+YXhPYmplY3RDYWNoZSgpOworICAgIGlmICghY2FjaGUpCisgICAgICAgIHJldHVybiBuaWw7
CisgICAgCisgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7CisgICAgY2FjaGUtPnRl
eHRNYXJrZXJEYXRhRm9yUHJldmlvdXNDaGFyYWN0ZXJPZmZzZXQodGV4dE1hcmtlckRhdGEsIGNo
YXJhY3Rlck9mZnNldCk7CisgICAgaWYgKCF0ZXh0TWFya2VyRGF0YS5heElEKQorICAgICAgICBy
ZXR1cm4gbmlsOworICAgIHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBhbGxv
Y10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNoZV0gYXV0b3Jl
bGVhc2VdOwogfQogCiAtIChSZWZQdHI8UmFuZ2U+KXJhbmdlRm9yVGV4dE1hcmtlcnM6KE5TQXJy
YXkgKil0ZXh0TWFya2VycwpJbmRleDogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMv
V2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJN
YWMubW0JKHJldmlzaW9uIDE5NjQyMykKKysrIFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC04NDAsNDUgKzg0MCw1MiBAQCBzdGF0aWMgaWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5n
ZShBCiAgICAgcmV0dXJuIENGQnJpZGdpbmdSZWxlYXNlKHdrQ3JlYXRlQVhUZXh0TWFya2VyKCZ0
ZXh0TWFya2VyRGF0YSwgc2l6ZW9mKHRleHRNYXJrZXJEYXRhKSkpOwogfQogCi0tIChpZCluZXh0
VGV4dE1hcmtlckZvck5vZGU6KE5vZGUmKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CitzdGF0aWMg
aWQgbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUs
IENoYXJhY3Rlck9mZnNldCYgY2hhcmFjdGVyT2Zmc2V0KQogewotICAgIGludCBuZXh0T2Zmc2V0
ID0gb2Zmc2V0ICsgMTsKLSAgICBpZCB0ZXh0TWFya2VyID0gW3NlbGYgdGV4dE1hcmtlckZvck5v
ZGU6bm9kZSBvZmZzZXQ6bmV4dE9mZnNldF07Ci0gICAgaWYgKGlzVGV4dE1hcmtlcklnbm9yZWQo
dGV4dE1hcmtlcikpCi0gICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBuZXh0VGV4dE1hcmtlckZv
ck5vZGU6bm9kZSBvZmZzZXQ6bmV4dE9mZnNldF07Ci0gICAgcmV0dXJuIHRleHRNYXJrZXI7Cisg
ICAgaWYgKCFjYWNoZSkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAKKyAgICBUZXh0TWFya2Vy
RGF0YSB0ZXh0TWFya2VyRGF0YTsKKyAgICBjYWNoZS0+dGV4dE1hcmtlckRhdGFGb3JOZXh0Q2hh
cmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOworICAgIGlmICgh
dGV4dE1hcmtlckRhdGEuYXhJRCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gQ0ZC
cmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJEYXRhLCBzaXpl
b2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLS0gKGlkKXByZXZpb3VzVGV4dE1hcmtlckZvck5v
ZGU6KE5vZGUmKW5vZGUgb2Zmc2V0OihpbnQpb2Zmc2V0CitzdGF0aWMgaWQgcHJldmlvdXNUZXh0
TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDaGFyYWN0ZXJP
ZmZzZXQmIGNoYXJhY3Rlck9mZnNldCkKIHsKLSAgICBpbnQgcHJldmlvdXNPZmZzZXQgPSBvZmZz
ZXQgLSAxOwotICAgIGlkIHRleHRNYXJrZXIgPSBbc2VsZiB0ZXh0TWFya2VyRm9yTm9kZTpub2Rl
IG9mZnNldDpwcmV2aW91c09mZnNldF07Ci0gICAgaWYgKGlzVGV4dE1hcmtlcklnbm9yZWQodGV4
dE1hcmtlcikpCi0gICAgICAgIHRleHRNYXJrZXIgPSBbc2VsZiBwcmV2aW91c1RleHRNYXJrZXJG
b3JOb2RlOm5vZGUgb2Zmc2V0OnByZXZpb3VzT2Zmc2V0XTsKLSAgICByZXR1cm4gdGV4dE1hcmtl
cjsKKyAgICBpZiAoIWNhY2hlKQorICAgICAgICByZXR1cm4gbmlsOworICAgIAorICAgIFRleHRN
YXJrZXJEYXRhIHRleHRNYXJrZXJEYXRhOworICAgIGNhY2hlLT50ZXh0TWFya2VyRGF0YUZvclBy
ZXZpb3VzQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBjaGFyYWN0ZXJPZmZzZXQpOwor
ICAgIGlmICghdGV4dE1hcmtlckRhdGEuYXhJRCkKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICBy
ZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2Uod2tDcmVhdGVBWFRleHRNYXJrZXIoJnRleHRNYXJrZXJE
YXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLS0gKGlkKXRleHRNYXJrZXJGb3JO
b2RlOihOb2RlJilub2RlIG9mZnNldDooaW50KW9mZnNldCBpZ25vcmVTdGFydDooQk9PTClpZ25v
cmVTdGFydAorLSAoaWQpbmV4dFRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6KENoYXJhY3Rl
ck9mZnNldCYpY2hhcmFjdGVyT2Zmc2V0CiB7Ci0gICAgcmV0dXJuIHRleHRNYXJrZXJGb3JDaGFy
YWN0ZXJPZmZzZXQobV9vYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgbm9kZSwgb2Zmc2V0LCBmYWxz
ZSwgaWdub3JlU3RhcnQpOworICAgIHJldHVybiBuZXh0VGV4dE1hcmtlckZvckNoYXJhY3Rlck9m
ZnNldChtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBjaGFyYWN0ZXJPZmZzZXQpOwogfQogCi0t
IChpZCl0ZXh0TWFya2VyRm9yTm9kZTooTm9kZSYpbm9kZSBvZmZzZXQ6KGludClvZmZzZXQKKy0g
KGlkKXByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0
JiljaGFyYWN0ZXJPZmZzZXQKIHsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlckZvck5vZGU6
bm9kZSBvZmZzZXQ6b2Zmc2V0IGlnbm9yZVN0YXJ0OllFU107CisgICAgcmV0dXJuIHByZXZpb3Vz
VGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChtX29iamVjdC0+YXhPYmplY3RDYWNoZSgpLCBj
aGFyYWN0ZXJPZmZzZXQpOwogfQogCi1zdGF0aWMgaWQgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9m
ZnNldChBWE9iamVjdENhY2hlKiBjYWNoZSwgTm9kZSYgbm9kZSwgaW50IG9mZnNldCwgYm9vbCB0
b05vZGVFbmQsIGJvb2wgaWdub3JlU3RhcnQpCistIChpZCl0ZXh0TWFya2VyRm9yQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldAoreworICAgIHJldHVybiB0
ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zmc2V0KG1fb2JqZWN0LT5heE9iamVjdENhY2hlKCksIGNo
YXJhY3Rlck9mZnNldCk7Cit9CisKK3N0YXRpYyBpZCB0ZXh0TWFya2VyRm9yQ2hhcmFjdGVyT2Zm
c2V0KEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBDaGFyYWN0ZXJPZmZzZXQmIGNoYXJhY3Rl
ck9mZnNldCkKIHsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAot
ICAgIE5vZGUqIGRvbU5vZGUgPSAmbm9kZTsKLSAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJl
dHVybiBuaWw7Ci0gICAgCiAgICAgVGV4dE1hcmtlckRhdGEgdGV4dE1hcmtlckRhdGE7Ci0gICAg
Y2FjaGUtPnRleHRNYXJrZXJEYXRhRm9yQ2hhcmFjdGVyT2Zmc2V0KHRleHRNYXJrZXJEYXRhLCBu
b2RlLCBvZmZzZXQsIHRvTm9kZUVuZCwgaWdub3JlU3RhcnQpOworICAgIGNhY2hlLT50ZXh0TWFy
a2VyRGF0YUZvckNoYXJhY3Rlck9mZnNldCh0ZXh0TWFya2VyRGF0YSwgY2hhcmFjdGVyT2Zmc2V0
KTsKICAgICBpZiAoIXRleHRNYXJrZXJEYXRhLmF4SUQgJiYgIXRleHRNYXJrZXJEYXRhLmlnbm9y
ZWQpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCkBAIC00MDY2LDEyICs0MDczLDEyIEBAIC0g
KGlkKWFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTooTlNTdHIKICAgICAKICAgICBpZiAoW2F0
dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWE5leHRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CiAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFy
YWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXJdOwotICAgICAgICByZXR1cm4gW3Nl
bGYgbmV4dFRleHRNYXJrZXJGb3JOb2RlOipjaGFyYWN0ZXJPZmZzZXQubm9kZSBvZmZzZXQ6Y2hh
cmFjdGVyT2Zmc2V0Lm9mZnNldF07CisgICAgICAgIHJldHVybiBbc2VsZiBuZXh0VGV4dE1hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwogICAgIH0KICAgICAKICAgICBp
ZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFByZXZpb3VzVGV4dE1hcmtlckZvclRl
eHRNYXJrZXIiXSkgewogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0g
W3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKLSAgICAgICAg
cmV0dXJuIFtzZWxmIHByZXZpb3VzVGV4dE1hcmtlckZvck5vZGU6KmNoYXJhY3Rlck9mZnNldC5u
b2RlIG9mZnNldDpjaGFyYWN0ZXJPZmZzZXQub2Zmc2V0XTsKKyAgICAgICAgcmV0dXJuIFtzZWxm
IHByZXZpb3VzVGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldDpjaGFyYWN0ZXJPZmZzZXRdOwog
ICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWExlZnRX
b3JkVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlciJdKSB7CkBAIC00MTExLDkgKzQxMTgsMTIg
QEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOihOU1N0cgogICAgIH0KICAgICAK
ICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFBhcmFncmFwaFRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXIiXSkgewotICAgICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVBvcyA9IFtzZWxmIHZpc2libGVQb3NpdGlvbkZvclRleHRNYXJrZXI6KHRleHRNYXJrZXIpXTsK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgdnBSYW5nZSA9IG1fb2JqZWN0LT5wYXJhZ3Jh
cGhGb3JQb3NpdGlvbih2aXNpYmxlUG9zKTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJr
ZXJSYW5nZUZyb21WaXNpYmxlUG9zaXRpb25zOnZwUmFuZ2Uuc3RhcnQgZW5kUG9zaXRpb246dnBS
YW5nZS5lbmRdOworICAgICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IG1fb2JqZWN0LT5heE9i
amVjdENhY2hlKCk7CisgICAgICAgIGlmICghY2FjaGUpCisgICAgICAgICAgICByZXR1cm4gbmls
OworICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFj
dGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKKyAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IGNhY2hlLT5wYXJhZ3JhcGhGb3JDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpyYW5n
ZV07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFY
TmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CkBAIC00MTIyLDcgKzQxMzIs
NyBAQCAtIChpZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0g
W3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAg
Q2hhcmFjdGVyT2Zmc2V0IG5leHRFbmQgPSBjYWNoZS0+bmV4dFdvcmRFbmRDaGFyYWN0ZXJPZmZz
ZXQoY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JO
b2RlOipuZXh0RW5kLm5vZGUgb2Zmc2V0Om5leHRFbmQub2Zmc2V0XTsKKyAgICAgICAgcmV0dXJu
IFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6bmV4dEVuZF07CiAgICAgfQogICAg
IAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYUHJldmlvdXNXb3JkU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7CkBAIC00MTMxLDcgKzQxNDEsNyBAQCAtIChp
ZClhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6KE5TU3RyCiAgICAgICAgICAgICByZXR1cm4g
bmlsOwogICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hh
cmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyXTsKICAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IHByZXZpb3VzU3RhcnQgPSBjYWNoZS0+cHJldmlvdXNXb3JkU3RhcnRDaGFyYWN0ZXJP
ZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKLSAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJG
b3JOb2RlOipwcmV2aW91c1N0YXJ0Lm5vZGUgb2Zmc2V0OnByZXZpb3VzU3RhcnQub2Zmc2V0IGln
bm9yZVN0YXJ0Ok5PXTsKKyAgICAgICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0
ZXJPZmZzZXQ6cHJldmlvdXNTdGFydF07CiAgICAgfQogICAgIAogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYTmV4dExpbmVFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJd
KSB7CkBAIC00MTYwLDggKzQxNzAsMTIgQEAgLSAoaWQpYWNjZXNzaWJpbGl0eUF0dHJpYnV0ZVZh
bHVlOihOU1N0cgogICAgIH0KICAgICAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJp
bmc6QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciJdKSB7
Ci0gICAgICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0
aW9uRm9yVGV4dE1hcmtlcjoodGV4dE1hcmtlcildOwotICAgICAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlckZvclZpc2libGVQb3NpdGlvbjptX29iamVjdC0+cHJldmlvdXNQYXJhZ3JhcGhTdGFy
dFBvc2l0aW9uKHZpc2libGVQb3MpXTsKKyAgICAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBt
X29iamVjdC0+YXhPYmplY3RDYWNoZSgpOworICAgICAgICBpZiAoIWNhY2hlKQorICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKKyAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldCA9
IFtzZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcl07CisgICAgICAg
IENoYXJhY3Rlck9mZnNldCBwcmV2aW91c1N0YXJ0ID0gY2FjaGUtPnByZXZpb3VzUGFyYWdyYXBo
U3RhcnRDaGFyYWN0ZXJPZmZzZXQoY2hhcmFjdGVyT2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuIFtz
ZWxmIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQ6cHJldmlvdXNTdGFydF07CiAgICAgfQog
ICAgIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3R5bGVUZXh0TWFy
a2VyUmFuZ2VGb3JUZXh0TWFya2VyIl0pIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
VmlzaWJsZVVuaXRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zp
c2libGVVbml0cy5jcHAJKHJldmlzaW9uIDE5NjQyMykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVmlzaWJsZVVuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0MiwyNCArMTE0Miw5IEBA
IFZpc2libGVQb3NpdGlvbiBuZXh0U2VudGVuY2VQb3NpdGlvbihjb24KICAgICByZXR1cm4gcG9z
aXRpb24uaG9ub3JFZGl0aW5nQm91bmRhcnlBdE9yQWZ0ZXIobmV4dEJvdW5kYXJ5KHBvc2l0aW9u
LCBuZXh0U2VudGVuY2VQb3NpdGlvbkJvdW5kYXJ5KSk7CiB9CiAKLVZpc2libGVQb3NpdGlvbiBz
dGFydE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5
Q3Jvc3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQorTm9kZSogZmluZFN0YXJ0T2ZQYXJh
Z3JhcGgoTm9kZSogc3RhcnROb2RlLCBOb2RlKiBoaWdoZXN0Um9vdCwgTm9kZSogc3RhcnRCbG9j
aywgaW50JiBvZmZzZXQsIFBvc2l0aW9uOjpBbmNob3JUeXBlJiB0eXBlLCBFZGl0aW5nQm91bmRh
cnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCiB7Ci0gICAgUG9zaXRpb24gcCA9
IGMuZGVlcEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBzdGFydE5vZGUgPSBwLmRlcHJlY2F0ZWRO
b2RlKCk7Ci0KLSAgICBpZiAoIXN0YXJ0Tm9kZSkKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3Np
dGlvbigpOwotICAgIAotICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JI
UihzdGFydE5vZGUpKQotICAgICAgICByZXR1cm4gcG9zaXRpb25CZWZvcmVOb2RlKHN0YXJ0Tm9k
ZSk7Ci0KLSAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsK
LQogICAgIE5vZGUqIG5vZGUgPSBzdGFydE5vZGU7Ci0gICAgTm9kZSogaGlnaGVzdFJvb3QgPSBo
aWdoZXN0RWRpdGFibGVSb290KHApOwotICAgIGludCBvZmZzZXQgPSBwLmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCk7Ci0gICAgUG9zaXRpb246OkFuY2hvclR5cGUgdHlwZSA9IHAuYW5jaG9yVHlw
ZSgpOwotCiAgICAgTm9kZSogbiA9IHN0YXJ0Tm9kZTsKICAgICB3aGlsZSAobikgewogI2lmIEVO
QUJMRShVU0VSU0VMRUNUX0FMTCkKQEAgLTExOTgsOCArMTE4MywxMCBAQCBWaXNpYmxlUG9zaXRp
b24gc3RhcnRPZlBhcmFncmFwaChjb25zdCBWCiAgICAgICAgICAgICAgICAgaWYgKG4gPT0gc3Rh
cnROb2RlICYmIG8gPCBpKQogICAgICAgICAgICAgICAgICAgICBpID0gc3RkOjptYXgoMCwgbyk7
CiAgICAgICAgICAgICAgICAgd2hpbGUgKC0taSA+PSAwKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0ZXh0W2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KG4pLCBpICsgMSksIERPV05TVFJF
QU0pOworICAgICAgICAgICAgICAgICAgICBpZiAodGV4dFtpXSA9PSAnXG4nKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBvZmZzZXQgPSBpICsgMTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybiBuOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgbm9kZSA9IG47CkBAIC0xMjEzLDMzICsxMjAwLDEyIEBA
IFZpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBoKGNvbnN0IFYKICAgICAgICAgICAgIG4g
PSBOb2RlVHJhdmVyc2FsOjpwcmV2aW91c1Bvc3RPcmRlcigqbiwgc3RhcnRCbG9jayk7CiAgICAg
fQogCi0gICAgaWYgKHR5cGUgPT0gUG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikg
ewotICAgICAgICBBU1NFUlQodHlwZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5j
aG9yIHx8ICFvZmZzZXQpOwotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9u
KG5vZGUsIG9mZnNldCwgdHlwZSksIERPV05TVFJFQU0pOwotICAgIH0KLQotICAgIHJldHVybiBW
aXNpYmxlUG9zaXRpb24oUG9zaXRpb24obm9kZSwgdHlwZSksIERPV05TVFJFQU0pOworICAgIHJl
dHVybiBub2RlOwogfQogCi1WaXNpYmxlUG9zaXRpb24gZW5kT2ZQYXJhZ3JhcGgoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjLCBFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgYm91bmRhcnlDcm9z
c2luZ1J1bGUpCi17ICAgIAotICAgIGlmIChjLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7Ci0KLSAgICBQb3NpdGlvbiBwID0gYy5kZWVwRXF1aXZhbGVudCgpOwot
ICAgIE5vZGUqIHN0YXJ0Tm9kZSA9IHAuZGVwcmVjYXRlZE5vZGUoKTsKLQotICAgIGlmIChpc1Jl
bmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdlT3JIUihzdGFydE5vZGUpKQotICAgICAgICByZXR1
cm4gcG9zaXRpb25BZnRlck5vZGUoc3RhcnROb2RlKTsKLSAgICAKLSAgICBOb2RlKiBzdGFydEJs
b2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKLSAgICBOb2RlKiBzdGF5SW5zaWRlQmxv
Y2sgPSBzdGFydEJsb2NrOwotICAgIAorTm9kZSogZmluZEVuZE9mUGFyYWdyYXBoKE5vZGUqIHN0
YXJ0Tm9kZSwgTm9kZSogaGlnaGVzdFJvb3QsIE5vZGUqIHN0YXlJbnNpZGVCbG9jaywgaW50JiBv
ZmZzZXQsIFBvc2l0aW9uOjpBbmNob3JUeXBlJiB0eXBlLCBFZGl0aW5nQm91bmRhcnlDcm9zc2lu
Z1J1bGUgYm91bmRhcnlDcm9zc2luZ1J1bGUpCit7CiAgICAgTm9kZSogbm9kZSA9IHN0YXJ0Tm9k
ZTsKLSAgICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7Ci0gICAg
aW50IG9mZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKLSAgICBQb3NpdGlvbjo6
QW5jaG9yVHlwZSB0eXBlID0gcC5hbmNob3JUeXBlKCk7Ci0KICAgICBOb2RlKiBuID0gc3RhcnRO
b2RlOwogICAgIHdoaWxlIChuKSB7CiAjaWYgRU5BQkxFKFVTRVJTRUxFQ1RfQUxMKQpAQCAtMTI3
OSw4ICsxMjQ1LDEwIEBAIFZpc2libGVQb3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMK
ICAgICAgICAgICAgICAgICBpbnQgbyA9IG4gPT0gc3RhcnROb2RlID8gb2Zmc2V0IDogMDsKICAg
ICAgICAgICAgICAgICBpbnQgbGVuZ3RoID0gdGV4dC5sZW5ndGgoKTsKICAgICAgICAgICAgICAg
ICBmb3IgKGludCBpID0gbzsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICh0ZXh0W2ldID09ICdcbicpCi0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKGRvd25jYXN0PFRleHQ+KG4pLCBpKSwgRE9XTlNUUkVBTSk7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0ZXh0W2ldID09ICdcbicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9mZnNldCA9IGk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
bjsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIG5vZGUgPSBuOwpAQCAtMTI5Myw3ICsxMjYxLDYyIEBAIFZpc2libGVQ
b3NpdGlvbiBlbmRPZlBhcmFncmFwaChjb25zdCBWaXMKICAgICAgICAgfSBlbHNlCiAgICAgICAg
ICAgICBuID0gTm9kZVRyYXZlcnNhbDo6bmV4dCgqbiwgc3RheUluc2lkZUJsb2NrKTsKICAgICB9
CisgICAgcmV0dXJuIG5vZGU7Cit9CiAKK1Zpc2libGVQb3NpdGlvbiBzdGFydE9mUGFyYWdyYXBo
KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlIGJv
dW5kYXJ5Q3Jvc3NpbmdSdWxlKQoreworICAgIFBvc2l0aW9uIHAgPSBjLmRlZXBFcXVpdmFsZW50
KCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNhdGVkTm9kZSgpOworICAgIAorICAg
IGlmICghc3RhcnROb2RlKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CisgICAg
CisgICAgaWYgKGlzUmVuZGVyZWRBc05vbklubGluZVRhYmxlSW1hZ2VPckhSKHN0YXJ0Tm9kZSkp
CisgICAgICAgIHJldHVybiBwb3NpdGlvbkJlZm9yZU5vZGUoc3RhcnROb2RlKTsKKyAgICAKKyAg
ICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnROb2RlKTsKKyAgICAKKyAg
ICBOb2RlKiBoaWdoZXN0Um9vdCA9IGhpZ2hlc3RFZGl0YWJsZVJvb3QocCk7CisgICAgaW50IG9m
ZnNldCA9IHAuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKKyAgICBQb3NpdGlvbjo6QW5jaG9y
VHlwZSB0eXBlID0gcC5hbmNob3JUeXBlKCk7CisgICAgCisgICAgTm9kZSogbm9kZSA9IGZpbmRT
dGFydE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXJ0QmxvY2ssIG9mZnNl
dCwgdHlwZSwgYm91bmRhcnlDcm9zc2luZ1J1bGUpOworICAgIAorICAgIGlmIChpczxUZXh0Pihu
b2RlKSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihQb3NpdGlvbihkb3duY2FzdDxU
ZXh0Pihub2RlKSwgb2Zmc2V0KSwgRE9XTlNUUkVBTSk7CisgICAgCisgICAgaWYgKHR5cGUgPT0g
UG9zaXRpb246OlBvc2l0aW9uSXNPZmZzZXRJbkFuY2hvcikgeworICAgICAgICBBU1NFUlQodHlw
ZSA9PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yIHx8ICFvZmZzZXQpOworICAg
ICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgdHlwZSks
IERPV05TVFJFQU0pOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBv
c2l0aW9uKG5vZGUsIHR5cGUpLCBET1dOU1RSRUFNKTsKK30KKworVmlzaWJsZVBvc2l0aW9uIGVu
ZE9mUGFyYWdyYXBoKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgRWRpdGluZ0JvdW5kYXJ5Q3Jv
c3NpbmdSdWxlIGJvdW5kYXJ5Q3Jvc3NpbmdSdWxlKQoreyAgICAKKyAgICBpZiAoYy5pc051bGwo
KSkKKyAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbigpOworICAgIAorICAgIFBvc2l0aW9u
IHAgPSBjLmRlZXBFcXVpdmFsZW50KCk7CisgICAgTm9kZSogc3RhcnROb2RlID0gcC5kZXByZWNh
dGVkTm9kZSgpOworICAgIAorICAgIGlmIChpc1JlbmRlcmVkQXNOb25JbmxpbmVUYWJsZUltYWdl
T3JIUihzdGFydE5vZGUpKQorICAgICAgICByZXR1cm4gcG9zaXRpb25BZnRlck5vZGUoc3RhcnRO
b2RlKTsKKyAgICAKKyAgICBOb2RlKiBzdGFydEJsb2NrID0gZW5jbG9zaW5nQmxvY2soc3RhcnRO
b2RlKTsKKyAgICBOb2RlKiBzdGF5SW5zaWRlQmxvY2sgPSBzdGFydEJsb2NrOworICAgIAorICAg
IE5vZGUqIGhpZ2hlc3RSb290ID0gaGlnaGVzdEVkaXRhYmxlUm9vdChwKTsKKyAgICBpbnQgb2Zm
c2V0ID0gcC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpOworICAgIFBvc2l0aW9uOjpBbmNob3JU
eXBlIHR5cGUgPSBwLmFuY2hvclR5cGUoKTsKKyAgICAKKyAgICBOb2RlKiBub2RlID0gZmluZEVu
ZE9mUGFyYWdyYXBoKHN0YXJ0Tm9kZSwgaGlnaGVzdFJvb3QsIHN0YXlJbnNpZGVCbG9jaywgb2Zm
c2V0LCB0eXBlLCBib3VuZGFyeUNyb3NzaW5nUnVsZSk7CisgICAgCisgICAgaWYgKGlzPFRleHQ+
KG5vZGUpKQorICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKFBvc2l0aW9uKGRvd25jYXN0
PFRleHQ+KG5vZGUpLCBvZmZzZXQpLCBET1dOU1RSRUFNKTsKKyAgICAKICAgICBpZiAodHlwZSA9
PSBQb3NpdGlvbjo6UG9zaXRpb25Jc09mZnNldEluQW5jaG9yKQogICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKFBvc2l0aW9uKG5vZGUsIG9mZnNldCwgdHlwZSksIERPV05TVFJFQU0pOwog
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgJKHJldmlzaW9uIDE5NjQy
MykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTExNiw2ICsxMTYsOCBAQCB1bnNpZ25lZCBzdWZmaXhMZW5ndGhGb3JSYW5nZShSZWZQ
dHI8UmFuCiB1bnNpZ25lZCBwcmVmaXhMZW5ndGhGb3JSYW5nZShSZWZQdHI8UmFuZ2U+LCBWZWN0
b3I8VUNoYXIsIDEwMjQ+Jik7CiB1bnNpZ25lZCBiYWNrd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0
aFRleHRJdGVyYXRvcihTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yJiwgVmVjdG9yPFVD
aGFyLCAxMDI0PiYsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKTsKIHVuc2lnbmVk
IGZvcndhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3IoVGV4dEl0ZXJhdG9yJiwg
VmVjdG9yPFVDaGFyLCAxMDI0PiYsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uKTsK
K05vZGUqIGZpbmRTdGFydE9mUGFyYWdyYXBoKE5vZGUqLCBOb2RlKiwgTm9kZSosIGludCYsIFBv
c2l0aW9uOjpBbmNob3JUeXBlJiwgRWRpdGluZ0JvdW5kYXJ5Q3Jvc3NpbmdSdWxlKTsKK05vZGUq
IGZpbmRFbmRPZlBhcmFncmFwaChOb2RlKiwgTm9kZSosIE5vZGUqLCBpbnQmLCBQb3NpdGlvbjo6
QW5jaG9yVHlwZSYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSk7CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0NoYW5nZUxvZwkocmV2aXNpb24gMTk2NTIwKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDMgKzEsNTYgQEAKKzIwMTYtMDItMTIgIE5hbiBXYW5nICA8bl93YW5nQGFw
cGxlLmNvbT4KKworICAgICAgICBBWDogSW1wbGVtZW50IHBhcmFncmFwaCByZWxhdGVkIHRleHQg
bWFya2VyIGZ1bmN0aW9ucyB1c2luZyBUZXh0SXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDA5OAorICAgICAgICA8cmRhcjovL3Byb2Js
ZW0vMjQyNjk2NzU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAg
ICAgKG5leHRXb3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFjayk6CisgICAgICAg
IChwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyQ2FsbGJhY2spOgorICAgICAg
ICAocHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2sp
OgorICAgICAgICAobmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJh
Y2spOgorICAgICAgICAoc2V0U2VsZWN0ZWRWaXNpYmxlVGV4dFJhbmdlQ2FsbGJhY2spOgorICAg
ICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4
dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0
TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAg
ICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlNDbGFz
cyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1t
OgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFdvcmRFbmRUZXh0TWFya2Vy
Rm9yVGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3Jh
cGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6
CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1h
cmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3Np
YmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6
bmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKToKKyAg
ICAgICAgKEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChBY2Nlc3NpYmlsaXR5VUlFbGVtZW50Ojpu
ZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6c3VwcG9ydGVkQWN0aW9ucyk6CisgICAgICAgICogV2ViS2l0VGVz
dFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cmlnaHRXb3JkVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBy
ZXZpb3VzV29yZFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIpOgorICAgICAgICAoV1RSOjpB
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vy
KToKKyAgICAgICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAg
IChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgICogV2ViS2l0VGVzdFJ1bm5lci9JbmplY3Rl
ZEJ1bmRsZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50Lmg6CisgICAgICAgICogV2ViS2l0VGVzdFJ1
bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbDoK
KyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50SU9TLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmlsaXR5VUlFbGVtZW50
OjpuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAgICAgKFdUUjo6QWNj
ZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
cik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhF
bmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6
CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om1hdGhQb3N0c2NyaXB0c0Rl
c2NyaXB0aW9uKToKKyAgICAgICAgKiBXZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL21h
Yy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tOgorICAgICAgICAoV1RSOjpBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKToKKyAgICAg
ICAgKFdUUjo6QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdl
Rm9yVGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBy
ZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcik6CisgICAgICAgIChX
VFI6OkFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcik6CisgICAgICAgIChXVFI6Ol9jb252ZXJ0TWF0aE11bHRpc2NyaXB0UGFpcnNU
b1N0cmluZyk6CisKIDIwMTYtMDItMTIgIEphc29uIE1hcmNlbGwgIDxqbWFyY2VsbEBhcHBsZS5j
b20+CiAKICAgICAgICAgT3BlbiBzb3VyY2UgYm90IHdhdGNoZXIncyBkYXNoYm9hcmQgZmFpbHMg
YXNzZXJ0aW9uIGluIEJ1aWxkYm90UXVldWUucHJvdG90eXBlLmNvbXBhcmVJdGVyYXRpb25zQnlS
ZXZpc2lvbnMKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlVSUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0FjY2Vzc2liaWxpdHlV
SUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxOTY0MjMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAxMCw2ICsxMDEw
LDMzIEBAIHN0YXRpYyBKU1ZhbHVlUmVmIG5leHRXb3JkRW5kVGV4dE1hcmtlckYKICAgICByZXR1
cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXI6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
KGNvbnRleHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5uZXh0V29yZEVuZFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyKG1hcmtlcikpOwogfQogCitzdGF0aWMgSlNWYWx1ZVJlZiBwYXJhZ3JhcGhU
ZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQs
IEpTT2JqZWN0UmVmIGZ1bmN0aW9uLCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJn
dW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIgPSBudWxscHRy
OworICAgIGlmIChhcmd1bWVudENvdW50ID09IDEpCisgICAgICAgIG1hcmtlciA9IHRvVGV4dE1h
cmtlcihKU1ZhbHVlVG9PYmplY3QoY29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsK
KyAgICAKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZTo6bWFrZUpTQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZShjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0
KS0+cGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihtYXJrZXIpKTsKK30KKwor
c3RhdGljIEpTVmFsdWVSZWYgcHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyQ2FsbGJhY2soSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIGZ1bmN0aW9u
LCBKU09iamVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNW
YWx1ZVJlZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKiBtYXJrZXIgPSBudWxscHRyOworICAgIGlmIChhcmd1bWVudENv
dW50ID09IDEpCisgICAgICAgIG1hcmtlciA9IHRvVGV4dE1hcmtlcihKU1ZhbHVlVG9PYmplY3Qo
Y29udGV4dCwgYXJndW1lbnRzWzBdLCBleGNlcHRpb24pKTsKKyAgICAKKyAgICByZXR1cm4gQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXI6Om1ha2VKU0FjY2Vzc2liaWxpdHlUZXh0TWFya2VyKGNvbnRl
eHQsIHRvQVhFbGVtZW50KHRoaXNPYmplY3QpLT5wcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXIobWFya2VyKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlUmVmIG5leHRQ
YXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlckNhbGxiYWNrKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwgSlNPYmplY3RSZWYgdGhpc09iamVjdCwgc2l6
ZV90IGFyZ3VtZW50Q291bnQsIGNvbnN0IEpTVmFsdWVSZWYgYXJndW1lbnRzW10sIEpTVmFsdWVS
ZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogbWFya2VyID0g
bnVsbHB0cjsKKyAgICBpZiAoYXJndW1lbnRDb3VudCA9PSAxKQorICAgICAgICBtYXJrZXIgPSB0
b1RleHRNYXJrZXIoSlNWYWx1ZVRvT2JqZWN0KGNvbnRleHQsIGFyZ3VtZW50c1swXSwgZXhjZXB0
aW9uKSk7CisgICAgCisgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjptYWtlSlNB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlcihjb250ZXh0LCB0b0FYRWxlbWVudCh0aGlzT2JqZWN0KS0+
bmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKG1hcmtlcikpOworfQorCiBz
dGF0aWMgSlNWYWx1ZVJlZiBzZXRTZWxlY3RlZFZpc2libGVUZXh0UmFuZ2VDYWxsYmFjayhKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgZnVuY3Rpb24sIEpTT2JqZWN0UmVmIHRoaXNP
YmplY3QsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBKU1ZhbHVlUmVmIGFyZ3VtZW50c1td
LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCiB7CiAgICAgQWNjZXNzaWJpbGl0eVVJRWxlbWVudCog
dWlFbGVtZW50ID0gdG9BWEVsZW1lbnQodGhpc09iamVjdCk7CkBAIC0xNjIwLDYgKzE2NDcsMjEg
QEAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRQogICAgIHJldHVybiBu
dWxscHRyOwogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlV
SUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIqKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFncmFwaFN0
YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKQorewor
ICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3Np
YmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIo
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKQoreworICAgIHJldHVybiBudWxscHRyOworfQorCiAj
ZW5kaWYKIAogLy8gRGVzdHJ1Y3Rpb24KQEAgLTE4MDQsNiArMTg0Niw5IEBAIEpTQ2xhc3NSZWYg
QWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6Z2V0SlMKICAgICAgICAgeyAicmlnaHRXb3JkVGV4dE1h
cmtlclJhbmdlRm9yVGV4dE1hcmtlciIsIHJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRN
YXJrZXJDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5
QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJwcmV2aW91c1dvcmRTdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyIiwgcHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlckNhbGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlB
dHRyaWJ1dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgIm5leHRXb3JkRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIiLCBuZXh0V29yZEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyQ2FsbGJhY2ss
IGtKU1Byb3BlcnR5QXR0cmlidXRlUmVhZE9ubHkgfCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnRE
ZWxldGUgfSwKKyAgICAgICAgeyAicGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
ciIsIHBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXJDYWxsYmFjaywga0pTUHJv
cGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9
LAorICAgICAgICB7ICJwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJr
ZXIiLCBwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFj
aywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9u
dERlbGV0ZSB9LAorICAgICAgICB7ICJuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRN
YXJrZXIiLCBuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJDYWxsYmFjaywg
a0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25seSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERl
bGV0ZSB9LAogICAgICAgICB7ICJzZXRTZWxlY3RlZENoaWxkIiwgc2V0U2VsZWN0ZWRDaGlsZENh
bGxiYWNrLCBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1
dGVEb250RGVsZXRlIH0sCiAgICAgICAgIHsgInNldFNlbGVjdGVkQ2hpbGRBdEluZGV4Iiwgc2V0
U2VsZWN0ZWRDaGlsZEF0SW5kZXhDYWxsYmFjaywga0pTUHJvcGVydHlBdHRyaWJ1dGVSZWFkT25s
eSB8IGtKU1Byb3BlcnR5QXR0cmlidXRlRG9udERlbGV0ZSB9LAogICAgICAgICB7ICJyZW1vdmVT
ZWxlY3Rpb25BdEluZGV4IiwgcmVtb3ZlU2VsZWN0aW9uQXRJbmRleENhbGxiYWNrLCBrSlNQcm9w
ZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5IHwga0pTUHJvcGVydHlBdHRyaWJ1dGVEb250RGVsZXRlIH0s
CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5o
CShyZXZpc2lvbiAxOTY0MjMpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9BY2Nlc3NpYmlsaXR5
VUlFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw2ICsyNjQsOSBAQCBwdWJsaWM6CiAg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXJSYW5nZSByaWdodFdvcmRUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CiAgICAgQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgcHJldmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciopOwogICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIG5leHRX
b3JkRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsK
KyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKKyAgICBBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciBwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJr
ZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKKyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciBuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIqKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIHNlbGVjdGVkVGV4
dE1hcmtlclJhbmdlKCk7CiAgICAgdm9pZCByZXNldFNlbGVjdGVkVGV4dE1hcmtlclJhbmdlKCk7
CiAgICAgYm9vbCBzZXRTZWxlY3RlZFZpc2libGVUZXh0UmFuZ2UoQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSopOwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9zL0FjY2Vzc2liaWxp
dHlVSUVsZW1lbnRJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvaW9z
L0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRJT1MubW0JKHJldmlzaW9uIDE5NjQyMykKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC01NzAsNiArNTcwLDIxIEBAIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIEFjY2Vz
c2liaWxpdHlVSUUKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAorQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXJSYW5nZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwYXJhZ3JhcGhUZXh0TWFya2VyUmFu
Z2VGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxl
bWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6bmV4dFBhcmFncmFwaEVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikKK3sKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwogI2VuZGlmIC8vIFNVUFBPUlRTX0FYX1RFWFRNQVJLRVJT
ICYmIFBMQVRGT1JNKElPUykKIAogI3ByYWdtYSBtYXJrIFVudXNlZApJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnRNYWMubW0J
KHJldmlzaW9uIDE5NjQyMykKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xODg2LDYgKzE4ODYsMzYgQEAg
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgQWNjZXNzaWJpbGl0eVVJRQogICAgIHJldHVybiBudWxs
cHRyOwogfQogCitBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlIEFjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05T
CisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmli
dXRlVmFsdWU6QCJBWFBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIiIGZvclBh
cmFtZXRlcjooaWQpdGV4dE1hcmtlci0+cGxhdGZvcm1UZXh0TWFya2VyKCldOworICAgIHJldHVy
biBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdlKHRleHRNYXJrZXJSYW5nZSk7CisgICAgRU5E
X0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1BhcmFn
cmFwaFN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIq
IHRleHRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgcHJl
dmlvdXNUZXh0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIgZm9yUGFy
YW1ldGVyOihpZCl0ZXh0TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKHByZXZpb3VzVGV4dE1hcmtlcik7CisgICAgRU5EX0FY
X09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJr
ZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgbmV4dFRleHRNYXJr
ZXIgPSBbbV9lbGVtZW50IGFjY2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpAIkFYTmV4dFBhcmFn
cmFwaEVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyIiBmb3JQYXJhbWV0ZXI6KGlkKXRleHRNYXJr
ZXItPnBsYXRmb3JtVGV4dE1hcmtlcigpXTsKKyAgICByZXR1cm4gQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIobmV4dFRleHRNYXJrZXIpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICAK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwogI2VuZGlmIC8vIFNVUFBPUlRTX0FYX1RFWFRNQVJL
RVJTICYmIFBMQVRGT1JNKE1BQykKIAogSlNTdHJpbmdSZWYgQWNjZXNzaWJpbGl0eVVJRWxlbWVu
dDo6c3VwcG9ydGVkQWN0aW9ucygpCkluZGV4OiBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVj
dGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE5NjQyMykKKysrIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRC
dW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0OSw2
ICsyNDksOSBAQCBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+CiBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1l
bnQ6OnJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIqKSB7IHJldHVybiBudWxscHRyOyB9CiBQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyPiBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50OjpwcmV2aW91c1dvcmRTdGFydFRleHRN
YXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKikgeyByZXR1cm4gbnVs
bHB0cjsgfQogUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNzaWJpbGl0
eVVJRWxlbWVudDo6bmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIG51bGxwdHI7IH0KK1Bhc3NSZWZQdHI8QWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZT4gQWNjZXNzaWJpbGl0eVVJRWxlbWVudDo6cGFyYWdyYXBoVGV4
dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopIHsgcmV0
dXJuIG51bGxwdHI7IH0KK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vz
c2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtl
cihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopIHsgcmV0dXJuIG51bGxwdHI7IH0KK1Bhc3NSZWZQ
dHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXZp
b3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciopIHsgcmV0dXJuIG51bGxwdHI7IH0KICNlbmRpZgogCiB9IC8vIG5hbWVzcGFjZSBX
VFIKSW5kZXg6IFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYktpdFRlc3RSdW5uZXIvSW5q
ZWN0ZWRCdW5kbGUvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5oCShyZXZpc2lvbiAxOTY0MjMpCisr
KyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL0FjY2Vzc2liaWxpdHlVSUVs
ZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjU1LDYgKzI1NSw5IEBAIHB1YmxpYzoKICAgICBQ
YXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2U+IHJpZ2h0V29yZFRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqKTsKICAgICBQYXNz
UmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBwcmV2aW91c1dvcmRTdGFydFRleHRNYXJr
ZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKik7CiAgICAgUGFzc1JlZlB0
cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gbmV4dFdvcmRFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJp
bGl0eVRleHRNYXJrZXJSYW5nZT4gcGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtl
cihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0
eVRleHRNYXJrZXI+IG5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciopOworICAgIFBhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRN
YXJrZXI+IHByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciopOwogCiAgICAgLy8gUmV0dXJucyBhbiBvcmRlcmVkIGxpc3Qg
b2Ygc3VwcG9ydGVkIGFjdGlvbnMgZm9yIGFuIGVsZW1lbnQuCiAgICAgSlNSZXRhaW5QdHI8SlNT
dHJpbmdSZWY+IHN1cHBvcnRlZEFjdGlvbnMoKSBjb25zdDsKSW5kZXg6IFRvb2xzL1dlYktpdFRl
c3RSdW5uZXIvSW5qZWN0ZWRCdW5kbGUvQmluZGluZ3MvQWNjZXNzaWJpbGl0eVVJRWxlbWVudC5p
ZGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9C
aW5kaW5ncy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50LmlkbAkocmV2aXNpb24gMTk2NDIzKQorKysg
VG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9CaW5kaW5ncy9BY2Nlc3NpYmls
aXR5VUlFbGVtZW50LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMjA1LDYgKzIwNSw5IEBAIGludGVy
ZmFjZSBBY2Nlc3NpYmlsaXR5VUlFbGVtZW50IHsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
clJhbmdlIHJpZ2h0V29yZFRleHRNYXJrZXJSYW5nZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgdGV4dE1hcmtlcik7CiAgICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgcHJl
dmlvdXNXb3JkU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciB0ZXh0TWFya2VyKTsKICAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBuZXh0V29yZEVu
ZFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJr
ZXIpOworICAgIEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFuZ2UgcGFyYWdyYXBoVGV4dE1hcmtl
clJhbmdlRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciB0ZXh0TWFya2VyKTsK
KyAgICBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBwcmV2aW91c1BhcmFncmFwaFN0YXJ0VGV4dE1h
cmtlckZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgdGV4dE1hcmtlcik7Cisg
ICAgQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgbmV4dFBhcmFncmFwaEVuZFRleHRNYXJrZXJGb3JU
ZXh0TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHRleHRNYXJrZXIpOwogCiAgICAgLy8g
UmV0dXJucyBhbiBvcmRlcmVkIGxpc3Qgb2Ygc3VwcG9ydGVkIGFjdGlvbnMgZm9yIGFuIGVsZW1l
bnQuCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIERPTVN0cmluZyBzdXBwb3J0ZWRBY3Rpb25zOwpJ
bmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9pb3MvQWNjZXNzaWJp
bGl0eVVJRWxlbWVudElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0UnVubmVy
L0luamVjdGVkQnVuZGxlL2lvcy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCShyZXZpc2lv
biAxOTY0MjMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxlL2lvcy9B
Y2Nlc3NpYmlsaXR5VUlFbGVtZW50SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMTE2LDYgKzEx
MTYsMjEgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZQogICAgIHJl
dHVybiBudWxscHRyOwogfQogCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyUmFu
Z2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5nZUZvclRl
eHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRleHRNYXJrZXI+IEFj
Y2Vzc2liaWxpdHlVSUVsZW1lbnQ6Om5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1h
cmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtlcikKK3sKKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZXNz
aWJpbGl0eVVJRWxlbWVudDo6cHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyKEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiB0ZXh0TWFya2VyKQoreworICAgIHJldHVy
biBudWxscHRyOworfQorCiBKU1JldGFpblB0cjxKU1N0cmluZ1JlZj4gQWNjZXNzaWJpbGl0eVVJ
RWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzRGVzY3JpcHRpb24oKSBjb25zdAogewogICAgIHJldHVy
biAwOwpJbmRleDogVG9vbHMvV2ViS2l0VGVzdFJ1bm5lci9JbmplY3RlZEJ1bmRsZS9tYWMvQWNj
ZXNzaWJpbGl0eVVJRWxlbWVudE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJLaXRUZXN0
UnVubmVyL0luamVjdGVkQnVuZGxlL21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCShy
ZXZpc2lvbiAxOTY0MjMpCisrKyBUb29scy9XZWJLaXRUZXN0UnVubmVyL0luamVjdGVkQnVuZGxl
L21hYy9BY2Nlc3NpYmlsaXR5VUlFbGVtZW50TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xOTEz
LDYgKzE5MTMsMzYgQEAgUGFzc1JlZlB0cjxBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcj4gQWNjZQog
ICAgIHJldHVybiBudWxscHRyOwogfQogCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFy
a2VyUmFuZ2U+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIoQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7Cisg
ICAgQkVHSU5fQVhfT0JKQ19FWENFUFRJT05TCisgICAgaWQgdGV4dE1hcmtlclJhbmdlID0gW21f
ZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6QCJBWFBhcmFncmFwaFRleHRNYXJr
ZXJSYW5nZUZvclRleHRNYXJrZXIiIGZvclBhcmFtZXRlcjooaWQpdGV4dE1hcmtlci0+cGxhdGZv
cm1UZXh0TWFya2VyKCldOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlclJhbmdl
OjpjcmVhdGUodGV4dE1hcmtlclJhbmdlKTsKKyAgICBFTkRfQVhfT0JKQ19FWENFUFRJT05TCisg
ICAgCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1Bhc3NSZWZQdHI8QWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXI+IEFjY2Vzc2liaWxpdHlVSUVsZW1lbnQ6OnByZXZpb3VzUGFyYWdyYXBoU3RhcnRU
ZXh0TWFya2VyRm9yVGV4dE1hcmtlcihBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciogdGV4dE1hcmtl
cikKK3sKKyAgICBCRUdJTl9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICBpZCBwcmV2aW91c1BhcmFn
cmFwaFN0YXJ0TWFya2VyID0gW21fZWxlbWVudCBhY2Nlc3NpYmlsaXR5QXR0cmlidXRlVmFsdWU6
QCJBWFByZXZpb3VzUGFyYWdyYXBoU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlciIgZm9yUGFy
YW1ldGVyOihpZCl0ZXh0TWFya2VyLT5wbGF0Zm9ybVRleHRNYXJrZXIoKV07CisgICAgcmV0dXJu
IEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyOjpjcmVhdGUocHJldmlvdXNQYXJhZ3JhcGhTdGFydE1h
cmtlcik7CisgICAgRU5EX0FYX09CSkNfRVhDRVBUSU9OUworICAgIAorICAgIHJldHVybiBudWxs
cHRyOworfQorCitQYXNzUmVmUHRyPEFjY2Vzc2liaWxpdHlUZXh0TWFya2VyPiBBY2Nlc3NpYmls
aXR5VUlFbGVtZW50OjpuZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIqIHRleHRNYXJrZXIpCit7CisgICAgQkVHSU5fQVhfT0JKQ19F
WENFUFRJT05TCisgICAgaWQgbmV4dFBhcmFncmFwaEVuZE1hcmtlciA9IFttX2VsZW1lbnQgYWNj
ZXNzaWJpbGl0eUF0dHJpYnV0ZVZhbHVlOkAiQVhOZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZv
clRleHRNYXJrZXIiIGZvclBhcmFtZXRlcjooaWQpdGV4dE1hcmtlci0+cGxhdGZvcm1UZXh0TWFy
a2VyKCldOworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlcjo6Y3JlYXRlKG5leHRQ
YXJhZ3JhcGhFbmRNYXJrZXIpOworICAgIEVORF9BWF9PQkpDX0VYQ0VQVElPTlMKKyAgICAKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKwogc3RhdGljIE5TU3RyaW5nICpfY29udmVydE1hdGhNdWx0
aXNjcmlwdFBhaXJzVG9TdHJpbmcoTlNBcnJheSAqcGFpcnMpCiB7CiAgICAgX19ibG9jayBOU011
dGFibGVTdHJpbmcgKnJlc3VsdCA9IFtOU011dGFibGVTdHJpbmcgc3RyaW5nXTsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE5NjQyMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE2IEBACisyMDE2LTAyLTEyICBOYW4gV2FuZyAgPG5fd2FuZ0BhcHBsZS5j
b20+CisKKyAgICAgICAgQVg6IEltcGxlbWVudCBwYXJhZ3JhcGggcmVsYXRlZCB0ZXh0IG1hcmtl
ciBmdW5jdGlvbnMgdXNpbmcgVGV4dEl0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTQwOTgKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI0
MjY5Njc1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5hdi1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL3RleHQtbWFya2VyLXBhcmFn
cmFwaC1uYXYuaHRtbDogQWRkZWQuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtl
ci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBhY2Nl
c3NpYmlsaXR5L3RleHQtbWFya2VyL3RleHQtbWFya2VyLXByZXZpb3VzLW5leHQuaHRtbDoKKwog
MjAxNi0wMi0xMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIE1v
dmUgJ2xlbmd0aCcgcHJvcGVydHkgdG8gdGhlIHByb3RvdHlwZQpJbmRleDogTGF5b3V0VGVzdHMv
YWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5hdi1leHBlY3RlZC50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXIt
cGFyYWdyYXBoLW5hdi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9h
Y2Nlc3NpYmlsaXR5L21hYy90ZXh0LW1hcmtlci1wYXJhZ3JhcGgtbmF2LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACitwYXJhZ3JhcGggdGVzdAorVGVzdCBDb250
ZW50ZWRpdGFibGUgaXMgd29ya2luZy4KK2MgZAordGVzdCBhdWRpbyBmaWxlCitjYW4ndCBzZWxl
Y3QKK+W3p+WFi+WKmyDmmK/po5/nianlkJc/CivZg9mK2YEg2K3Yp9mE2YPYnworYm90aCAgIHNw
YWNlcworbGluZSBicmVha3MKK3NvbWUKK3RleHQKK3RoaXMgaXMgbXkgZmlyc3QgcGFyYWdyYXBo
LiBPZiB0ZXh0LiBpdCBoYXMgc29tZSB0ZXh0LgordGhpcyBpcyBteSBzZWNvbmQgcGFyYWdyYXBo
LiBPZiB0ZXh0LiBpdCBoYXMgc29tZSB0ZXh0LgordGhpcyBpcyBteSB0aGlyZCBwYXJhZ3JhcGgu
IE9mIHRleHQuIGl0IGhhcyBzb21lIHRleHQuCisKK1RoaXMgdGVzdHMgdGhhdCBwYXJhZ3JhcGgg
bmF2aWdhdGlvbiBpcyB3b3JraW5nIGNvcnJlY3RseS4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiBwCitDdXJyZW50IHBhcmFncmFwaCBpczog
cGFyYWdyYXBoIHRlc3QKK1ByZSBwYXJhZ3JhcGggc3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5k
OiBwYXJhZ3JhcGggdGVzdAorCitDdXJyZW50IGNoYXJhY3RlciBpczogVAorQ3VycmVudCBwYXJh
Z3JhcGggaXM6IFRlc3QgQ29udGVudAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFn
cmFwaCBlbmQ6IFRlc3QgQ29udGVudAorCitDdXJyZW50IGNoYXJhY3RlciBpczogYworQ3VycmVu
dCBwYXJhZ3JhcGggaXM6IGMgW0FUVEFDSE1FTlRdZAorUHJlIHBhcmFncmFwaCBzdGFydCB0byBu
ZXh0IHBhcmFncmFwaCBlbmQ6IGMgW0FUVEFDSE1FTlRdZAorCitDdXJyZW50IGNoYXJhY3RlciBp
czogZAorQ3VycmVudCBwYXJhZ3JhcGggaXM6IGMgW0FUVEFDSE1FTlRdZAorUHJlIHBhcmFncmFw
aCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6IGMgW0FUVEFDSE1FTlRdZAordGVzdCBhdWRp
byDvv7xmaWxlCisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiB0CitDdXJyZW50IHBhcmFncmFwaCBp
czogdGVzdCBhdWRpbyBbQVRUQUNITUVOVF1maWxlCitQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5l
eHQgcGFyYWdyYXBoIGVuZDogdGVzdCBhdWRpbyBbQVRUQUNITUVOVF1maWxlCisKK0N1cnJlbnQg
Y2hhcmFjdGVyIGlzOiBjCitDdXJyZW50IHBhcmFncmFwaCBpczogY2FuJ3Qgc2VsZWN0CitQcmUg
cGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogY2FuJ3Qgc2VsZWN0CisKK0N1
cnJlbnQgY2hhcmFjdGVyIGlzOiDlt6cKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiDlt6flhYvlipsg
5piv6aOf54mp5ZCXPworUHJlIHBhcmFncmFwaCBzdGFydCB0byBuZXh0IHBhcmFncmFwaCBlbmQ6
IOW3p+WFi+WKmyDmmK/po5/nianlkJc/CisKK0N1cnJlbnQgY2hhcmFjdGVyIGlzOiDZgworQ3Vy
cmVudCBwYXJhZ3JhcGggaXM6INmD2YrZgSDYrdin2YTZg9ifCitQcmUgcGFyYWdyYXBoIHN0YXJ0
IHRvIG5leHQgcGFyYWdyYXBoIGVuZDog2YPZitmBINit2KfZhNmD2J8KKworQ3VycmVudCBjaGFy
YWN0ZXIgaXM6IGIKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBib3RoICAgc3BhY2VzCitQcmUgcGFy
YWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogYm90aCAgIHNwYWNlcworCitDdXJy
ZW50IGNoYXJhY3RlciBpczogaQorQ3VycmVudCBwYXJhZ3JhcGggaXM6IGxpbmUgYnJlYWtzCitQ
cmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogbGluZSBicmVha3MKKwor
Q3VycmVudCBjaGFyYWN0ZXIgaXM6IHMKK0N1cnJlbnQgcGFyYWdyYXBoIGlzOiBzb21lCitQcmUg
cGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVuZDogc29tZQorCitDdXJyZW50IGNo
YXJhY3RlciBpczogdAorQ3VycmVudCBwYXJhZ3JhcGggaXM6IHRleHQKK1ByZSBwYXJhZ3JhcGgg
c3RhcnQgdG8gbmV4dCBwYXJhZ3JhcGggZW5kOiB0ZXh0CisKK1BhcmFncmFwaDogdGhpcyBpcyBt
eSBmaXJzdCBwYXJhZ3JhcGguIE9mIHRleHQuIGl0IGhhcyBzb21lIHRleHQuCitQYXJhZ3JhcGg6
IHRoaXMgaXMgbXkgc2Vjb25kIHBhcmFncmFwaC4gT2YgdGV4dC4gaXQgaGFzIHNvbWUgdGV4dC4K
K1BhcmFncmFwaDogdGhpcyBpcyBteSB0aGlyZCBwYXJhZ3JhcGguIE9mIHRleHQuIGl0IGhhcyBz
b21lIHRleHQuCitQYXJhZ3JhcGg6IHRoaXMgaXMgbXkgdGhpcmQgcGFyYWdyYXBoLiBPZiB0ZXh0
LiBpdCBoYXMgc29tZSB0ZXh0LgorUGFyYWdyYXBoOiB0aGlzIGlzIG15IHNlY29uZCBwYXJhZ3Jh
cGguIE9mIHRleHQuIGl0IGhhcyBzb21lIHRleHQuCitQYXJhZ3JhcGg6IHRoaXMgaXMgbXkgZmly
c3QgcGFyYWdyYXBoLiBPZiB0ZXh0LiBpdCBoYXMgc29tZSB0ZXh0LgorVGVzdCBnb2luZyBmb3J3
YXJkLgorRW5kIHBhcmFncmFwaDogdGV4dAorCitUZXN0IGdvaW5nIGJhY2t3YXJkcy4KK1N0YXJ0
IHBhcmFncmFwaDogcGFyYWdyYXBoIHRlc3QKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9hY2Nlc3NpYmlsaXR5L21h
Yy90ZXh0LW1hcmtlci1wYXJhZ3JhcGgtbmF2Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFyYWdyYXBoLW5hdi5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS9tYWMvdGV4dC1tYXJrZXItcGFy
YWdyYXBoLW5hdi5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PG1ldGEgY2hhcnNldD0idXRmLTgiPiAKKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPHN0eWxlPgorLnVzZXJzZWxlY3QgeyB1
c2VyLXNlbGVjdDogbm9uZTsgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsgfQorPC9zdHlsZT4K
Kzxib2R5IGlkPSJib2R5Ij4KKworPGRpdiBpZD0idGV4dDEiIHRhYmluZGV4PSIwIj4KK3BhcmE8
c3Bhbj5ncmFwaDwvc3Bhbj4KK3Rlc3QKKzwvZGl2PgorCis8ZGl2IGlkPSJ0ZXh0MiI+CitUZXN0
IENvbnRlbnQ8c3BhbiBjb250ZW50ZWRpdGFibGU9InRydWUiPmVkaXRhYmxlIGlzIHdvcmtpbmcu
PC9zcGFuPgorPC9kaXY+CisKKzxkaXYgaWQ9InRleHQzIj4KK2MgPGltZyBzcmM9IiMiIGFyaWEt
bGFiZWw9ImJsYWgiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjYWFhYWFhOyB3aWR0aDogMTAw
cHg7IGhlaWdodDogMTAwcHg7Ij5kCis8L2Rpdj4KKworPGRpdiBpZD0idGV4dDQiPgordGVzdCBh
dWRpbyA8YXVkaW8gY29udHJvbHM+PHNvdXJjZSBzcmM9InRlc3QubXAzIiB0eXBlPSJhdWRpby9t
cGVnIj48L2F1ZGlvPmZpbGUKKzwvZGl2PgorCis8ZGl2IGNsYXNzPSIiIGlkPSJ0ZXh0NSI+Y2Fu
J3Qgc2VsZWN0PC9kaXY+CisKKzxkaXYgaWQ9InRleHQ2Ij4KK+W3p+WFi+WKmwor5piv6aOf54mp
5ZCXPworPC9kaXY+CisKKzxkaXYgaWQ9InRleHQ2YSI+CivZg9mK2YEg2K3Yp9mE2YPYnworPC9k
aXY+CisKKzxwcmUgaWQ9InRleHQ3Ij4KK2JvdGggICBzcGFjZXMKK2xpbmUgYnJlYWtzCis8L3By
ZT4KKworPGRpdiBpZD0idGV4dDgiPgorc29tZTxicj50ZXh0Cis8L2Rpdj4KKworPGRpdiBpZD0i
dGV4dDkiPnRoaXMgaXMgbXkgZmlyc3QgcGFyYWdyYXBoLiBPZiB0ZXh0LiBpdCBoYXMgc29tZSB0
ZXh0Ljxicj4KK3RoaXMgaXMgbXkgc2Vjb25kIHBhcmFncmFwaC4gT2YgdGV4dC4gaXQgaGFzIHNv
bWUgdGV4dC48YnI+Cit0aGlzIGlzIG15IHRoaXJkIHBhcmFncmFwaC4gT2YgdGV4dC4gaXQgaGFz
IHNvbWUgdGV4dC48YnI+PGJyPgorPC9kaXY+CisKKzxwIGlkPSJkZXNjcmlwdGlvbiI+PC9wPgor
PGRpdiBpZD0iY29uc29sZSI+PC9kaXY+CisKKzxzY3JpcHQ+CisKKyAgICBkZXNjcmlwdGlvbigi
VGhpcyB0ZXN0cyB0aGF0IHBhcmFncmFwaCBuYXZpZ2F0aW9uIGlzIHdvcmtpbmcgY29ycmVjdGx5
LiIpOworICAgIAorICAgIGlmICh3aW5kb3cuYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIpIHsKKyAg
ICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoYXQgd2UgY2FuIGdldCB0aGUgcGFyYWdyYXBoIHJh
bmdlIHdpdGggc3BhbiB0YWcuCisgICAgICAgIHZhciB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRy
b2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MSIpOworICAgICAgICB2YXIgdGV4dE1h
cmtlclJhbmdlID0gdGV4dC50ZXh0TWFya2VyUmFuZ2VGb3JFbGVtZW50KHRleHQpOworICAgICAg
ICB2YXIgc3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5n
ZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAgICB2YXIgY3VycmVudE1hcmtlciA9IGFkdmFuY2VB
bmRWZXJpZnkoc3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8gQ2hl
Y2sgd2l0aCBjb250ZW50ZWRpdGFibGUuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29u
dHJvbGxlci5hY2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQyIik7CisgICAgICAgIHRleHRNYXJr
ZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAg
c3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0
TWFya2VyUmFuZ2UpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShz
dGFydE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB3aXRoIHJl
cGxhY2VkIGVsZW1lbnRzLgorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0MyIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2Ug
PSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFy
a2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJh
bmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoc3RhcnRNYXJr
ZXIsIDEsIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShj
dXJyZW50TWFya2VyLCAzLCB0ZXh0KTsKKyAgICAgICAgLy8gQXVkaW8gdGFnLgorICAgICAgICB0
ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0
NCIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVs
ZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtl
ciA9IGFkdmFuY2VBbmRWZXJpZnkoc3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAg
ICAgICAgLy8gQ2hlY2sgd2l0aCB1c2VyLXNlbGVjdDpub25lLgorICAgICAgICB0ZXh0ID0gYWNj
ZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NSIpOworICAg
ICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4
dCk7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFy
a2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFu
Y2VBbmRWZXJpZnkoc3RhcnRNYXJrZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgLy8g
TXVsdGktbGFuZ3VhZ2VzLgorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0NiIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2Ug
PSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFy
a2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJh
bmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoc3RhcnRNYXJr
ZXIsIDEsIHRleHQpOworICAgICAgICAKKyAgICAgICAgdGV4dCA9IGFjY2Vzc2liaWxpdHlDb250
cm9sbGVyLmFjY2Vzc2libGVFbGVtZW50QnlJZCgidGV4dDZhIik7CisgICAgICAgIHRleHRNYXJr
ZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAg
c3RhcnRNYXJrZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0
TWFya2VyUmFuZ2UpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShz
dGFydE1hcmtlciwgMSwgdGV4dCk7CisgICAgICAgIAorICAgICAgICAvLyBDaGVjayB0aGUgY2Fz
ZSB3aXRoIHByZSB0YWcuCisgICAgICAgIHRleHQgPSBhY2Nlc3NpYmlsaXR5Q29udHJvbGxlci5h
Y2Nlc3NpYmxlRWxlbWVudEJ5SWQoInRleHQ3Iik7CisgICAgICAgIHRleHRNYXJrZXJSYW5nZSA9
IHRleHQudGV4dE1hcmtlclJhbmdlRm9yRWxlbWVudCh0ZXh0KTsKKyAgICAgICAgc3RhcnRNYXJr
ZXIgPSB0ZXh0LnN0YXJ0VGV4dE1hcmtlckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFu
Z2UpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShzdGFydE1hcmtl
ciwgMSwgdGV4dCk7CisgICAgICAgIGN1cnJlbnRNYXJrZXIgPSBhZHZhbmNlQW5kVmVyaWZ5KGN1
cnJlbnRNYXJrZXIsIDE1LCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIHRoZSBj
YXNlIHdpdGggYnIgdGFnLgorICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIu
YWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0OCIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2Ug
PSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFy
a2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJh
bmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGFkdmFuY2VBbmRWZXJpZnkoc3RhcnRNYXJr
ZXIsIDEsIHRleHQpOworICAgICAgICBjdXJyZW50TWFya2VyID0gYWR2YW5jZUFuZFZlcmlmeShj
dXJyZW50TWFya2VyLCA1LCB0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNrIGdldHRp
bmcgdGhlIGNvcnJlY3QgcGFyYWdyYXBocworICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNv
bnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRCeUlkKCJ0ZXh0OSIpOworICAgICAgICB0ZXh0TWFy
a2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAg
IHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4
dE1hcmtlclJhbmdlKTsKKyAgICAgICAgc3RhcnRNYXJrZXIgPSB0ZXh0Lm5leHRUZXh0TWFya2Vy
KHN0YXJ0TWFya2VyKTsKKyAgICAgICAgdmFyIGVuZE1hcmtlciA9IHRleHQuZW5kVGV4dE1hcmtl
ckZvclRleHRNYXJrZXJSYW5nZSh0ZXh0TWFya2VyUmFuZ2UpOworICAgICAgICB2ZXJpZnlQYXJh
Z3JhcGhzKHRleHQsIHN0YXJ0TWFya2VyLCAzKTsKKyAgICAgICAgCisgICAgICAgIC8vIENoZWNr
IHRoZSBwYXJhZ3JhcGggbWFya2VyIHJ1bnMgZnJvbSBzdGFydCB0byBlbmQsIGFuZCBiYWNrd2Fy
ZHMuCisgICAgICAgIC8vIE1ha2Ugc3VyZSBpdCB3b24ndCBoYW5nLgorICAgICAgICB2ZXJpZnlE
b2N1bWVudCh0ZXh0KTsKKyAgICAgICAgCisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiBhZHZh
bmNlQW5kVmVyaWZ5KGN1cnJlbnRNYXJrZXIsIG9mZnNldCwgb2JqKSB7CisgICAgICAgICAgICB2
YXIgcHJldmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2VyOworICAgICAgICAgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCBvZmZzZXQ7IGkrKykgeworICAgICAgICAgICAgICAgIHByZXZpb3VzTWFya2Vy
ID0gY3VycmVudE1hcmtlcjsKKyAgICAgICAgICAgICAgICBjdXJyZW50TWFya2VyID0gb2JqLm5l
eHRUZXh0TWFya2VyKHByZXZpb3VzTWFya2VyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IHZlcmlmeVBhcmFncmFwaFJhbmdlRm9yVGV4dE1hcmtlcihwcmV2aW91c01hcmtlciwgY3VycmVu
dE1hcmtlciwgb2JqKTsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50TWFya2VyOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiByZXBsYWNlQXR0YWNobWVudEluU3RyaW5n
KHN0cikgeworICAgICAgICAgICAgc3RyID0gIHN0ci5yZXBsYWNlKFN0cmluZy5mcm9tQ2hhckNv
ZGUoNjU1MzIpLCAiW0FUVEFDSE1FTlRdIik7CisgICAgICAgICAgICByZXR1cm4gc3RyOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBmdW5jdGlvbiB2ZXJpZnlQYXJhZ3JhcGhSYW5nZUZv
clRleHRNYXJrZXIocHJlTWFya2VyLCB0ZXh0TWFya2VyLCBvYmopIHsKKyAgICAgICAgICAgIHZh
ciBtYXJrZXJSYW5nZSA9IG9iai50ZXh0TWFya2VyUmFuZ2VGb3JNYXJrZXJzKHByZU1hcmtlciwg
dGV4dE1hcmtlcik7CisgICAgICAgICAgICB2YXIgY3VycmVudENoYXJhY3RlciA9IHJlcGxhY2VB
dHRhY2htZW50SW5TdHJpbmcob2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5n
ZSkpOworICAgICAgICAgICAgZGVidWcoIkN1cnJlbnQgY2hhcmFjdGVyIGlzOiAiICsgY3VycmVu
dENoYXJhY3Rlcik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHZhciBwYXJhZ3JhcGhSYW5n
ZSA9IG9iai5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0TWFya2VyKHRleHRNYXJrZXIp
OworICAgICAgICAgICAgdmFyIHBhcmFncmFwaCA9IHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmco
b2JqLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShwYXJhZ3JhcGhSYW5nZSkpOworICAgICAgICAg
ICAgZGVidWcoIkN1cnJlbnQgcGFyYWdyYXBoIGlzOiAiICsgcGFyYWdyYXBoKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgdmFyIHByZVN0YXJ0ID0gb2JqLnByZXZpb3VzUGFyYWdyYXBoU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBu
ZXh0RW5kID0gb2JqLm5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcih0ZXh0
TWFya2VyKTsKKyAgICAgICAgICAgIHZhciBwcmVBbmROZXh0UGFyYWdyYXBoUmFuZ2UgPSBvYmou
dGV4dE1hcmtlclJhbmdlRm9yTWFya2VycyhwcmVTdGFydCwgbmV4dEVuZCk7CisgICAgICAgICAg
ICB2YXIgcHJlQW5kTmV4dFBhcmFncmFwaCA9IHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmcob2Jq
LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShwcmVBbmROZXh0UGFyYWdyYXBoUmFuZ2UpKTsKKyAg
ICAgICAgICAgIGRlYnVnKCJQcmUgcGFyYWdyYXBoIHN0YXJ0IHRvIG5leHQgcGFyYWdyYXBoIGVu
ZDogIiArIHByZUFuZE5leHRQYXJhZ3JhcGggKyAiXG4iKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgZnVuY3Rpb24gdmVyaWZ5UGFyYWdyYXBocyhvYmosIHN0YXJ0TWFya2VyLCBwYXJh
Z3JhcGhDb3VudCkgeworICAgICAgICAgICAgLy8gTW92ZSB0byB0aGUgZW5kIG9mIGZpcnN0IHBh
cmFncmFwaCwgc28gdGhlIGZpcnN0IHBhcmFncmFwaAorICAgICAgICAgICAgLy8gd29uJ3QgcHJp
bnQgdHdpY2UuCisgICAgICAgICAgICB2YXIgY3VycmVudCA9IG9iai5uZXh0UGFyYWdyYXBoRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXIoc3RhcnRNYXJrZXIpOworICAgICAgICAgICAgdmFyIGkg
PSAwOworICAgICAgICAgICAgd2hpbGUoaSA8IHBhcmFncmFwaENvdW50KSB7CisgICAgICAgICAg
ICAgICAgdmFyIGN1cnJSYW5nZSA9IG9iai5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VGb3JUZXh0
TWFya2VyKGN1cnJlbnQpOworICAgICAgICAgICAgICAgIHZhciBjdXJyUGFyYWdyYXBoID0gb2Jq
LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShjdXJyUmFuZ2UpOworICAgICAgICAgICAgICAgIGRl
YnVnKCJQYXJhZ3JhcGg6ICIgKyBjdXJyUGFyYWdyYXBoKTsKKyAgICAgICAgICAgICAgICBjdXJy
ZW50ID0gb2JqLm5leHRQYXJhZ3JhcGhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlcihjdXJyZW50
KTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIC8vIEJhY2t3YXJkcy4KKyAgICAgICAgICAgIGN1cnJlbnQgPSBvYmoucHJldmlv
dXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKGN1cnJlbnQpOworICAgICAg
ICAgICAgaSA9IDA7CisgICAgICAgICAgICB3aGlsZShpIDwgcGFyYWdyYXBoQ291bnQpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgY3VyclJhbmdlID0gb2JqLnBhcmFncmFwaFRleHRNYXJrZXJSYW5n
ZUZvclRleHRNYXJrZXIoY3VycmVudCk7CisgICAgICAgICAgICAgICAgdmFyIGN1cnJQYXJhZ3Jh
cGggPSBvYmouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKGN1cnJSYW5nZSk7CisgICAgICAgICAg
ICAgICAgZGVidWcoIlBhcmFncmFwaDogIiArIGN1cnJQYXJhZ3JhcGgpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnQgPSBvYmoucHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyKGN1cnJlbnQpOworICAgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgZnVuY3Rpb24gdmVyaWZ5RG9jdW1lbnQob2JqKSB7
CisgICAgICAgICAgICB2YXIgc3RhcnQgPSBvYmouc3RhcnRUZXh0TWFya2VyOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHb2luZyBmb3J3YXJkLgorICAgICAgICAgICAgZGVidWcoIlRl
c3QgZ29pbmcgZm9yd2FyZC4iKTsKKyAgICAgICAgICAgIHZhciBjdXJyZW50ID0gc3RhcnQ7Cisg
ICAgICAgICAgICB2YXIgZW5kID0gInRleHQiOworICAgICAgICAgICAgdmFyIGN1cnJQYXJhZ3Jh
cGggPSAiIjsKKyAgICAgICAgICAgIHdoaWxlKGN1cnJQYXJhZ3JhcGggIT0gZW5kKSB7CisgICAg
ICAgICAgICAgICAgdmFyIGN1cnJSYW5nZSA9IG9iai5wYXJhZ3JhcGhUZXh0TWFya2VyUmFuZ2VG
b3JUZXh0TWFya2VyKGN1cnJlbnQpOworICAgICAgICAgICAgICAgIGN1cnJQYXJhZ3JhcGggPSBv
Ymouc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKGN1cnJSYW5nZSk7CisgICAgICAgICAgICAgICAg
Y3VycmVudCA9IG9iai5uZXh0UGFyYWdyYXBoRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXIoY3Vy
cmVudCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkZWJ1ZygiRW5kIHBhcmFncmFwaDog
IiArIHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmcoY3VyclBhcmFncmFwaCkpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBHb2luZyBiYWNrd2FyZHMuCisgICAgICAgICAgICBkZWJ1Zygi
XG5UZXN0IGdvaW5nIGJhY2t3YXJkcy4iKTsKKyAgICAgICAgICAgIHZhciBzdGFydCA9ICJwYXJh
Z3JhcGggdGVzdCI7CisgICAgICAgICAgICBjdXJyUGFyYWdyYXBoID0gIiI7IAorICAgICAgICAg
ICAgd2hpbGUoY3VyclBhcmFncmFwaCAhPSBzdGFydCkgeworICAgICAgICAgICAgICAgIHZhciBj
dXJyZW50UmFuZ2UgPSBvYmoucGFyYWdyYXBoVGV4dE1hcmtlclJhbmdlRm9yVGV4dE1hcmtlcihj
dXJyZW50KTsKKyAgICAgICAgICAgICAgICBjdXJyUGFyYWdyYXBoID0gb2JqLnN0cmluZ0ZvclRl
eHRNYXJrZXJSYW5nZShjdXJyZW50UmFuZ2UpOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSBv
YmoucHJldmlvdXNQYXJhZ3JhcGhTdGFydFRleHRNYXJrZXJGb3JUZXh0TWFya2VyKGN1cnJlbnQp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVidWcoIlN0YXJ0IHBhcmFncmFwaDogIiAr
IHJlcGxhY2VBdHRhY2htZW50SW5TdHJpbmcoY3VyclBhcmFncmFwaCkpOworICAgICAgICB9Cisg
ICAgfQorCis8L3NjcmlwdD4KKworPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1tYXJrZXIvdGV4
dC1tYXJrZXItcHJldmlvdXMtbmV4dC1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMTk2NDIzKQorKysgTGF5b3V0VGVzdHMvYWNjZXNzaWJp
bGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0LWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAgdGV4dDEKIGMgIGQKIAogY2FuJ3Qgc2VsZWN0
CithYmMgZGUgZgogVGhpcyB0ZXN0cyB0aGUgbmV4dC9wcmV2aW91cyB0ZXh0IG1hcmtlciBmdW5j
dGlvbnMgYXJlIGltcGxlbWVudGVkIGNvcnJlY3RseS4KIAogT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgpAQCAtMjUsNiArMjYsOCBAQCBQQVNTIHRleHQzLnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShtYXJrCiBQQVNTICFwc3cuYWNjZXNzaWJpbGl0eUVsZW1lbnRGb3JUZXh0TWFya2VyKHN0YXJ0
KSBpcyB0cnVlCiBQQVNTIHRleHQyLmFjY2Vzc2liaWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihj
dXJyZW50TWFya2VyKS5pc0VxdWFsKHRleHQzKSBpcyB0cnVlCiBQQVNTIHRleHQyLmFjY2Vzc2li
aWxpdHlFbGVtZW50Rm9yVGV4dE1hcmtlcihjdXJyZW50TWFya2VyKS5pc0VxdWFsKHRleHQyLmNo
aWxkQXRJbmRleCgyKSkgaXMgdHJ1ZQorUEFTUyB0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5n
ZShtYXJrZXJSYW5nZSkgaXMgJ2YnCitQQVNTIHRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdl
KG1hcmtlclJhbmdlKSBpcyAnYScKIFBBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKIAog
VEVTVCBDT01QTEVURQpJbmRleDogTGF5b3V0VGVzdHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtl
ci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvYWNjZXNzaWJpbGl0eS90ZXh0LW1hcmtlci90ZXh0LW1hcmtlci1wcmV2aW91cy1uZXh0Lmh0
bWwJKHJldmlzaW9uIDE5NjQyMykKKysrIExheW91dFRlc3RzL2FjY2Vzc2liaWxpdHkvdGV4dC1t
YXJrZXIvdGV4dC1tYXJrZXItcHJldmlvdXMtbmV4dC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0y
MCw2ICsyMCwxMiBAQCBjIDxpbWcgc3JjPSIjIiBhcmlhLWxhYmVsPSJibGFoIiBzdHlsZT0iCiAK
IDxkaXYgY2xhc3M9InVzZXJzZWxlY3QiIGlkPSJ0ZXh0MyI+Y2FuJ3Qgc2VsZWN0PC9kaXY+CiAK
KzxkaXYgaWQ9InRleHQ0Ij4KK2FiYworZGUKK2YKKzwvZGl2PgorCiA8cCBpZD0iZGVzY3JpcHRp
b24iPjwvcD4KIDxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogCkBAIC0xMzUsNiArMTQxLDI3IEBA
IGMgPGltZyBzcmM9IiMiIGFyaWEtbGFiZWw9ImJsYWgiIHN0eWxlPSIKICAgICAgICAgY3VycmVu
dE1hcmtlciA9IHRleHQyLnByZXZpb3VzVGV4dE1hcmtlcihjdXJyZW50TWFya2VyKTsKICAgICAg
ICAgc2hvdWxkQmVUcnVlKCJ0ZXh0Mi5hY2Nlc3NpYmlsaXR5RWxlbWVudEZvclRleHRNYXJrZXIo
Y3VycmVudE1hcmtlcikuaXNFcXVhbCh0ZXh0Mi5jaGlsZEF0SW5kZXgoMikpIik7CiAgICAgICAg
IAorICAgICAgICAKKyAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGV4dCBub2RlIHdpdGggbGlu
ZSBicmVha3MsIHdlIGNhbiBnbyB0aHJvdWdoIGl0IHdpdGggbmV4dC9wcmV2aW91cyBjYWxsLgor
ICAgICAgICB0ZXh0ID0gYWNjZXNzaWJpbGl0eUNvbnRyb2xsZXIuYWNjZXNzaWJsZUVsZW1lbnRC
eUlkKCJ0ZXh0NCIpOworICAgICAgICB0ZXh0TWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJS
YW5nZUZvckVsZW1lbnQodGV4dCk7CisgICAgICAgIHN0YXJ0TWFya2VyID0gdGV4dC5zdGFydFRl
eHRNYXJrZXJGb3JUZXh0TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3Vy
cmVudE1hcmtlciA9IHN0YXJ0TWFya2VyOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7
IGkrKykgeworICAgICAgICAgICAgcHJldmlvdXNNYXJrZXIgPSBjdXJyZW50TWFya2VyOworICAg
ICAgICAgICAgY3VycmVudE1hcmtlciA9IHRleHQubmV4dFRleHRNYXJrZXIoY3VycmVudE1hcmtl
cik7CisgICAgICAgIH0KKyAgICAgICAgbWFya2VyUmFuZ2UgPSB0ZXh0LnRleHRNYXJrZXJSYW5n
ZUZvck1hcmtlcnMocHJldmlvdXNNYXJrZXIsIGN1cnJlbnRNYXJrZXIpCisgICAgICAgIHNob3Vs
ZEJlKCJ0ZXh0LnN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZShtYXJrZXJSYW5nZSkiLCAiJ2YnIik7
CisgICAgICAgIAorICAgICAgICBlbmRNYXJrZXIgPSB0ZXh0LmVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UodGV4dE1hcmtlclJhbmdlKTsKKyAgICAgICAgY3VycmVudE1hcmtlciA9IGVu
ZE1hcmtlcjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCA3OyBpKyspIHsKKyAgICAgICAg
ICAgIGN1cnJlbnRNYXJrZXIgPSB0ZXh0LnByZXZpb3VzVGV4dE1hcmtlcihjdXJyZW50TWFya2Vy
KTsKKyAgICAgICAgfQorICAgICAgICBtYXJrZXJSYW5nZSA9IHRleHQudGV4dE1hcmtlclJhbmdl
Rm9yTWFya2VycyhzdGFydE1hcmtlciwgY3VycmVudE1hcmtlcikKKyAgICAgICAgc2hvdWxkQmUo
InRleHQuc3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlKG1hcmtlclJhbmdlKSIsICInYSciKTsKKyAg
ICAgICAgCiAgICAgfQogCiA8L3NjcmlwdD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>