<?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>102240</bug_id>
          
          <creation_ts>2012-11-14 08:43:01 -0800</creation_ts>
          <short_desc>[V8] Rename dispatchWrap</short_desc>
          <delta_ts>2012-11-27 06:50:30 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Dan Carney">dcarney</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>766939</commentid>
    <comment_count>0</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-14 08:43:01 -0800</bug_when>
    <thetext>[V8] Rename dispatchWrap</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766942</commentid>
    <comment_count>1</comment_count>
      <attachid>174172</attachid>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-14 08:46:47 -0800</bug_when>
    <thetext>Created attachment 174172
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767393</commentid>
    <comment_count>2</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-14 15:51:05 -0800</bug_when>
    <thetext>Good refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767476</commentid>
    <comment_count>3</comment_count>
      <attachid>174172</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 16:58:47 -0800</bug_when>
    <thetext>Comment on attachment 174172
Patch

Clearing flags on attachment: 174172

Committed r134696: &lt;http://trac.webkit.org/changeset/134696&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>767477</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-11-14 16:58:50 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776434</commentid>
    <comment_count>5</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-27 00:22:53 -0800</bug_when>
    <thetext>Forgive me, it looks like I am behind your wrap/createWrapper/toV8/toV8Fast work...

(1) What is [V8NoWrapperCache] for ? I am expecting that [CustomToJSObject] and [V8CustomToJSObject] would be sufficient.

(2) Why do you need to let developers write both custom toV8() and custom wrap() ? Previously we supported custom toV8() only and didn&apos;t support custom wrap(). Why do you now need to support both custom toV8() and custom wrap() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776447</commentid>
    <comment_count>6</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-27 00:43:16 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Forgive me, it looks like I am behind your wrap/createWrapper/toV8/toV8Fast work...
&gt; 
&gt; (1) What is [V8NoWrapperCache] for ? I am expecting that [CustomToJSObject] and [V8CustomToJSObject] would be sufficient.
&gt; 
&gt; (2) Why do you need to let developers write both custom toV8() and custom wrap() ? Previously we supported custom toV8() only and didn&apos;t support custom wrap(). Why do you now need to support both custom toV8() and custom wrap() ?

I moved the functionality around.  wrap used to first check the wrapper cache then built the wrapped object. toV8 checked the wrapper, then called wrap, which often checked the cache a number of times. I ensured now that the check is only performed once, in toV8 (or toV8fast, or toV8Object), and then the call is passed to wrap. No wrap call should be made outside of the bindings.

A V8NoWrapperCache means that there will never be a cache used for such object, so wrap is not generated, and in that case, we must have a custom v8 implementation since we have no idea what the intention is such a call.

Sometimes a wrap implementation  might want to use the wrapper cache though, and just do some type checking and dispatch the wrap call down the subclass chain. That&apos;s marked as V8CustomToJSObject or CustomToJSObject.

By splitting functionality I ensured that the wrapper cache check is pretty much always autogenerated and performed just once. Additionally, it meant that toV8 and toV8Fast can almost always be generated, which wasn&apos;t previously the case for classes marked (V8)CustomToJSObject</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776457</commentid>
    <comment_count>7</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-27 01:07:23 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; I moved the functionality around.  wrap used to first check the wrapper cache then built the wrapped object. toV8 checked the wrapper, then called wrap, which often checked the cache a number of times. I ensured now that the check is only performed once, in toV8 (or toV8fast, or toV8Object), and then the call is passed to wrap. No wrap call should be made outside of the bindings.
&gt; 
&gt; A V8NoWrapperCache means that there will never be a cache used for such object, so wrap is not generated, and in that case, we must have a custom v8 implementation since we have no idea what the intention is such a call.
&gt; 
&gt; Sometimes a wrap implementation  might want to use the wrapper cache though, and just do some type checking and dispatch the wrap call down the subclass chain. That&apos;s marked as V8CustomToJSObject or CustomToJSObject.
&gt; 
&gt; By splitting functionality I ensured that the wrapper cache check is pretty much always autogenerated and performed just once. Additionally, it meant that toV8 and toV8Fast can almost always be generated, which wasn&apos;t previously the case for classes marked (V8)CustomToJSObject

Thanks, I understand that we now have only one cache check.

[1] However, from the perspective of developers, the current IDL attributes look a bit confusing.

As far as I see:

- If we want to write custom toV8(), we need to specify [(V8)CustomToJSObject] and [V8NoWrapperCache].

- If we want to write custom wrap(), we need to specify [(V8)CustomToJSObject] only.

- Then what should we specify if we want to write both custom toV8() and custom wrap() ?

I&apos;d be happy if we could clean up the IDL attributes.


[2] Do we really need to expose both custom toV8() and custom wrap() to make the number of cache checks once ?


[3] Just to clarify, would you elaborate on why the following structure won&apos;t work? (I&apos;d like to understand what is making the situation complicated.)

  call path: toV8Fast() =&gt; toV8() =&gt; createWrapper()

  - toV8Fast() does the cache check.
  - toV8() can be custom to let developers write any delegation logic.
  - createWrapper() creates a new V8 object.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776509</commentid>
    <comment_count>8</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-27 02:05:25 -0800</bug_when>
    <thetext>
&gt; - If we want to write custom toV8(), we need to specify [(V8)CustomToJSObject] and [V8NoWrapperCache].

no, you just need V8NoWrapperCache, which means we don&apos;t care about caching, which in turn means we can&apos;t generate a toV8, so you must provide one.

&gt; - Then what should we specify if we want to write both custom toV8() and custom wrap() ?

it&apos;s not a case that makes sense. either we want the wrapper cache, in which case toV8 is automatically generated, or we don&apos;t, in which case we must supply toV8 ourselves, and all wrap methods will be not generated.

&gt; [2] Do we really need to expose both custom toV8() and custom wrap() to make the number of cache checks once ?

yes, because a custom toV8 function has no wrapper checks.

&gt; [3] Just to clarify, would you elaborate on why the following structure won&apos;t work? (I&apos;d like to understand what is making the situation complicated.)
&gt; 
&gt;   call path: toV8Fast() =&gt; toV8() =&gt; createWrapper()
&gt; 
&gt;   - toV8Fast() does the cache check.
&gt;   - toV8() can be custom to let developers write any delegation logic.
&gt;   - createWrapper() creates a new V8 object.

that&apos;s essentially what we have, except if you rename toV8Fast to toV8 and toV8 to wrap. 


the problem with what you seem to want is that toV8Fast is only suitable for some places, so toV8 also needs to exist and do a wrapper check, which means 2 wrapper checks for those places</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776685</commentid>
    <comment_count>9</comment_count>
    <who name="Kentaro Hara">haraken</who>
    <bug_when>2012-11-27 06:07:47 -0800</bug_when>
    <thetext>Thank you very much for the clarification.

&gt; &gt; - If we want to write custom toV8(), we need to specify [(V8)CustomToJSObject] and [V8NoWrapperCache].
&gt; 
&gt; no, you just need V8NoWrapperCache, which means we don&apos;t care about caching, which in turn means we can&apos;t generate a toV8, so you must provide one.

Got it. I understood the situation, but I guess that the IDL attributes are confusing. In JSC, [(JS)CustomToJSObject] indicates that we can write custom toJS(). In V8, [(V8)CustomToJSObject] indicates that we can write custom wrap(). [V8NoWrapperCache] indicates that we can write custom toV8().

Maybe we want to change it like this?

- [(V8)CustomToJSObject] =&gt; we can write custom toV8()
- [V8CustomWrap] =&gt; we can write custom wrap()


Another confusion comes from the fact that [(V8)CustomToJSObject] is specified for all IDL files that have [V8NoWrapperCache]. The [(V8)CustomToJSObject] is useless (ignored in code generators). We can remove the [(V8)CustomToJSObject] from those IDL files.



&gt; &gt; [3] Just to clarify, would you elaborate on why the following structure won&apos;t work? (I&apos;d like to understand what is making the situation complicated.)
&gt; &gt; 
&gt; &gt;   call path: toV8Fast() =&gt; toV8() =&gt; createWrapper()
&gt; &gt; 
&gt; &gt;   - toV8Fast() does the cache check.
&gt; &gt;   - toV8() can be custom to let developers write any delegation logic.
&gt; &gt;   - createWrapper() creates a new V8 object.
&gt; 
&gt; that&apos;s essentially what we have, except if you rename toV8Fast to toV8 and toV8 to wrap. 
&gt; 
&gt; the problem with what you seem to want is that toV8Fast is only suitable for some places, so toV8 also needs to exist and do a wrapper check, which means 2 wrapper checks for those places

Thanks, I understood the situation. (I&apos;m thinking about how we can make it simpler. My colleague asked me to simplify it because the current situation is complicated:-) toV8Fast(), toV8(), toV8Object(), wrap(), createWrapper()...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776711</commentid>
    <comment_count>10</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-27 06:42:21 -0800</bug_when>
    <thetext>
&gt; Maybe we want to change it like this?
&gt; 
&gt; - [(V8)CustomToJSObject] =&gt; we can write custom toV8()
&gt; - [V8CustomWrap] =&gt; we can write custom wrap()

CustomToJSObject can&apos;t be renamed since jsc uses it.  V8 bindings would have to stop using it almost altogether. You&apos;d have to split every current instance of it into JSCustomToJSObject and V8CustomWrap and then if you renamed V8NoWrapperCache to V8CustomToJSObject, you could recollect the cases where V8CustomToJSObject and JSCustomToJSObject coincided into CustomToJSObject, which wouldn&apos;t be many places.

&gt; Another confusion comes from the fact that [(V8)CustomToJSObject] is specified for all IDL files that have [V8NoWrapperCache]. The [(V8)CustomToJSObject] is useless (ignored in code generators). We can remove the [(V8)CustomToJSObject] from those IDL files.

The redundancy doesn&apos;t really matter. I think I may even have added an assertion that one implied the other.

Anyway, if you want to rename stuff, I certainly don&apos;t mind either way, and it would definitely be a small improvement in the readability of the code gen file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>776719</commentid>
    <comment_count>11</comment_count>
    <who name="Dan Carney">dcarney</who>
    <bug_when>2012-11-27 06:50:30 -0800</bug_when>
    <thetext>&gt; Thanks, I understood the situation. (I&apos;m thinking about how we can make it simpler. My colleague asked me to simplify it because the current situation is complicated:-) toV8Fast(), toV8(), toV8Object(), wrap(), createWrapper()...)

unfortunately, it&apos;s important to generate all those different functions for every class  to have fast dispatch down the subclass chains and to have fast wrapper cache checks. there will be quite a few more toFastV8 function being added soon to every class that supports toV8</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>174172</attachid>
            <date>2012-11-14 08:46:47 -0800</date>
            <delta_ts>2012-11-14 16:58:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-102240-20121114174445.patch</filename>
            <type>text/plain</type>
            <size>102078</size>
            <attacher name="Dan Carney">dcarney</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTM0NTk4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThkMzNlOGQ2OGMzM2Uw
ZDgyNGZiZmQwZWYwMjE5MDE1MDcwMTkyMC4uMWJlYzdhNDUwMjljYzNlNDgxZDk3NWJjMTUyZTZm
NjczNjMxOTRmNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE2MiBAQAorMjAxMi0xMS0xNCAgRGFu
IENhcm5leSAgPGRjYXJuZXlAZ29vZ2xlLmNvbT4KKworICAgICAgICBbVjhdIFJlbmFtZSBkaXNw
YXRjaFdyYXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEwMjI0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vc3RseSBhIHJlbmFtZToKKyAgICAgICAgZGlzcGF0Y2hXcmFwLT53cmFwCisgICAgICAgIHdy
YXBTbG93LT5jcmVhdGVXcmFwcGVyCisgICAgICAgIGRpc3BhdGNoV3JhcEN1c3RvbS0+d3JhcAor
CisgICAgICAgIE5vIG5ldyB0ZXN0cy4gTm8gY2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAg
ICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAgKEdl
bmVyYXRlSGVhZGVyKToKKyAgICAgICAgKEdlbmVyYXRlTm9ybWFsQXR0ckdldHRlcik6CisgICAg
ICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uKToKKyAgICAgICAgKEdlbmVyYXRlVG9WOENvbnZl
cnRlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQ6Cisg
ICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAoV2ViQ29yZTo6VjhGbG9hdDY0QXJyYXk6
OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOEZs
b2F0NjRBcnJheS5oOgorICAgICAgICAoVjhGbG9hdDY0QXJyYXkpOgorICAgICAgICAoV2ViQ29y
ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
VjgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01P
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVh
dGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0Lmg6CisgICAgICAgIChWOFRlc3RBY3RpdmVET01PYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9W
OFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RDdXN0
b21OYW1lZEdldHRlcjo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmg6CisgICAgICAgIChWOFRlc3RDdXN0
b21OYW1lZEdldHRlcik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6VjhUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlV3JhcHBlcik6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3IuaDoK
KyAgICAgICAgKFY4VGVzdEV2ZW50Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6d3Jh
cCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRv
VjgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdl
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFdmVudFRhcmdldDo6Y3JlYXRlV3JhcHBl
cik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0
Lmg6CisgICAgICAgIChWOFRlc3RFdmVudFRhcmdldCk6CisgICAgICAgIChXZWJDb3JlOjp3cmFw
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9W
OCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpWOFRlc3RFeGNlcHRpb246OmNyZWF0ZVdyYXBwZXIpOgor
ICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaDoKKyAg
ICAgICAgKFY4VGVzdEV4Y2VwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpWOFRlc3RJbnRlcmZhY2U6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAq
IGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RJbnRlcmZhY2UuaDoKKyAgICAgICAgKFY4
VGVzdEludGVyZmFjZSk6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvVjhPYmplY3QpOgorICAgICAgICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6Y3JlYXRlV3Jh
cHBlcik6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVl
cnlMaXN0TGlzdGVuZXIuaDoKKyAgICAgICAgKFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIp
OgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlY4
VGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmg6CisgICAgICAgIChWOFRl
c3ROYW1lZENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAo
V2ViQ29yZTo6dG9WOE9iamVjdCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4KToKKyAgICAgICAg
KiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3ROb2RlOjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5oOgorICAgICAgICAoVjhUZXN0Tm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjhPYmplY3QpOgorICAgICAg
ICAoV2ViQ29yZTo6dG9WOCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4RmFzdCk6CisgICAgICAg
ICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpWOFRlc3RPYmo6OmNyZWF0ZVdyYXBwZXIpOgorICAgICAgICAqIGJpbmRpbmdzL3Njcmlw
dHMvdGVzdC9WOC9WOFRlc3RPYmouaDoKKyAgICAgICAgKFY4VGVzdE9iaik6CisgICAgICAgIChX
ZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjhPYmplY3QpOgorICAgICAgICAo
V2ViQ29yZTo6dG9WOCk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlV3JhcHBlcik6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaDoKKyAgICAgICAg
KFY4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMpOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6
CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnRvVjgp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKToKKyAgICAgICAgKiBiaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmg6
CisgICAgICAgIChWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgIChXZWJDb3JlOjp0b1Y4T2JqZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvVjgpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOEJsb2JD
dXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3Mv
djgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToK
KyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhDYW52
YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXApOgor
ICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERhdGFWaWV3Q3VzdG9tLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOERvY3Vt
ZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAqIGJpbmRp
bmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhF
bnRyeUN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhFbnRyeVN5bmNDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4RXZlbnRDdXN0b20uY3BwOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBi
aW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1l
bnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VEYXRhQ3VzdG9tLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3Rv
bS9WOE5vZGVDdXN0b20uY3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgICog
YmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9jdXN0b20vVjhTVkdEb2N1
bWVudEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9jdXN0b20vVjhTVkdFbGVtZW50Q3VzdG9tLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OndyYXApOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR1BhdGhTZWdDdXN0b20u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6d3JhcCk6CisgICAgICAgICogYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U3R5bGVTaGVldEN1c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cmFwKToKKyAg
ICAgICAgKiBkb20vbWFrZV9uYW1lcy5wbDoKKyAgICAgICAgKHByaW50V3JhcHBlckZ1bmN0aW9u
cyk6CisgICAgICAgIChwcmludFdyYXBwZXJGYWN0b3J5Q3BwRmlsZSk6CisKIDIwMTItMTEtMTQg
IFBhdmVsIEZlbGRtYW4gIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIElu
c3BlY3RvcjogY29udGV4dCBtZW51IG9uIE9iamVjdFByb3BlcnR5VHJlZUVsZW1lbnQncyB2YWx1
ZXMgaXMgbWFza2VkIGJ5IHRoZSBzZWN0aW9uLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0gYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbQppbmRleCBiMmNlYTJjZjA3YjYyYzJlYTdl
NmM4MmJjZDI1YzY0NjA3YTBjNjBmLi5kMTI5ZTg5MDdjOWY0MWM3NjI5NmM5MDc1M2I5MTNkNDc3
OWE4NWIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVH
ZW5lcmF0b3JWOC5wbQpAQCAtNTAyLDggKzUwMiw4IEBAIEVORAogRU5ECiAgICAgfSBlbHNpZiAo
JGludGVyZmFjZU5hbWUgZXEgIkVsZW1lbnQiKSB7CiAgICAgICAgIHB1c2goQGhlYWRlckNvbnRl
bnQsIDw8RU5EKTsKLSAgICAvLyBUaGlzIGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIGhh
Y2suIFNlZSBWOEVsZW1lbnQ6OmRpc3BhdGNoV3JhcEN1c3RvbS4KLSAgICBmcmllbmQgY2xhc3Mg
VjhOb2RlOworICAgIC8vIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gaGFjay4g
U2VlIFY4RWxlbWVudDo6d3JhcC4KKyAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3
cmFwKE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqKTsKIEVORAogICAgIH0KIApAQCAtNTE5LDI2ICs1MTksMjQgQEAgRU5ECiAgICAgICAg
IH0KICAgICB9CiAKLSAgICBteSAkd3JhcFNsb3dBcmd1bWVudFR5cGUgPSBHZXRQYXNzUmVmUHRy
VHlwZSgkbmF0aXZlVHlwZSk7Ci0gICAgbXkgJG5vV3JhcCA9ICRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlY4Tm9XcmFwcGVyQ2FjaGUifTsKLSAgICBpZiAoJG5vV3JhcCkgeworICAg
IG15ICRub1RvVjggPSAkZGF0YU5vZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdXBwcmVzc1Rv
SlNPYmplY3QifTsKKyAgICBteSAkbm9XcmFwID0gJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJpYnV0
ZXMtPnsiVjhOb1dyYXBwZXJDYWNoZSJ9IHx8ICRub1RvVjg7CisgICAgbXkgJGNyZWF0ZVdyYXBw
ZXJBcmd1bWVudFR5cGUgPSBHZXRQYXNzUmVmUHRyVHlwZSgkbmF0aXZlVHlwZSk7CisgICAgaWYg
KCEkbm9XcmFwKSB7CisgICAgICAgIG15ICRjcmVhdGVXcmFwcGVyQXJndW1lbnRUeXBlID0gR2V0
UGFzc1JlZlB0clR5cGUoJG5hdGl2ZVR5cGUpOwogICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50
LCA8PEVORCk7Ci19OwotCisgICAgZnJpZW5kIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcCgk
e25hdGl2ZVR5cGV9Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3Jh
cHBlcigke2NyZWF0ZVdyYXBwZXJBcmd1bWVudFR5cGV9LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIEVORAotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIG15ICR3cmFwU2xvd0FyZ3VtZW50VHlwZSA9IEdldFBhc3NSZWZQdHJUeXBlKCRuYXRpdmVU
eXBlKTsKLSAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwotICAgIGZyaWVuZCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcCgke25hdGl2ZVR5cGV9Kiwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKCR7bmF0aXZlVHlw
ZX0qLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
KTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdygke3dyYXBTbG93
QXJndW1lbnRUeXBlfSwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKik7CisgICAgfQorCisgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOwog
fTsKIAogRU5ECi0gICAgfQogCiAgICAgbXkgJGN1c3RvbVdyYXAgPSAhISgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJDdXN0b21Ub0pTT2JqZWN0In0gb3IgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiVjhDdXN0b21Ub0pTT2JqZWN0In0pOwotICAgIGlmICgkZGF0YU5v
ZGUtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJTdXBwcmVzc1RvSlNPYmplY3QifSkgeworICAgIGlm
ICgkbm9Ub1Y4KSB7CiAgICAgICAgIGRpZSAiQ2FuJ3Qgc3VwcHJlc3MgdG9WOCBmb3Igc3ViY2xh
c3NcbiIgaWYgQGFsbFBhcmVudHM7CiAgICAgfSBlbHNpZiAoJG5vV3JhcCkgewogICAgICAgICBk
aWUgIk11c3QgaGF2ZSBjdXN0b20gdG9WOFxuIiBpZiAhJGN1c3RvbVdyYXA7CkBAIC01NTQsMTUg
KzU1MiwyNiBAQCBFTkQKICAgICB9IGVsc2UgewogCiAgICAgICAgIG15ICRnZXRDYWNoZWRXcmFw
cGVyID0gSXNOb2RlU3ViVHlwZSgkZGF0YU5vZGUpID8gIlY4RE9NV3JhcHBlcjo6Z2V0Q2FjaGVk
V3JhcHBlcihpbXBsKSIgOiAiRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1w
bCkiOwotICAgICAgICBteSAkd3JhcFNsb3dDYWxsID0gJGN1c3RvbVdyYXAgPyAiJHtjbGFzc05h
bWV9OjpkaXNwYXRjaFdyYXBDdXN0b20iIDogIiR7Y2xhc3NOYW1lfTo6d3JhcFNsb3ciOwotICAg
ICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7CisgICAgICAgIG15ICRjcmVhdGVXcmFw
cGVyQ2FsbCA9ICRjdXN0b21XcmFwID8gIiR7Y2xhc3NOYW1lfTo6d3JhcCIgOiAiJHtjbGFzc05h
bWV9OjpjcmVhdGVXcmFwcGVyIjsKIAotaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlz
cGF0Y2hXcmFwKCR7bmF0aXZlVHlwZX0qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCisgICAgICAgIGlmICgkY3Vz
dG9tV3JhcCkgeworICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgPDxFTkQpOworCit2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiA9IDApOworRU5ECisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwdXNoKEBoZWFkZXJDb250ZW50LCA8PEVORCk7
CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoJHtuYXRpdmVUeXBlfSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKCRnZXRDYWNoZWRX
cmFwcGVyLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuICR3cmFwU2xvd0NhbGwoaW1wbCwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gJGNyZWF0ZVdyYXBwZXJDYWxsKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CitFTkQKKyAgICAgICAgfQorCisgICAgICAg
IHB1c2goQGhlYWRlckNvbnRlbnQsIDw8RU5EKTsKIAogaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gdG9WOE9iamVjdCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogewpAQCAtNTcxLDcgKzU4MCw3IEBAIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoJHtuYXRpdmVUeXBlfSogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqCiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gJGdldENhY2hlZFdy
YXBwZXI7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpAQCAtNTgxLDcgKzU5MCw3IEBA
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOCgke25hdGl2ZVR5cGV9KiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBw
ZXIgPSAkZ2V0Q2FjaGVkV3JhcHBlcjsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIEVORAogICAgICAgICBpZiAoSXNOb2RlU3ViVHlwZSgkZGF0YU5v
ZGUpKSB7CkBAIC02MDUsNyArNjE0LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4RmFzdCgke25hdGl2ZVR5cGV9KiBpbXBsLCBjb25zdCB2ODo6QWNjZXNzb3JJbmYKICAgICAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiB3cmFwcGVyOwog
ICAgIH0KLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGhvbGRlcldyYXBwZXIsIGluZm8u
R2V0SXNvbGF0ZSgpKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBob2xkZXJXcmFwcGVyLCBpbmZv
LkdldElzb2xhdGUoKSk7CiB9CiBFTkQKICAgICAgICAgfQpAQCAtMTA4Myw3ICsxMDkyLDcgQEAg
RU5ECiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgUmVmUHRyPCRyZXR1cm5U
eXBlPiByZXN1bHQgPSAke2dldHRlclN0cmluZ307XG4iKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnREZWNscywgIiAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IHJlc3VsdC5n
ZXQoKSA/IHY4OjpIYW5kbGU8djg6OlZhbHVlPihET01EYXRhU3RvcmU6OmN1cnJlbnQoaW5mby5H
ZXRJc29sYXRlKCkpLT5nZXQocmVzdWx0LmdldCgpKSkgOiB2OFVuZGVmaW5lZCgpO1xuIik7CiAg
ICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMsICIgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgp
KSB7XG4iKTsKLSAgICAgICAgcHVzaChAaW1wbENvbnRlbnREZWNscywgIiAgICAgICAgd3JhcHBl
ciA9IHRvVjgocmVzdWx0LmdldCgpLCBpbmZvLkhvbGRlcigpLCBpbmZvLkdldElzb2xhdGUoKSk7
XG4iKTsgIyBGSVhNRTogQ291bGQgdXNlIGRpc3BhdGNoV3JhcCBoZXJlIHNpbmNlIHRoZSB3cmFw
cGVyIGlzIGVtcHR5LgorICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICB3
cmFwcGVyID0gdG9WOChyZXN1bHQuZ2V0KCksIGluZm8uSG9sZGVyKCksIGluZm8uR2V0SXNvbGF0
ZSgpKTtcbiIpOyAjIEZJWE1FOiBDb3VsZCB1c2Ugd3JhcCBoZXJlIHNpbmNlIHRoZSB3cmFwcGVy
IGlzIGVtcHR5LgogICAgICAgICBwdXNoKEBpbXBsQ29udGVudERlY2xzLCAiICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50RGVjbHMs
ICIgICAgICAgICAgICBWOERPTVdyYXBwZXI6OnNldE5hbWVkSGlkZGVuUmVmZXJlbmNlKGluZm8u
SG9sZGVyKCksIFwiJHthdHRyTmFtZX1cIiwgd3JhcHBlcik7XG4iKTsKICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnREZWNscywgIiAgICB9XG4iKTsKQEAgLTI3NzAsMTAgKzI3NzksMTAgQEAgc3Vi
IEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICBpZiAoJGRhdGFOb2RlLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPnsiVHlwZWRBcnJheSJ9KSB7CiAgICAgICAgIG15ICR2aWV3VHlwZSA9IEdldFR5cGVO
YW1lT2ZFeHRlcm5hbFR5cGVkQXJyYXkoJGRhdGFOb2RlKTsKICAgICAgICAgcHVzaChAaW1wbENv
bnRlbnQsIDw8RU5EKTsKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjgke2ltcGxDbGFzc05hbWV9
OjpkaXNwYXRjaFdyYXBDdXN0b20oJGltcGxDbGFzc05hbWUqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcCgkaW1wbENsYXNzTmFtZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFT
U0VSVChpbXBsKTsKLSAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBWOCR7aW1w
bENsYXNzTmFtZX06OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjgke2ltcGxDbGFzc05hbWV9Ojpj
cmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgaWYgKCF3
cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgd3JhcHBlci0+U2V0SW5kZXhlZFByb3BlcnRpZXNU
b0V4dGVybmFsQXJyYXlEYXRhKGltcGwtPmJhc2VBZGRyZXNzKCksICR2aWV3VHlwZSwgaW1wbC0+
bGVuZ3RoKCkpOwogICAgIHJldHVybiB3cmFwcGVyOwpAQCAtMzQ5MywxNyArMzUwMiwxNyBAQCBz
dWIgR2VuZXJhdGVUb1Y4Q29udmVydGVycwogICAgIG15ICRjbGFzc05hbWUgPSBzaGlmdDsKICAg
ICBteSAkbmF0aXZlVHlwZSA9IHNoaWZ0OwogCi0gICAgaWYgKCRkYXRhTm9kZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57IlY4Tm9XcmFwcGVyQ2FjaGUifSkgeworICAgIGlmICgkZGF0YU5vZGUtPmV4
dGVuZGVkQXR0cmlidXRlcy0+eyJWOE5vV3JhcHBlckNhY2hlIn0gfHwgJGRhdGFOb2RlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPnsiU3VwcHJlc3NUb0pTT2JqZWN0In0pIHsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIG15ICR3cmFwU2xvd0FyZ3VtZW50VHlwZSA9IEdldFBhc3NSZWZQdHJU
eXBlKCRuYXRpdmVUeXBlKTsKKyAgICBteSAkY3JlYXRlV3JhcHBlckFyZ3VtZW50VHlwZSA9IEdl
dFBhc3NSZWZQdHJUeXBlKCRuYXRpdmVUeXBlKTsKICAgICBteSAkYmFzZVR5cGUgPSBCYXNlSW50
ZXJmYWNlTmFtZSgkZGF0YU5vZGUpOwogICAgIG15ICRnZXRDYWNoZWRXcmFwcGVyID0gSXNOb2Rl
U3ViVHlwZSgkZGF0YU5vZGUpID8gIlY4RE9NV3JhcHBlcjo6Z2V0Q2FjaGVkV3JhcHBlcihpbXBs
LmdldCgpKSIgOiAiRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQo
KSkiOwogCiAgICAgcHVzaChAaW1wbENvbnRlbnQsIDw8RU5EKTsKIAotdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiAke2NsYXNzTmFtZX06OndyYXBTbG93KCR7d3JhcFNsb3dBcmd1bWVudFR5cGV9IGlt
cGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gJHtjbGFzc05hbWV9OjpjcmVhdGVXcmFw
cGVyKCR7Y3JlYXRlV3JhcHBlckFyZ3VtZW50VHlwZX0gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VS
VChpbXBsLmdldCgpKTsKICAgICBBU1NFUlQoJGdldENhY2hlZFdyYXBwZXIuSXNFbXB0eSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRl
cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0lETEF0dHJpYnV0ZXMudHh0
CmluZGV4IDY2ZGQ1YzZkOTkwMmQ0NGJiOGM3ODc3YWYwOWM1OGMwZTExMWMwZmQuLjcwOTBmNjYz
ZWEyZThhOTZjMmUzOGU1OThiZjVjYWQxZjdjMmMzMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvSURMQXR0cmlidXRlcy50eHQKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy9JRExBdHRyaWJ1dGVzLnR4dApAQCAtMTE5LDcgKzExOSw3IEBA
IFY4RG9Ob3RDaGVja1NpZ25hdHVyZQogVjhFbmFibGVkQXRSdW50aW1lPSoKIFY4RW5hYmxlZFBl
ckNvbnRleHQ9KgogVjhHZW5lcmF0ZUlzUmVhY2hhYmxlPUltcGxEb2N1bWVudHxJbXBsRWxlbWVu
dFJvb3R8SW1wbE93bmVyUm9vdHxJbXBsT3duZXJOb2RlUm9vdHxJbXBsQmFzZVJvb3QKLVY4Tm9X
cmFwcGVyQ2FjaGU9KgorVjhOb1dyYXBwZXJDYWNoZQogVjhNZWFzdXJlQXM9KgogVjhSZWFkT25s
eQogVjhVbmZvcmdlYWJsZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOEZsb2F0NjRBcnJheS5jcHAKaW5kZXggOTBiMGY1OTdkM2Y2YmU1
NWE3MTE1NTVhZjk3MmI0MjQ0OWQ3YWU5Yi4uMWJhMTM5NmEzZjBkMDA3YzdmMDEzMTI3YWQ0ZmYx
MDY2M2JiNTZlOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuY3BwCkBAIC02NiwxMCArNjYsMTAgQEAgc3Rh
dGljIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBzZXRDYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRz
JiBhcmdzKQogCiB9IC8vIG5hbWVzcGFjZSBGbG9hdDY0QXJyYXlWOEludGVybmFsCiAKLXY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OmRpc3BhdGNoV3JhcEN1c3RvbShGbG9h
dDY0QXJyYXkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChGbG9hdDY0
QXJyYXkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbCk7Ci0gICAgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhGbG9hdDY0QXJyYXk6OndyYXBTbG93KGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVy
ID0gVjhGbG9hdDY0QXJyYXk6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICB3cmFwcGVyLT5T
ZXRJbmRleGVkUHJvcGVydGllc1RvRXh0ZXJuYWxBcnJheURhdGEoaW1wbC0+YmFzZUFkZHJlc3Mo
KSwgdjg6OmtFeHRlcm5hbERvdWJsZUFycmF5LCBpbXBsLT5sZW5ndGgoKSk7CiAgICAgcmV0dXJu
IHdyYXBwZXI7CkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBWOEZsb2F0NjRBcnJheTo6SGFzSW5z
dGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gVjhGbG9hdDY0QXJyYXk6OndyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RmxvYXQ2NEFycmF5OjpjcmVh
dGVXcmFwcGVyKFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNT
RVJUKGltcGwuZ2V0KCkpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0
ZSktPmdldChpbXBsLmdldCgpKS5Jc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4RmxvYXQ2NEFycmF5LmggYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuaAppbmRleCAwMTgy
MzkxYzAxZTg1NzAyMWY0OGIyNTA3YjU5MGZjMTk3NjI4MmVkLi41M2U2ZGFlMWVhNzM5MzI4MDY5
NTliMmU2MTQ2MTdiZDIzZjY1MzI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhGbG9hdDY0QXJyYXkuaApAQCAtNDksMTggKzQ5LDEy
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgRmxvYXQ2NEFycmF5KikgeyB9CiAgICAgc3RhdGljIHZv
aWQgaW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4pIHsgfQogcHJpdmF0ZToKLSAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBk
aXNwYXRjaFdyYXAoRmxvYXQ2NEFycmF5Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKEZsb2F0NjRBcnJheSosIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5Piwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgZnJpZW5k
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChGbG9hdDY0QXJyYXkqLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8RmxvYXQ2NEFycmF5
Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7
CiB9OwogCiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChGbG9h
dDY0QXJyYXkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCi17Ci0gICAgQVNTRVJUKGltcGwpOwotICAgIEFTU0VS
VChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOwot
ICAgIHJldHVybiBWOEZsb2F0NjRBcnJheTo6ZGlzcGF0Y2hXcmFwQ3VzdG9tKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7Ci19Cit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoRmxv
YXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwg
djg6Oklzb2xhdGUqID0gMCk7CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhP
YmplY3QoRmxvYXQ2NEFycmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSAwKQogewpAQCAtNjksNyArNjMsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0
b1Y4T2JqZWN0KEZsb2F0NjRBcnJheSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZQogICAgIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3VycmVudChpc29s
YXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRmxvYXQ2NEFy
cmF5KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpAQCAtNzksNyAr
NzMsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoRmxvYXQ2NEFycmF5KiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZQogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAg
ICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAg
cmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAg
IHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGlu
ZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBGbG9hdDY0QXJyYXkgPiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0
aXZlRE9NT2JqZWN0LmNwcAppbmRleCBjYzVhM2FiNzBjZjcyMzk5MWY2M2IzMWIzMDUyZWUxZTA2
MjYwMzcxLi4yODNiZjU3ZDI1MWEzMmYxYTBhYjhhNjI0ZmE4MDE0YTA5NjVkZWQ3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZl
RE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3Qv
VjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTc1LDcgKzE3NSw3IEBAIGJvb2wgVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0OjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFs
dWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6
OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEFjdGl2ZURPTU9iamVjdD4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RBY3RpdmVET01PYmplY3Q6OmNyZWF0ZVdyYXBwZXIo
UGFzc1JlZlB0cjxUZXN0QWN0aXZlRE9NT2JqZWN0PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJU
KGltcGwuZ2V0KCkpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSkt
PmdldChpbXBsLmdldCgpKS5Jc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2ZURPTU9iamVjdC5o
CmluZGV4IDAyNDM4ODg0YjQ5ZjQ3NTZkMTk2NjVkODg0MDZiYmE3MTlkZDQ0MTQuLjhmNWRiZDRi
ZTEyNDZmYWM5MGQ5Mzg4MmVlNzAzMzlkN2U4YjE2MzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9N
T2JqZWN0LmgKQEAgLTQ5LDE3ICs0OSwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5z
dGFsbFBlckNvbnRleHRQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIFRlc3RBY3Rp
dmVET01PYmplY3QqKSB7IH0KICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3Rv
dHlwZVByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PikgeyB9CiBwcml2YXRlOgotICAg
IGZyaWVuZCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0QWN0aXZlRE9N
T2JqZWN0Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29s
YXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3Vz
dG9tKFRlc3RBY3RpdmVET01PYmplY3QqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RBY3RpdmVET01PYmplY3Q+LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBmcmllbmQgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RBY3RpdmVET01PYmplY3QqLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdEFjdGl2
ZURPTU9iamVjdD4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSopOwogfTsKIAogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRj
aFdyYXAoVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
IHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChp
c29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdEFjdGl2ZURP
TU9iamVjdDo6d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICBy
ZXR1cm4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRv
VjhPYmplY3QoVGVzdEFjdGl2ZURPTU9iamVjdCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRl
KiBpc29sYXRlID0gMCkKQEAgLTY5LDcgKzY4LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gdG9WOE9iamVjdChUZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFuZGxlPHYK
ICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJl
bnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRl
c3RBY3RpdmVET01PYmplY3QqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCkBAIC03OSw3ICs3OCw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0QWN0aXZlRE9NT2JqZWN0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplCiAgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSkt
PmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRl
c3RBY3RpdmVET01PYmplY3QgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUg
PSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKaW5kZXggODFlMjk0Y2Zi
MzQwYTcwMmE4YjYwZjkwY2Q2NTdlZDFlNzQ4OGZlYS4uZmUyOTJlMmViOGQ4MGRlMmUwZTIwOTU3
MmUzODY2NTc1OGJkMTVmOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuY3Bw
CkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6SGFzSW5z
dGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXI6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVz
dEN1c3RvbU5hbWVkR2V0dGVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4
VGVzdEN1c3RvbU5hbWVkR2V0dGVyOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkpOwogICAg
IEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsLmdldCgpKS5J
c0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEN1c3RvbU5hbWVkR2V0dGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAppbmRleCA0MTdlZDg0
ZDU0YmY1YjcyMTlkNzVhNDE2YjgyOWRjM2VkYjRkM2QwLi5jMjI0MWFlNWM4MDI0MDFjNDkxNmUy
YzQ0NzBlMTRiM2U5YzkxYmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIuaApA
QCAtNDgsMTcgKzQ4LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29u
dGV4dFByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdEN1c3RvbU5hbWVkR2V0
dGVyKikgeyB9CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9w
ZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pIHsgfQogcHJpdmF0ZToKLSAgICBmcmllbmQg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRjaFdyYXAoVGVzdEN1c3RvbU5hbWVkR2V0dGVy
Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7
Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRl
c3RDdXN0b21OYW1lZEdldHRlciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBTbG93KFBhc3NSZWZQdHI8VGVzdEN1c3RvbU5hbWVkR2V0dGVyPiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgZnJpZW5kIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdEN1c3Rv
bU5hbWVkR2V0dGVyPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKik7CiB9OwogCiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3Bh
dGNoV3JhcChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
ID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3Vy
cmVudChpc29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdEN1
c3RvbU5hbWVkR2V0dGVyOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OworICAgIHJldHVybiBWOFRlc3RDdXN0b21OYW1lZEdldHRlcjo6Y3JlYXRlV3JhcHBlcihpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiB0b1Y4T2JqZWN0KFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTY4LDcgKzY3LDcgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gdG9WOE9iamVjdChUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGltcGws
IHY4OjpIYW5kbGUKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRh
U3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwg
Y3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKQEAgLTc4LDcgKzc3LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFRlc3RDdXN0b21OYW1lZEdldHRlciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2IKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3Vy
cmVudChpc29sYXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
UGFzc1JlZlB0cjwgVGVzdEN1c3RvbU5hbWVkR2V0dGVyID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmNwcApp
bmRleCA4MzE0Y2UyMjA3YmU0MWQxMGFhZTkyZTdkZmM4YTkzMjZkMjM4MDBhLi4zOGM4NjVjNGZl
ODg1ZGVkM2MzMGY0Mzg3ZTlmODdlNjMwMWZhMzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29u
c3RydWN0b3IuY3BwCkBAIC0xNDUsNyArMTQ1LDcgQEAgYm9vbCBWOFRlc3RFdmVudENvbnN0cnVj
dG9yOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB9CiAKIAotdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjp3cmFwU2xvdyhQYXNz
UmVmUHRyPFRlc3RFdmVudENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IFY4VGVzdEV2ZW50Q29uc3RydWN0b3I6OmNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxU
ZXN0RXZlbnRDb25zdHJ1Y3Rvcj4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsLmdldCgp
KTsKICAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5n
ZXQoKSkuSXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRDb25zdHJ1Y3Rvci5oCmluZGV4IGE0
ZTIyZDEwYjA2NjUwMDQ5ZGVlYTFhMTkzZDUxMzVhODk1Yjc4YWEuLjBkZjlhZDE4YWFmYjYxYjE0
Mzk3MDIwMGQzODZiNTM3M2E4ZTc3MTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudENvbnN0cnVjdG9yLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50Q29uc3RydWN0b3Iu
aApAQCAtNDksMTcgKzQ5LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVy
Q29udGV4dFByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqKSB7IH0KICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVBy
b3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PikgeyB9CiBwcml2YXRlOgotICAgIGZyaWVu
ZCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0RXZlbnRDb25zdHJ1Y3Rv
ciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcEN1c3RvbShU
ZXN0RXZlbnRDb25zdHJ1Y3RvciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50Q29uc3RydWN0b3I+LCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBmcmllbmQgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFdmVudENvbnN0cnVjdG9yKiwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RFdmVudENv
bnN0cnVjdG9yPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKik7CiB9OwogCiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNo
V3JhcChUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDAp
CiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQo
aXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiBWOFRlc3RFdmVudENv
bnN0cnVjdG9yOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAg
IHJldHVybiBWOFRlc3RFdmVudENvbnN0cnVjdG9yOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHRvVjhPYmplY3QoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCkBAIC02OSw3ICs2OCw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdEV2ZW50Q29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5k
bGU8CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkK
ICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9W
OChUZXN0RXZlbnRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29s
YXRlID0gMCkKQEAgLTc5LDcgKzc4LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0
b1Y4KFRlc3RFdmVudENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmoKICAgICB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3VycmVudChpc29s
YXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJl
dHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoUGFzc1JlZlB0
cjwgVGVzdEV2ZW50Q29uc3RydWN0b3IgPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RFdmVudFRhcmdldC5jcHAKaW5kZXggMDljMDhkZGViYTAwMzdh
M2Y4OWRlNmM5OTIzNmYxMzE0NDE4YTgwMi4uNDI3MDViNGNiYTQzM2NmZWZjNTIzZDVhODg0MzI5
N2M3OGI1YWY3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuY3BwCkBAIC0xNzAsNyArMTcwLDcg
QEAgYm9vbCBWOFRlc3RFdmVudFRhcmdldDo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0RXZlbnRUYXJn
ZXQ6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdEV2ZW50VGFyZ2V0OjpjcmVhdGVXcmFwcGVyKFBhc3NS
ZWZQdHI8VGVzdEV2ZW50VGFyZ2V0PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0
KCkpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBs
LmdldCgpKS5Jc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV2ZW50VGFyZ2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaAppbmRleCA2MTY3YzdlMDQ1
MzQyNTU0NWZmNTlmNzM3MDc3MTQyOGRiMTE0YmM0Li4xMDcyYmI3Njc5ZDJkNTUyZjMyNDdmYzBi
ZjhiZTJjZDc1OTYyODgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXZlbnRUYXJnZXQuaApAQCAtNTAsMTcgKzUwLDE2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdEV2ZW50VGFyZ2V0KikgeyB9CiAgICAgc3RhdGlj
IHZvaWQgaW5zdGFsbFBlckNvbnRleHRQcm90b3R5cGVQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4pIHsgfQogcHJpdmF0ZToKLSAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBkaXNwYXRjaFdyYXAoVGVzdEV2ZW50VGFyZ2V0Kiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRlc3RFdmVudFRhcmdldCosIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV2ZW50VGFyZ2V0
Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7
CisgICAgZnJpZW5kIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0RXZlbnRUYXJnZXQq
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsK
KyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQ
dHI8VGVzdEV2ZW50VGFyZ2V0Piwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGRpc3BhdGNoV3JhcChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCitpbmxpbmUgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFdmVudFRhcmdldCogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
IHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChp
c29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdEV2ZW50VGFy
Z2V0Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVy
biBWOFRlc3RFdmVudFRhcmdldDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4T2JqZWN0
KFRlc3RFdmVudFRhcmdldCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0g
MCkKQEAgLTcwLDcgKzY5LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOE9i
amVjdChUZXN0RXZlbnRUYXJnZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok8KICAgICB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSkt
PmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
d3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RFdmVudFRhcmdl
dCogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTgwLDcgKzc5
LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RFdmVudFRhcmdldCog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PgogICAgIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB3
cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAgICAg
aWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0
dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJl
dHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0RXZlbnRUYXJnZXQgPiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcAppbmRleCBiMTE1MWVhMDc4MDk1ZDg5N2U3NDE1NDkxMzFlMzg4MWEyMTBjYTM2Li5iYmI5
ZmVjZWM4OTAwZTZlZjJlZDM1MWJkMGE4MDQwYzY5M2U4MjEyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9u
LmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIGJvb2wgVjhUZXN0RXhjZXB0aW9uOjpIYXNJbnN0YW5j
ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBWOFRlc3RFeGNlcHRpb246OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdEV4Y2VwdGlvbj4g
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RFeGNlcHRpb246OmNyZWF0
ZVdyYXBwZXIoUGFzc1JlZlB0cjxUZXN0RXhjZXB0aW9uPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNT
RVJUKGltcGwuZ2V0KCkpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0
ZSktPmdldChpbXBsLmdldCgpKS5Jc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEV4Y2VwdGlvbi5oCmluZGV4IGE3
MzBhNTliMmFlMGMyYjM4YzdmZDEwZWUzODJiYTliYjg2MDE0ZjkuLjBmNzc3MWQ4YTBlZmI3Yzg4
NWMzNWIwYzQyYjc5YjFmZDQ2NzU1MjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RFeGNlcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0RXhjZXB0aW9uLmgKQEAgLTQ3LDE3ICs0
NywxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbFBlckNvbnRleHRQcm9wZXJ0
aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4sIFRlc3RFeGNlcHRpb24qKSB7IH0KICAgICBzdGF0
aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVByb3BlcnRpZXModjg6OkhhbmRsZTx2
ODo6T2JqZWN0PikgeyB9CiBwcml2YXRlOgotICAgIGZyaWVuZCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGRpc3BhdGNoV3JhcChUZXN0RXhjZXB0aW9uKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRlc3RFeGNlcHRpb24qLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKLSAgICBzdGF0aWMgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RFeGNlcHRpb24+LCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAg
ICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RFeGNlcHRpb24qLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBz
dGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVz
dEV4Y2VwdGlvbj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSopOwogfTsKIAogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRj
aFdyYXAoVGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdEV4Y2VwdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBBU1NF
UlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0
KGltcGwpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdEV4Y2VwdGlvbjo6d3JhcFNsb3co
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0RXhjZXB0
aW9uOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAK
IGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdEV4Y2VwdGlvbiog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTY3LDcgKzY2LDcg
QEAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOE9iamVjdChUZXN0RXhjZXB0aW9u
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmoKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdy
YXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBp
ZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1
cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0
dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RFeGNlcHRpb24qIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCkBAIC03Nyw3ICs3Niw3IEBAIGlubGluZSB2ODo6SGFu
ZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0RXhjZXB0aW9uKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRhU3Rv
cmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RFeGNlcHRpb24gPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAppbmRleCA5ZmNkNDkzZWY0
MjJiZmE3NjBlN2U3YjZjMmMwODMxNWMwMzM3YTVkLi41YjZiN2MwNDc5YmJhMmUwZjExNTA1ZjQ5
ZDRmMThhZDZjNDkyY2UyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0SW50ZXJmYWNlLmNwcApAQCAtMzM4LDcgKzMzOCw3
IEBAIEFjdGl2ZURPTU9iamVjdCogVjhUZXN0SW50ZXJmYWNlOjp0b0FjdGl2ZURPTU9iamVjdCh2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IG9iamVjCiAgICAgcmV0dXJuIHRvTmF0aXZlKG9iamVjdCk7
CiB9ICAgICAgCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjp3cmFw
U2xvdyhQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6
Ok9iamVjdD4gVjhUZXN0SW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdElu
dGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKICAgICBBU1NF
UlQoRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0
eSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RJbnRlcmZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RJbnRlcmZhY2UuaAppbmRleCBlYTMwNzFlZmIxZDhhODg1YWE4MDM2ZTE3OTFi
YzZlYjhhZGIxYTRjLi44ODE5YTNlNWIyMDQ4Y2IwZGVhODdmZDU0YmM0MjFlOGJhNTg1Yzg0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0
SW50ZXJmYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdEludGVyZmFjZS5oCkBAIC01MiwxNyArNTIsMTYgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIGluc3RhbGxQZXJDb250ZXh0UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
LCBUZXN0SW50ZXJmYWNlKikgeyB9CiAgICAgc3RhdGljIHZvaWQgaW5zdGFsbFBlckNvbnRleHRQ
cm90b3R5cGVQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9iamVjdD4pIHsgfQogcHJpdmF0ZToK
LSAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRjaFdyYXAoVGVzdEludGVy
ZmFjZSosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0
ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcEN1c3Rv
bShUZXN0SW50ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNs
b3coUGFzc1JlZlB0cjxUZXN0SW50ZXJmYWNlPiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgZnJpZW5kIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcChUZXN0SW50ZXJmYWNlKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlv
bkNvbnRleHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RJbnRlcmZhY2U+LCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKIAotaW5saW5l
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwKFRlc3RJbnRlcmZhY2UqIGltcGws
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNv
bGF0ZSA9IDApCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RJbnRlcmZh
Y2UqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIEFTU0VSVChET01E
YXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOwotICAgIHJl
dHVybiBWOFRlc3RJbnRlcmZhY2U6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CisgICAgcmV0dXJuIFY4VGVzdEludGVyZmFjZTo6Y3JlYXRlV3JhcHBlcihpbXBsLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB0b1Y4T2JqZWN0KFRlc3RJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0
ZSogaXNvbGF0ZSA9IDApCkBAIC03Miw3ICs3MSw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHRvVjhPYmplY3QoVGVzdEludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
CiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpjdXJy
ZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChU
ZXN0SW50ZXJmYWNlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpA
QCAtODIsNyArODEsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdElu
dGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcgogICAgIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQo
aW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0SW50
ZXJmYWNlID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMv
dGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmNwcAppbmRleCBmMjQ2NWNlZDQw
ZWNhZjE0MWViMWI5YWYxNDdmNmUzODA5MmNjYWRkLi45ZTBlMmZjMzg3MzUxNDgxMmJmMzkyMDRj
NGZhMzA1YzZmNGQ5YTk3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIuY3BwCkBAIC0xMDksNyArMTA5LDcgQEAgYm9vbCBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExp
c3RlbmVyOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdmFsdWUpCiB9CiAKIAot
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjp3cmFw
U2xvdyhQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI6OmNyZWF0
ZVdyYXBwZXIoUGFzc1JlZlB0cjxUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcj4gaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIEFTU0VSVChpbXBsLmdldCgpKTsKICAgICBBU1NFUlQoRE9NRGF0YVN0b3JlOjpj
dXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbC5nZXQoKSkuSXNFbXB0eSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5oCmluZGV4IDI2NDg5MjAwZmQ2OTNmNDAxYTc5
NmI4MzU4N2E2ODljZWYwOTA4MjMuLjBjNzY5ZWFmMzFiOTliNWJhNGRmNmRkYjE5Yjc2ZWRiNjVi
NWJkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuaApAQCAt
NDcsMTcgKzQ3LDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4
dFByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIqKSB7IH0KICAgICBzdGF0aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVBy
b3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PikgeyB9CiBwcml2YXRlOgotICAgIGZyaWVu
ZCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0TWVkaWFRdWVyeUxpc3RM
aXN0ZW5lciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNv
bGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcEN1
c3RvbShUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXI+
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsK
KyAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RNZWRpYVF1ZXJ5TGlz
dExpc3RlbmVyKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlV3JhcHBl
cihQYXNzUmVmUHRyPFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyPiwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiAKLWlubGluZSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0
ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAgICAgQVNTRVJU
KGltcGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChp
bXBsKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiBWOFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVy
Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiBW
OFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRv
VjhPYmplY3QoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSA9IDApCkBAIC02Nyw3ICs2Niw3IEBAIGlubGluZSB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGltcGws
IHY4OjpICiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9NRGF0YVN0b3Jl
OjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4g
dG9WOChUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKQEAgLTc3LDcgKzc2LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFRlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiBpbXBsLCB2ODo6SGFuZGxl
PHYKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3Vy
cmVudChpc29sYXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgo
UGFzc1JlZlB0cjwgVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIgPiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwg
djg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IGM4Mzc3MTgxYTg4OTM4Zjc4OTcxNGQ4NmRlZWUwOWE4MGI2YWY2MjcuLmU4YzVj
Nzc3NzE3MTZjNTVmZGYwYWQyYjgzYWIxMTVkOGM0ZmQ2ODUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFt
ZWRDb25zdHJ1Y3Rvci5jcHAKQEAgLTE0OCw3ICsxNDgsNyBAQCBBY3RpdmVET01PYmplY3QqIFY4
VGVzdE5hbWVkQ29uc3RydWN0b3I6OnRvQWN0aXZlRE9NT2JqZWN0KHY4OjpIYW5kbGU8djg6Ok9i
amVjdAogICAgIHJldHVybiB0b05hdGl2ZShvYmplY3QpOwogfSAgICAgIAogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OndyYXBTbG93KFBhc3NSZWZQdHI8
VGVzdE5hbWVkQ29uc3RydWN0b3I+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6Y3JlYXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3ROYW1l
ZENvbnN0cnVjdG9yPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4
dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkpOwogICAg
IEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsLmdldCgpKS5J
c0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90
ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROYW1lZENvbnN0cnVjdG9yLmgKaW5kZXggYTU1ZTdkYzA1
NmE3MmViMDQzZWUxNTQ5YjgwYjJkZTFjYTI4NDZkMy4uNGJmNDBjZWJkMTgzNzdhM2MzMWQ4Yzhl
NGRmMTc4NGYxYTEzZWQ4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L1Y4L1Y4VGVzdE5hbWVkQ29uc3RydWN0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0TmFtZWRDb25zdHJ1Y3Rvci5oCkBAIC01
NCwxNyArNTQsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxQZXJDb250ZXh0
UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBUZXN0TmFtZWRDb25zdHJ1Y3Rvciop
IHsgfQogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGll
cyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KSB7IH0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwKFRlc3ROYW1lZENvbnN0cnVjdG9yKiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRlc3ROYW1l
ZENvbnN0cnVjdG9yKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcFNsb3co
UGFzc1JlZlB0cjxUZXN0TmFtZWRDb25zdHJ1Y3Rvcj4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIGZyaWVuZCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IHdyYXAoVGVzdE5hbWVkQ29uc3RydWN0b3IqLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdE5hbWVkQ29uc3RydWN0
b3I+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
KTsKIH07CiAKIAotaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwKFRl
c3ROYW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9u
Q29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAg
ICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRl
KS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7Ci0gICAgcmV0dXJuIFY4VGVzdE5hbWVkQ29uc3RydWN0
b3I6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJu
IFY4VGVzdE5hbWVkQ29uc3RydWN0b3I6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOE9i
amVjdChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKQEAgLTc0LDcgKzczLDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gdG9WOE9iamVjdChUZXN0TmFtZWRDb25zdHJ1Y3RvciogaW1wbCwgdjg6OkhhbmRsZTwKICAg
ICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3RvcmU6OmN1cnJlbnQo
aXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RO
YW1lZENvbnN0cnVjdG9yKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAw
KQpAQCAtODQsNyArODMsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVz
dE5hbWVkQ29uc3RydWN0b3IqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iagogICAgIHY4OjpIYW5k
bGU8djg6OlZhbHVlPiB3cmFwcGVyID0gRE9NRGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5n
ZXQoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdy
YXBwZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOworICAgIHJldHVybiB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChQYXNzUmVmUHRyPCBUZXN0
TmFtZWRDb25zdHJ1Y3RvciA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25D
b250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9
IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Tm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0Tm9kZS5jcHAKaW5kZXggYjA1NTI4ZTAxZTJkYmVhOThhODU1Y2YyYzJjZGE0YTc2ODdm
NTdiNS4uZTExNTJmYWNlZGU4N2YzNDIwYjAyODY5MGUzZWFjYTJiMWViN2IwOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3ROb2Rl
LmNwcApAQCAtMTA3LDcgKzEwNyw3IEBAIGJvb2wgVjhUZXN0Tm9kZTo6SGFzSW5zdGFuY2Uodjg6
OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
VjhUZXN0Tm9kZTo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0Tm9kZT4gaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3ROb2RlOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8
VGVzdE5vZGU+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7CiAgICAgQVNT
RVJUKFY4RE9NV3JhcHBlcjo6Z2V0Q2FjaGVkV3JhcHBlcihpbXBsLmdldCgpKS5Jc0VtcHR5KCkp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4
VGVzdE5vZGUuaCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3ROb2RlLmgKaW5kZXggNzliOThjNzZhOTA2Mjk4MDQyOTRkZDM2YzU5ZmJhY2I2YWIwY2RlYS4u
MzhkMmU3ZWRkNTZmOGFiMTgzZmM4ZGE1OGVlYTYwODYzYjU0MzQ0YiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE5vZGUuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0Tm9kZS5oCkBAIC00
OCwxNyArNDgsMTYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxQZXJDb250ZXh0
UHJvcGVydGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+LCBUZXN0Tm9kZSopIHsgfQogICAgIHN0
YXRpYyB2b2lkIGluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVydGllcyh2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+KSB7IH0KIHByaXZhdGU6Ci0gICAgZnJpZW5kIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZGlzcGF0Y2hXcmFwKFRlc3ROb2RlKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRlc3ROb2RlKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAgc3RhdGljIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0Tm9kZT4sIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIGZyaWVuZCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE5vZGUqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdE5vZGU+LCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKIH07CiAKIAotaW5s
aW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwKFRlc3ROb2RlKiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xh
dGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0Tm9kZSogaW1w
bCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBp
c29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKFY4RE9NV3JhcHBl
cjo6Z2V0Q2FjaGVkV3JhcHBlcihpbXBsKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiBWOFRlc3RO
b2RlOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVy
biBWOFRlc3ROb2RlOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdE5v
ZGUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCkBAIC02OCw3ICs2
Nyw3IEBAIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdE5vZGUq
IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4KICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
IHdyYXBwZXIgPSBWOERPTVdyYXBwZXI6OmdldENhY2hlZFdyYXBwZXIoaW1wbCk7CiAgICAgaWYg
KCF3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJu
IGRpc3BhdGNoV3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVy
biB3cmFwKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0Tm9kZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29s
YXRlKiBpc29sYXRlID0gMCkKQEAgLTc4LDcgKzc3LDcgQEAgaW5saW5lIHY4OjpIYW5kbGU8djg6
OlZhbHVlPiB0b1Y4KFRlc3ROb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW8KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IFY4RE9NV3JhcHBlcjo6Z2V0
Q2FjaGVkV3JhcHBlcihpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAg
ICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGltcGwsIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4RmFzdChU
ZXN0Tm9kZSogaW1wbCwgY29uc3Qgdjg6OkFjY2Vzc29ySW5mbyYgaW5mbywgTm9kZSogaG9sZGVy
KQpAQCAtOTksNyArOTgsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjhGYXN0
KFRlc3ROb2RlKiBpbXBsLCBjb25zdCB2ODo6QWNjZXNzb3JJbmZvJiBpbgogICAgICAgICBpZiAo
IXdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgfQot
ICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgaG9sZGVyV3JhcHBlciwgaW5mby5HZXRJc29s
YXRlKCkpOworICAgIHJldHVybiB3cmFwKGltcGwsIGhvbGRlcldyYXBwZXIsIGluZm8uR2V0SXNv
bGF0ZSgpKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFBhc3NSZWZQ
dHI8IFRlc3ROb2RlID4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRl
c3RPYmouY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVz
dE9iai5jcHAKaW5kZXggMDlhY2Q2ZTQ3YTFhYzM5N2ZiNmFjYzUwZjkzMGMyY2UwNDQyOTQ4ZC4u
NTYwNzIxMDFiNmVlMmRjZDM1N2NkOTdlOTI5ZDJjMWU3Y2RlYzBhYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE9iai5jcHAKQEAg
LTIzNTEsNyArMjM1MSw3IEBAIHZvaWQgVjhUZXN0T2JqOjppbnN0YWxsUGVyQ29udGV4dFByb3Rv
dHlwZVByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBwcm90CiAgICAgfQogfQogCi12
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0
T2JqPiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4VGVzdE9iajo6Y3JlYXRl
V3JhcHBlcihQYXNzUmVmUHRyPFRlc3RPYmo+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4g
Y3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1w
bC5nZXQoKSk7CiAgICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0
KGltcGwuZ2V0KCkpLklzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T2JqLmgKaW5kZXggMGM5MjBiMmEwMDhkYmI0NWM2OGI1
OTAxNzc1ZmQ4YmM4NjBiZDU5ZC4uMjA1MmE5MmMzZmUzOWI0YmNmMDFhYWZlZjQ3ZTlmZWNjMzdm
OGNjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4
L1Y4VGVzdE9iai5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPYmouaApAQCAtNTMsMTcgKzUzLDE2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9p
ZCBpbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXModjg6OkhhbmRsZTx2ODo6T2JqZWN0PiwgVGVz
dE9iaiopOwogICAgIHN0YXRpYyB2b2lkIGluc3RhbGxQZXJDb250ZXh0UHJvdG90eXBlUHJvcGVy
dGllcyh2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KTsKIHByaXZhdGU6Ci0gICAgZnJpZW5kIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwKFRlc3RPYmoqLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKLSAgICBzdGF0aWMgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRjaFdyYXBDdXN0b20oVGVzdE9iaiosIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE9iaj4sIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIGZy
aWVuZCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdE9iaiosIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOworICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0ZVdyYXBwZXIoUGFzc1JlZlB0cjxUZXN0T2JqPiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9Owog
CiAKLWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0T2JqKiBp
bXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
IGlzb2xhdGUgPSAwKQoraW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChUZXN0T2Jq
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUgPSAwKQogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBBU1NFUlQoRE9NRGF0
YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCkuSXNFbXB0eSgpKTsKLSAgICByZXR1
cm4gVjhUZXN0T2JqOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwor
ICAgIHJldHVybiBWOFRlc3RPYmo6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdG9WOE9iamVj
dChUZXN0T2JqKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpAQCAt
NzMsNyArNzIsNyBAQCBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4T2JqZWN0KFRl
c3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gYwogICAgIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcHBlciA9IERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGlt
cGwpOwogICAgIGlmICghd3JhcHBlci5Jc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVy
OwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRl
KTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQog
CiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHRvVjgoVGVzdE9iaiogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+
KCksIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTgzLDcgKzgyLDcgQEAgaW5saW5lIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RPYmoqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb24KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURh
dGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5J
c0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdy
YXAoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6
VmFsdWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE9iaiA+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpLCB2ODo6SXNv
bGF0ZSogaXNvbGF0ZSA9IDApCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVj
dG9ycy5jcHAKaW5kZXggNDE5MjA4MDA1ZmNmOGE0NmQ2YjI2ODY2NjY0ZDI3ZmY5ODRkNmVhOS4u
NjY0YmI2ZjFkMDc4MzJmMGQyN2UxZTU1ZTc5YmJlMTU4MmQ3YTU5NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9W
OC9WOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzLmNwcApAQCAtMTY5LDcgKzE2OSw3IEBAIGJv
b2wgVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6SGFzSW5zdGFuY2Uodjg6OkhhbmRsZTx2
ODo6VmFsdWU+IHZhbHVlKQogfQogCiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0T3Zl
cmxvYWRlZENvbnN0cnVjdG9yczo6d3JhcFNsb3coUGFzc1JlZlB0cjxUZXN0T3ZlcmxvYWRlZENv
bnN0cnVjdG9ycz4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdE92ZXJsb2Fk
ZWRDb25zdHJ1Y3RvcnM+IGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbC5nZXQoKSk7CiAg
ICAgQVNTRVJUKERPTURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwuZ2V0KCkp
LklzRW1wdHkoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5oIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuaApp
bmRleCA1ZjkwNTFiMjgxMjRkMDlmY2VhMDg3ZDE4ZDYzMGM3ZmYxNTZhMDBkLi4xNmMzZDZmZjdh
YmRhYjk5NzNmMWEwZmU2NTY3YzE3NGI1OWNmMzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9WOC9WOFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzLmgKQEAgLTUyLDE3ICs1MiwxNiBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0b3IyQ2FsbGJhY2soY29uc3Qgdjg6
OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gY29uc3RydWN0
b3IzQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwogICAgIHN0YXRpYyB2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4gY29uc3RydWN0b3I0Q2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYpOwot
ICAgIGZyaWVuZCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9ycyosIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3Bh
dGNoV3JhcEN1c3RvbShUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyosIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSopOwotICAgIHN0YXRpYyB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBTbG93KFBhc3NSZWZQdHI8VGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnM+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqKTsKKyAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RPdmVy
bG9hZGVkQ29uc3RydWN0b3JzKiwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKik7CisgICAgc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRlV3JhcHBlcihQYXNzUmVmUHRyPFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzPiwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7CiB9OwogCiAK
LWlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGRpc3BhdGNoV3JhcChUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9ycyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IHdyYXAoVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCiB7CiAg
ICAgQVNTRVJUKGltcGwpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJlbnQoaXNvbGF0
ZSktPmdldChpbXBsKS5Jc0VtcHR5KCkpOwotICAgIHJldHVybiBWOFRlc3RPdmVybG9hZGVkQ29u
c3RydWN0b3JzOjp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAg
IHJldHVybiBWOFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGVXcmFwcGVyKGltcGws
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IHRvVjhPYmplY3QoVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0
PigpLCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCkBAIC03Miw3ICs3MSw3IEBAIGlubGluZSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmplY3QoVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnMqIGltcGwsIHY4OjpICiAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gRE9N
RGF0YVN0b3JlOjpjdXJyZW50KGlzb2xhdGUpLT5nZXQoaW1wbCk7CiAgICAgaWYgKCF3cmFwcGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7Ci0gICAgcmV0dXJuIGRpc3BhdGNo
V3JhcChpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiB3cmFwKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdG9WOChUZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9ycyogaW1wbCwgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCks
IHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTgyLDcgKzgxLDcgQEAgaW5saW5lIHY4OjpI
YW5kbGU8djg6OlZhbHVlPiB0b1Y4KFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzKiBpbXBsLCB2
ODo6SGFuZGxlPHYKICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gd3JhcHBlciA9IERPTURhdGFT
dG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpOwogICAgIGlmICghd3JhcHBlci5Jc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiB3cmFwcGVyOwotICAgIHJldHVybiBkaXNwYXRjaFdyYXAo
aW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChpbXBsLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiBpbmxpbmUgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHRvVjgoUGFzc1JlZlB0cjwgVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMgPiBpbXBsLCB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1
ZUludGVyZmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAppbmRleCA4MGU2M2VjNzY4
MDc2YjgwOGM4MWRlOTkxNWM3NGY1YmIwNzE0ZDcyLi4yNTMyZjFlNjgxNDk2OGVlMzZhMTc5Yjli
MDdhNTA0YTRmNWRlMTNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcApAQCAtMjkxLDcgKzI5MSw3IEBAIGJvb2wgVjhUZXN0
U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpIYXNJbnN0YW5jZSh2ODo6SGFuZGxlPHY4
OjpWYWx1ZT4gdmFsCiB9CiAKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOFRlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OndyYXBTbG93KFBhc3NSZWZQdHI8VGVzdFNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZUludGVyZmFjZT4gaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0
PiBWOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6OmNyZWF0ZVdyYXBwZXIoUGFz
c1JlZlB0cjxUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlPiBpbXBsLCB2ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7
CiAgICAgQVNTRVJUKGltcGwuZ2V0KCkpOwogICAgIEFTU0VSVChET01EYXRhU3RvcmU6OmN1cnJl
bnQoaXNvbGF0ZSktPmdldChpbXBsLmdldCgpKS5Jc0VtcHR5KCkpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L1Y4L1Y4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5oCmluZGV4IGIwNGU2ZjRm
ZmJmZWVkZTFiMmFlNmIyMzk3ZjM3ZThkMmU1NjJjZTUuLmU3MzFhOGU4NjFkZjRkMmEyZTU4ZmZi
MzdlZGEwODA1ZGY5YzJhZjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvdGVzdC9WOC9WOFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmgKQEAgLTUwLDE3ICs1MCwxNiBAQCBwdWJsaWM6CiAgICAg
c3RhdGljIHZvaWQgaW5zdGFsbFBlckNvbnRleHRQcm9wZXJ0aWVzKHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4sIFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqKSB7IH0KICAgICBzdGF0
aWMgdm9pZCBpbnN0YWxsUGVyQ29udGV4dFByb3RvdHlwZVByb3BlcnRpZXModjg6OkhhbmRsZTx2
ODo6T2JqZWN0PikgeyB9CiBwcml2YXRlOgotICAgIGZyaWVuZCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGRpc3BhdGNoV3JhcChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKiwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKik7Ci0gICAg
c3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZGlzcGF0Y2hXcmFwQ3VzdG9tKFRlc3RTZXJp
YWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0
aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqKTsKLSAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiB3cmFwU2xvdyhQYXNzUmVmUHRyPFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2U+LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUq
KTsKKyAgICBmcmllbmQgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFRlc3RTZXJpYWxpemVk
U2NyaXB0VmFsdWVJbnRlcmZhY2UqLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqKTsKKyAgICBzdGF0aWMgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGVXcmFwcGVyKFBhc3NSZWZQdHI8VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFj
ZT4sIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSop
OwogfTsKIAogCi1pbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBkaXNwYXRjaFdyYXAoVGVz
dFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2Jq
ZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlID0gMCkKK2lubGluZSB2
ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVy
ZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlID0gMCkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgQVNTRVJUKERP
TURhdGFTdG9yZTo6Y3VycmVudChpc29sYXRlKS0+Z2V0KGltcGwpLklzRW1wdHkoKSk7Ci0gICAg
cmV0dXJuIFY4VGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6d3JhcFNsb3coaW1w
bCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhUZXN0U2VyaWFsaXpl
ZFNjcmlwdFZhbHVlSW50ZXJmYWNlOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiB9CiAKIGlubGluZSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHRvVjhPYmpl
Y3QoVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZSogaW1wbCwgdjg6OkhhbmRsZTx2
ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+KCksIHY4
OjpJc29sYXRlKiBpc29sYXRlID0gMCkKQEAgLTcwLDcgKzY5LDcgQEAgaW5saW5lIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gdG9WOE9iamVjdChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJm
YWNlKiBpbXAKICAgICB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIgPSBET01EYXRhU3Rv
cmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0
eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiB0b1Y4KFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGltcGwsIHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pigp
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSA9IDApCkBAIC04MCw3ICs3OSw3IEBAIGlubGluZSB2ODo6
SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBpbXBsLCB2ODo6CiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHdyYXBwZXIgPSBET01EYXRh
U3RvcmU6OmN1cnJlbnQoaXNvbGF0ZSktPmdldChpbXBsKTsKICAgICBpZiAoIXdyYXBwZXIuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFw
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoaW1wbCwg
Y3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogaW5saW5lIHY4OjpIYW5kbGU8djg6OlZh
bHVlPiB0b1Y4KFBhc3NSZWZQdHI8IFRlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2Ug
PiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCA9IHY4OjpIYW5k
bGU8djg6Ok9iamVjdD4oKSwgdjg6Oklzb2xhdGUqIGlzb2xhdGUgPSAwKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4QmxvYkN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcAppbmRleCA3MWYx
NjJhZWM4MDVhMmE3MzkzYjU2MmVlMDA5ZGY2ZjA0ZmZjZjhkLi4yNmIzZmY5NmUwNTc3YzdhY2E1
YzBiZmQ4MTU2NGQzNDRiZDk1ZGE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhCbG9iQ3VzdG9tLmNwcApAQCAtNDMsMTIgKzQzLDEyIEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEJsb2I6OmRpc3BhdGNo
V3JhcEN1c3RvbShCbG9iKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29u
dGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAo
QmxvYiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBpZiAoaW1wbC0+aXNG
aWxlKCkpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAodG9GaWxlKGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwotICAgIHJldHVybiBWOEJsb2I6OndyYXBTbG93KGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHRvRmlsZShpbXBs
KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhCbG9iOjpjcmVhdGVX
cmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIHY4OjpIYW5kbGU8
djg6OlZhbHVlPiBWOEJsb2I6OmNvbnN0cnVjdG9yQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50
cyYgYXJncykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OENTU1J1bGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Q1NTUnVsZUN1c3RvbS5jcHAKaW5kZXggY2Q3NjM2YTU2MzRkZGU5MzQ5ODAwNDYwOThmN2NiZmZj
ZTU2MmFmOS4uMTcyNjQ5ZGIzNTY5ZTE2Yjk0M2I5NzFmZTQwMWI0MTM0MWJhZjQyNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4Q1NTUnVsZUN1c3Rv
bS5jcHAKQEAgLTQzLDcgKzQzLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFu
ZGxlPHY4OjpPYmplY3Q+IFY4Q1NTUnVsZTo6ZGlzcGF0Y2hXcmFwQ3VzdG9tKENTU1J1bGUqIGlt
cGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSog
aXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChDU1NSdWxlKiBpbXBsLCB2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUp
CiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIHN3aXRjaCAoaW1wbC0+dHlwZSgpKSB7CkBAIC01
MSwyNyArNTEsMjcgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOENTU1J1bGU6OmRpc3BhdGNo
V3JhcEN1c3RvbShDU1NSdWxlKiBpbXBsLCB2ODo6SGFuZGxlPHYKICAgICAgICAgLy8gQ1NTVW5r
bm93blJ1bGUuaWRsIGlzIGV4cGxpY2l0bHkgZXhjbHVkZWQgYXMgaXQgZG9lc24ndCBhZGQgYW55
dGhpbmcKICAgICAgICAgLy8gb3ZlciBDU1NSdWxlLmlkbCAoc2VlIFdlYkNvcmUuZ3lwL1dlYkNv
cmUuZ3lwOiAnYmluZGluZ3NfaWRsX2ZpbGVzJykuCiAgICAgICAgIC8vIC0+IFVzZSB0aGUgYmFz
ZSBjbGFzcyB3cmFwcGVyIGhlcmUuCi0gICAgICAgIHJldHVybiBWOENTU1J1bGU6OndyYXBTbG93
KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiBWOENTU1J1
bGU6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBj
YXNlIENTU1J1bGU6OlNUWUxFX1JVTEU6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3Rh
dGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGltcGwpLCBj
cmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgQ1NTUnVsZTo6Q0hBUlNFVF9SVUxF
OgotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PENTU0NoYXJzZXRSdWxl
Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFw
KHN0YXRpY19jYXN0PENTU0NoYXJzZXRSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxlOjpJTVBPUlRfUlVMRToKLSAgICAgICAgcmV0dXJuIGRp
c3BhdGNoV3JhcChzdGF0aWNfY2FzdDxDU1NJbXBvcnRSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29u
dGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PENTU0ltcG9y
dFJ1bGUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIENTU1J1
bGU6Ok1FRElBX1JVTEU6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PENTU01lZGlhUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgQ1NTUnVsZTo6Rk9OVF9GQUNFX1JVTEU6Ci0gICAg
ICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4oaW1w
bCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRp
Y19jYXN0PENTU0ZvbnRGYWNlUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogICAgIGNhc2UgQ1NTUnVsZTo6UEFHRV9SVUxFOgotICAgICAgICByZXR1cm4gZGlzcGF0Y2hX
cmFwKHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PENTU1BhZ2VSdWxlKj4oaW1w
bCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxlOjpXRUJLSVRf
S0VZRlJBTUVfUlVMRToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxX
ZWJLaXRDU1NLZXlmcmFtZVJ1bGUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsK
KyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKj4o
aW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxlOjpXRUJL
SVRfS0VZRlJBTUVTX1JVTEU6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nh
c3Q8V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBDU1NSdWxl
OjpXRUJLSVRfUkVHSU9OX1JVTEU6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTUmVnaW9uUnVsZSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxXZWJLaXRDU1NSZWdpb25SdWxl
Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgfQotICAgIHJldHVybiBW
OENTU1J1bGU6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAg
cmV0dXJuIFY4Q1NTUnVsZTo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDU1NWYWx1ZUN1c3RvbS5jcHAKaW5kZXggMDk0
ZGFjNWVkMDBmY2FiN2MxZDc2Y2FlZjJlOGMzZmRmNjU5NWFhYS4uOThkZjIyMjgwZWYwNTg2Mjcy
NmIyZmU5NDIzMTRkZDRmY2IxN2VhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4Q1NTVmFsdWVDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOENTU1ZhbHVlQ3VzdG9tLmNwcApAQCAtNDYsMjYgKzQ2LDI2IEBA
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOENTU1Zh
bHVlOjpkaXNwYXRjaFdyYXBDdXN0b20oQ1NTVmFsdWUqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8
djg6Ok9iamVjdD4gd3JhcChDU1NWYWx1ZSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBj
cmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBs
KTsKICAgICBpZiAoaW1wbC0+aXNXZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZSgpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4o
aW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0
YXRpY19jYXN0PFdlYktpdENTU1RyYW5zZm9ybVZhbHVlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiAjaWYgRU5BQkxFKENTU19GSUxURVJTKQogICAgIGlmIChpbXBsLT5pc1dl
YktpdENTU0ZpbHRlclZhbHVlKCkpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGlj
X2Nhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFsdWUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8V2ViS2l0Q1NTRmlsdGVyVmFs
dWUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICNlbmRpZgogICAgIGlmIChp
bXBsLT5pc1ZhbHVlTGlzdCgpKQotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19j
YXN0PENTU1ZhbHVlTGlzdCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAg
ICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxDU1NWYWx1ZUxpc3QqPihpbXBsKSwgY3JlYXRp
b25Db250ZXh0LCBpc29sYXRlKTsKICAgICBpZiAoaW1wbC0+aXNQcmltaXRpdmVWYWx1ZSgpKQot
ICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFw
KHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiAjaWYgRU5BQkxFKFNWRykKICAgICBpZiAoaW1wbC0+aXNTVkdQYWludCgpKQot
ICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PFNWR1BhaW50Kj4oaW1wbCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19j
YXN0PFNWR1BhaW50Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgaWYg
KGltcGwtPmlzU1ZHQ29sb3IoKSkKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNf
Y2FzdDxTVkdDb2xvcio+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAg
ICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxTVkdDb2xvcio+KGltcGwpLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogI2VuZGlmCi0gICAgcmV0dXJuIFY4Q1NTVmFsdWU6OndyYXBTbG93KGlt
cGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4Q1NTVmFsdWU6OmNy
ZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvdjgv
Y3VzdG9tL1Y4Q2FudmFzUmVuZGVyaW5nQ29udGV4dEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcApp
bmRleCAxMDY4MmQzNTFiNTEyOTVkMGEyNTA0NzQwYjJkOGNjMTU2NDNhNmYyLi5lOGRkYWMwMmVj
MjYxMDE5MjExZTI2YjY0OTI2ZWM0ODk3NGViNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdDb250ZXh0Q3VzdG9tLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhDYW52YXNSZW5kZXJpbmdD
b250ZXh0Q3VzdG9tLmNwcApAQCAtMzksMTQgKzM5LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmRp
c3BhdGNoV3JhcEN1c3RvbShDYW52YXNSZW5kZXJpbmdDb250ZXh0KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCit2ODo6
SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoQ2FudmFzUmVuZGVyaW5nQ29udGV4dCogaW1wbCwgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRl
KQogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBpZiAoaW1wbC0+aXMyZCgpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCo+
KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChz
dGF0aWNfY2FzdDxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQqPihpbXBsKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKICNpZiBFTkFCTEUoV0VCR0wpCiAgICAgaWYgKGltcGwtPmlzM2QoKSkK
LSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxXZWJHTFJlbmRlcmluZ0Nv
bnRleHQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJu
IHdyYXAoc3RhdGljX2Nhc3Q8V2ViR0xSZW5kZXJpbmdDb250ZXh0Kj4oaW1wbCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CiAjZW5kaWYKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6T2JqZWN0PigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YVZpZXdDdXN0b20uY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RGF0YVZpZXdDdXN0b20uY3BwCmluZGV4IGM3Y2M3
Yzg3Zjc4OWM4ZTk1YWIwY2FlZmJiMDhlZWE4YTcwMDNiOTEuLjZjZjA3NDk1MDQ3MjI3ZDFiYjM5
ZTlmMWYxZWQ1NGE4MDg2MzBkMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L2N1c3RvbS9WOERhdGFWaWV3Q3VzdG9tLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhEYXRhVmlld0N1c3RvbS5jcHAKQEAgLTU2LDEwICs1NiwxMCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhVmlldzo6Y29uc3RydWN0b3JDYWxsYmFjayhjb25z
dCB2ODo6QXJndW1lbnRzJiBhcmdzKQogfQogCiAvLyBGSVhNRTogRG9uJ3QgbmVlZCB0aGlzIG92
ZXJyaWRlLgotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOERhdGFWaWV3OjpkaXNwYXRjaFdyYXBD
dXN0b20oRGF0YVZpZXcqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChE
YXRhVmlldyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4
OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsKTsKLSAgICByZXR1cm4gVjhE
YXRhVmlldzo6d3JhcFNsb3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICBy
ZXR1cm4gVjhEYXRhVmlldzo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogfQogCiB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhEYXRhVmlldzo6Z2V0SW50OENh
bGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhEb2N1bWVudEN1c3RvbS5jcHAKaW5kZXggNzIzZmYy
OTkyYjc2ZDFhZTMxZDFiOGM4ZTQ5MmZlMTUyNjdmMjY2Ny4uNmU5Yzk2NGI5NDIwOWU1YWZhYmRh
OGY4NTY0MmMwOGZlOThkYmRhNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4RG9jdW1lbnRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOERvY3VtZW50Q3VzdG9tLmNwcApAQCAtOTUsMTYgKzk1LDE2IEBAIHY4
OjpIYW5kbGU8djg6OlZhbHVlPiBWOERvY3VtZW50OjpldmFsdWF0ZUNhbGxiYWNrKGNvbnN0IHY4
OjpBcmd1bWVudHMmIGFyZ3MpCiAgICAgcmV0dXJuIHRvVjgocmVzdWx0LnJlbGVhc2UoKSwgYXJn
cy5Ib2xkZXIoKSwgYXJncy5HZXRJc29sYXRlKCkpOwogfQogCi12ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IFY4RG9jdW1lbnQ6OmRpc3BhdGNoV3JhcEN1c3RvbShEb2N1bWVudCogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKERvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAg
QVNTRVJUKGltcGwpOwogICAgIGlmIChpbXBsLT5pc0hUTUxEb2N1bWVudCgpKQotICAgICAgICBy
ZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudCo+KGltcGwpLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICNpZiBFTkFC
TEUoU1ZHKQogICAgIGlmIChpbXBsLT5pc1NWR0RvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiBk
aXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8U1ZHRG9jdW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8U1ZHRG9jdW1l
bnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICNlbmRpZgotICAgIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4RG9jdW1lbnQ6OndyYXBTbG93KGltcGwsIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
cGVyID0gVjhEb2N1bWVudDo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogICAgIGlmICh3cmFwcGVyLklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBw
ZXI7CiAgICAgaWYgKCFWOERPTVdpbmRvd1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVsZW1lbnRDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAK
aW5kZXggNDdkYzRiYWVmODM1NjM5M2Q2ZDljYTEzMzY4N2M3NGFmMDdhZWRmMS4uNGYyNzExNDVk
ZDM4NzVhYzMyYzE0ZWI2YThiMTczZDMwNGU0N2FhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4RWxlbWVudEN1c3RvbS5jcHAKQEAgLTQwLDE3ICs0
MCwxNyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIFRoaXMgY29kZSBpcyBkdXBsaWNh
dGVkIGluIFY4Tm9kZTo6ZGlzcGF0Y2hXcmFwQ3VzdG9tIGZvciBwZXJmb3JtYW5jZS4gSXQgbXVz
dCBiZSBrZXB0IGluIHN5bmMuCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RWxlbWVudDo6ZGlz
cGF0Y2hXcmFwQ3VzdG9tKEVsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKy8vIFRoaXMgY29kZSBpcyBkdXBs
aWNhdGVkIGluIFY4Tm9kZTo6d3JhcCBmb3IgcGVyZm9ybWFuY2UuIEl0IG11c3QgYmUga2VwdCBp
biBzeW5jLgordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKEVsZW1lbnQqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
IHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgaWYgKGltcGwtPmlzSFRNTEVsZW1lbnQoKSkKLSAg
ICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcCh0b0hUTUxFbGVtZW50KGltcGwpLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcCh0b0hUTUxFbGVtZW50KGltcGwp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgaWYgKGlt
cGwtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19j
YXN0PFNWR0VsZW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAg
ICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOwogI2VuZGlmCi0gICAgcmV0dXJuIFY4RWxlbWVudDo6d3JhcFNsb3co
c3RhdGljX2Nhc3Q8RWxlbWVudCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwor
ICAgIHJldHVybiBWOEVsZW1lbnQ6OmNyZWF0ZVdyYXBwZXIoc3RhdGljX2Nhc3Q8RWxlbWVudCo+
KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeUN1c3RvbS5jcHAKaW5kZXggYWU5
MDFlYmIzNTY1Mzg5YjM1MTY1YmJhZGVlMzRjNzE2MmUyNmUwNS4uNzJjMGU2ZGNlNDk5NGNjNTZm
ZTFkNDRhOGYxOGQyODA1YzAyNWEyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4RW50cnlDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEVudHJ5Q3VzdG9tLmNwcApAQCAtNDMsMTQgKzQzLDE0IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEVudHJ5OjpkaXNw
YXRjaFdyYXBDdXN0b20oRW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRp
b25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4g
d3JhcChFbnRyeSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQs
IHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsKTsKICAgICBpZiAoaW1w
bC0+aXNGaWxlKCkpCi0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8Rmls
ZUVudHJ5Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVy
biB3cmFwKHN0YXRpY19jYXN0PEZpbGVFbnRyeSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOwogCiAgICAgQVNTRVJUKGltcGwtPmlzRGlyZWN0b3J5KCkpOwotICAgIHJldHVybiBk
aXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8RGlyZWN0b3J5RW50cnkqPihpbXBsKSwgY3JlYXRpb25D
b250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxEaXJlY3RvcnlF
bnRyeSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0
b20vVjhFbnRyeVN5bmNDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4RW50cnlTeW5jQ3VzdG9tLmNwcAppbmRleCA2ZDg4OTVjOGViNjAzMjlkM2I5MzQ2MTJj
YTA3ZDVlNmZiZDZkZDQ1Li45NjcyOGQwOTIyZTljNGZlZDZlOWI4OTRiMTVkZTM5MzAzOGVlYWE0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhFbnRyeVN5
bmNDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEVu
dHJ5U3luY0N1c3RvbS5jcHAKQEAgLTQzLDE0ICs0MywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhFbnRyeVN5bmM6OmRpc3BhdGNoV3JhcEN1
c3RvbShFbnRyeVN5bmMqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChF
bnRyeVN5bmMqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgaWYgKGltcGwt
PmlzRmlsZSgpKQotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PEZpbGVF
bnRyeVN5bmMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0
dXJuIHdyYXAoc3RhdGljX2Nhc3Q8RmlsZUVudHJ5U3luYyo+KGltcGwpLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogCiAgICAgQVNTRVJUKGltcGwtPmlzRGlyZWN0b3J5KCkpOwotICAgIHJl
dHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8RGlyZWN0b3J5RW50cnlTeW5jKj4oaW1wbCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8
RGlyZWN0b3J5RW50cnlTeW5jKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOEV2ZW50Q3VzdG9tLmNwcAppbmRleCA0M2VhYjY5YjhkY2RlOGY3OThl
N2M1ODRhMDQyYmIzMGI2ZWZkMTc3Li41OGFjYmJjMjY5YmNkMjQzYjZlODgxYjE5NGNlODViYzIx
ZTNmMDJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhF
dmVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
RXZlbnRDdXN0b20uY3BwCkBAIC02NCw5ICs2NCw5IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBW
OEV2ZW50OjpjbGlwYm9hcmREYXRhQWNjZXNzb3JHZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+
CiAKICNkZWZpbmUgVFJZX1RPX1dSQVBfV0lUSF9JTlRFUkZBQ0UoaW50ZXJmYWNlTmFtZSkgXAog
ICAgIGlmIChldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yIyNpbnRlcmZhY2VOYW1lID09IGRlc2ly
ZWRJbnRlcmZhY2UpIFwKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxp
bnRlcmZhY2VOYW1lKj4oZXZlbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAg
ICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxpbnRlcmZhY2VOYW1lKj4oZXZlbnQpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4RXZlbnQ6OmRp
c3BhdGNoV3JhcEN1c3RvbShFdmVudCogZXZlbnQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSAqaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChFdmVudCogZXZlbnQsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250
ZXh0LCB2ODo6SXNvbGF0ZSAqaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoZXZlbnQpOwogCkBAIC03
NCwxMSArNzQsMTEgQEAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEV2ZW50OjpkaXNwYXRjaFdy
YXBDdXN0b20oRXZlbnQqIGV2ZW50LCB2ODo6SGFuZGxlPHY4OjoKIAogICAgIC8vIFdlIG5lZWQg
dG8gY2hlY2sgRXZlbnQgZmlyc3QgdG8gYXZvaWQgaW5maW5pdGUgcmVjdXJzaW9uLgogICAgIGlm
IChldmVudE5hbWVzKCkuaW50ZXJmYWNlRm9yRXZlbnQgPT0gZGVzaXJlZEludGVyZmFjZSkKLSAg
ICAgICAgcmV0dXJuIFY4RXZlbnQ6OndyYXBTbG93KGV2ZW50LCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOworICAgICAgICByZXR1cm4gVjhFdmVudDo6Y3JlYXRlV3JhcHBlcihldmVudCwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKIAogICAgIERPTV9FVkVOVF9JTlRFUkZBQ0VTX0ZPUl9F
QUNIKFRSWV9UT19XUkFQX1dJVEhfSU5URVJGQUNFKQogCi0gICAgcmV0dXJuIFY4RXZlbnQ6Ondy
YXBTbG93KGV2ZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiBWOEV2
ZW50OjpjcmVhdGVXcmFwcGVyKGV2ZW50LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQog
CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MQ29sbGVjdGlvbkN1c3RvbS5jcHAKaW5kZXggMGUw
OTg4MTI1YzhlZjRmOTVkNjA4YWJhYjZkYzEwNzY4MzFlMzY5Mi4uZGZmNDk5MWM1ODljZWM4NWNj
MmNjZmNmYzlmYjA4OGU4MGMxMzdiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4SFRNTENvbGxlY3Rpb25DdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxDb2xsZWN0aW9uQ3VzdG9tLmNwcApAQCAtODQs
MTIgKzg0LDEyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiBWOEhUTUxDb2xsZWN0aW9uOjpuYW1l
ZEl0ZW1DYWxsYmFjayhjb25zdCB2ODo6QXJndW1lbnRzJiBhCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBWOEhUTUxDb2xsZWN0aW9uOjpkaXNwYXRjaFdy
YXBDdXN0b20oSFRNTENvbGxlY3Rpb24qIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3Jl
YXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcChIVE1MQ29sbGVjdGlvbiogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVh
dGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIEFTU0VSVChpbXBsKTsK
ICAgICBpZiAoaW1wbC0+dHlwZSgpID09IERvY0FsbCkKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNo
V3JhcChzdGF0aWNfY2FzdDxIVE1MQWxsQ29sbGVjdGlvbio+KGltcGwpLCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwotICAgIHJldHVybiBWOEhUTUxDb2xsZWN0aW9uOjp3cmFwU2xvdyhpbXBs
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNf
Y2FzdDxIVE1MQWxsQ29sbGVjdGlvbio+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OworICAgIHJldHVybiBWOEhUTUxDb2xsZWN0aW9uOjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1
c3RvbS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRG9jdW1l
bnRDdXN0b20uY3BwCmluZGV4IGQyZWQyYTBmZTJkNzRiMjRjMjUxM2RlMjQwZjc2NmIwODRmYjFm
ZGUuLjk3Y2JmYTYxMGMyNDhkYzZlMzBmMGQ1MWQ4ZTQyN2EzN2UyMWE2YmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxEb2N1bWVudEN1c3RvbS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTERvY3VtZW50
Q3VzdG9tLmNwcApAQCAtMTY4LDEwICsxNjgsMTAgQEAgdm9pZCBWOEhUTUxEb2N1bWVudDo6YWxs
QWNjZXNzb3JTZXR0ZXIodjg6OkxvY2FsPHY4OjpTdHJpbmc+IG5hbWUsIHY4OjpMb2NhbDx2ODoK
ICAgICBpbmZvLlRoaXMoKS0+Rm9yY2VTZXQobmFtZSwgdmFsdWUpOwogfQogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4SFRNTERvY3VtZW50OjpkaXNwYXRjaFdyYXBDdXN0b20oSFRNTERvY3Vt
ZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklz
b2xhdGUqIGlzb2xhdGUpCit2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXAoSFRNTERvY3VtZW50
KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xh
dGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gd3JhcHBlciA9IFY4SFRNTERvY3VtZW50Ojp3cmFwU2xvdyhpbXBsLCBjcmVhdGlvbkNv
bnRleHQsIGlzb2xhdGUpOworICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4
SFRNTERvY3VtZW50OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CiAgICAgaWYgKHdyYXBwZXIuSXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gd3JhcHBlcjsK
ICAgICBpZiAoIVY4RE9NV2luZG93U2hlbGw6OmdldEVudGVyZWQoKSkgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20uY3Bw
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SFRNTEVsZW1lbnRDdXN0b20u
Y3BwCmluZGV4IGZiNTcxNjBjMWJkYzdjZjI0YjNlMmJiNjBiYjllZDEwNmNkYTlkMWMuLjYyZTA1
MTZkM2UxNDdmNTgwY2VlZWUzYmVkNzRlZmYzYTVhYzIwNjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEhUTUxFbGVtZW50Q3VzdG9tLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhIVE1MRWxlbWVudEN1c3RvbS5jcHAK
QEAgLTQwLDcgKzQwLDcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4
OjpPYmplY3Q+IFY4SFRNTEVsZW1lbnQ6OmRpc3BhdGNoV3JhcEN1c3RvbShIVE1MRWxlbWVudCog
aW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRl
KiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKEhUTUxFbGVtZW50KiBpbXBs
LCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlz
b2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwpOwogICAgIHJldHVybiBjcmVhdGVWOEhUTUxXcmFw
cGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy92OC9jdXN0b20vVjhJbWFnZURhdGFDdXN0b20uY3BwIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4SW1hZ2VEYXRhQ3VzdG9tLmNwcAppbmRleCBk
ZDIzZjZiMjFmOWVhODU3YWY0MGNhNzkzODhmOGM5MjIyOWY1MThiLi5jYjM1NDAxYTE1YTUyNGJm
OTI1ODU2MzcwM2UwMjhmNjdhMDBlNTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy92OC9jdXN0b20vVjhJbWFnZURhdGFDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOEltYWdlRGF0YUN1c3RvbS5jcHAKQEAgLTM1LDEwICszNSwx
MCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhJ
bWFnZURhdGE6OmRpc3BhdGNoV3JhcEN1c3RvbShJbWFnZURhdGEqIGltcGwsIHY4OjpIYW5kbGU8
djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpI
YW5kbGU8djg6Ok9iamVjdD4gd3JhcChJbWFnZURhdGEqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NF
UlQoaW1wbCk7Ci0gICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhJbWFnZURh
dGE6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhJbWFnZURhdGE6OmNyZWF0ZVdyYXBwZXIoaW1w
bCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBpZiAoIXdyYXBwZXIuSXNFbXB0eSgp
KSB7CiAgICAgICAgIC8vIENyZWF0ZSBhIFY4IFVpbnQ4Q2xhbXBlZEFycmF5IG9iamVjdC4KICAg
ICAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHBpeGVsQXJyYXkgPSB0b1Y4KGltcGwtPmRhdGEo
KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOE5vZGVDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4Tm9kZUN1c3RvbS5jcHAKaW5kZXggZGUxZDNmOWJlODAwNWEyMjk3
MzJlZDBmNjFkNzc4MTE3NDczOWI2Ny4uODUwM2QzZWNlODEyYzZkYzExNDFmMjkyZjA5NWY5NjEy
ZGE2ODk4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Tm9kZUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4
Tm9kZUN1c3RvbS5jcHAKQEAgLTEyNSw0NCArMTI1LDQ0IEBAIHY4OjpIYW5kbGU8djg6OlZhbHVl
PiBWOE5vZGU6OmFwcGVuZENoaWxkQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJncykK
ICAgICByZXR1cm4gdjg6Ok51bGwoYXJncy5HZXRJc29sYXRlKCkpOwogfQogCi12ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IFY4Tm9kZTo6ZGlzcGF0Y2hXcmFwQ3VzdG9tKE5vZGUqIGltcGwsIHY4OjpI
YW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkK
K3Y4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcChOb2RlKiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpP
YmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNT
RVJUKGltcGwpOwogICAgIHN3aXRjaCAoaW1wbC0+bm9kZVR5cGUoKSkgewogICAgIGNhc2UgTm9k
ZTo6RUxFTUVOVF9OT0RFOgotICAgICAgICAvLyBGb3IgcGVyZm9ybWFuY2UgcmVhc29ucywgdGhp
cyBpcyBpbmxpbmVkIGZyb20gVjhFbGVtZW50OjpkaXNwYXRjaFdyYXBDdXN0b20gYW5kIG11c3Qg
cmVtYWluIGluIHN5bmMuCisgICAgICAgIC8vIEZvciBwZXJmb3JtYW5jZSByZWFzb25zLCB0aGlz
IGlzIGlubGluZWQgZnJvbSBWOEVsZW1lbnQ6OndyYXAgYW5kIG11c3QgcmVtYWluIGluIHN5bmMu
CiAgICAgICAgIGlmIChpbXBsLT5pc0hUTUxFbGVtZW50KCkpCi0gICAgICAgICAgICByZXR1cm4g
ZGlzcGF0Y2hXcmFwKHRvSFRNTEVsZW1lbnQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CisgICAgICAgICAgICByZXR1cm4gd3JhcCh0b0hUTUxFbGVtZW50KGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogI2lmIEVOQUJMRShTVkcpCiAgICAgICAgIGlmIChpbXBsLT5p
c1NWR0VsZW1lbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nh
c3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAg
ICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8U1ZHRWxlbWVudCo+KGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogI2VuZGlmCi0gICAgICAgIHJldHVybiBWOEVsZW1lbnQ6Ondy
YXBTbG93KHN0YXRpY19jYXN0PEVsZW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIFY4RWxlbWVudDo6Y3JlYXRlV3JhcHBlcihzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBO
b2RlOjpBVFRSSUJVVEVfTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNf
Y2FzdDxBdHRyKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJl
dHVybiB3cmFwKHN0YXRpY19jYXN0PEF0dHIqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKICAgICBjYXNlIE5vZGU6OlRFWFRfTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNo
V3JhcCh0b1RleHQoaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJl
dHVybiB3cmFwKHRvVGV4dChpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBj
YXNlIE5vZGU6OkNEQVRBX1NFQ1RJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3Jh
cChzdGF0aWNfY2FzdDxDREFUQVNlY3Rpb24qPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8Q0RBVEFTZWN0aW9uKj4oaW1w
bCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBOb2RlOjpFTlRJVFlfUkVG
RVJFTkNFX05PREU6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8RW50
aXR5UmVmZXJlbmNlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PEVudGl0eVJlZmVyZW5jZSo+KGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgTm9kZTo6RU5USVRZX05PREU6Ci0gICAgICAg
IHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8RW50aXR5Kj4oaW1wbCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PEVudGl0
eSo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgTm9kZTo6UFJP
Q0VTU0lOR19JTlNUUlVDVElPTl9OT0RFOgotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0
YXRpY19jYXN0PFByb2Nlc3NpbmdJbnN0cnVjdGlvbio+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxQcm9jZXNzaW5nSW5z
dHJ1Y3Rpb24qPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIE5v
ZGU6OkNPTU1FTlRfTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2Fz
dDxDb21tZW50Kj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJl
dHVybiB3cmFwKHN0YXRpY19jYXN0PENvbW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5UX05PREU6Ci0gICAgICAgIHJldHVybiBk
aXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihp
bXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIE5vZGU6OkRPQ1VNRU5U
X1RZUEVfTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxEb2N1
bWVudFR5cGUqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0
dXJuIHdyYXAoc3RhdGljX2Nhc3Q8RG9jdW1lbnRUeXBlKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBOb2RlOjpET0NVTUVOVF9GUkFHTUVOVF9OT0RFOgotICAg
ICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PERvY3VtZW50RnJhZ21lbnQqPihp
bXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3Rh
dGljX2Nhc3Q8RG9jdW1lbnRGcmFnbWVudCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogICAgIGNhc2UgTm9kZTo6Tk9UQVRJT05fTk9ERToKLSAgICAgICAgcmV0dXJuIGRpc3Bh
dGNoV3JhcChzdGF0aWNfY2FzdDxOb3RhdGlvbio+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlz
b2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxOb3RhdGlvbio+KGltcGwp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OyAvLyBYUEFUSF9OQU1FU1BBQ0VfTk9ERQogICAgIH0KLSAgICByZXR1cm4gVjhOb2RlOjp3cmFw
U2xvdyhpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiBWOE5vZGU6
OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKIH0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFBlcmZvcm1hbmNlRW50cnlDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAKaW5kZXggMjBlMTdl
NTgzZjcxY2Q0YjgwNzE2YTFhM2VjNjNiODBiMzNlNjk0Yi4uZTU0OGMzYjA1N2ZhMWJmOWQ2ZDdh
NDYxYzlmZWI3ZjE0ZDZmNmQ3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4UGVyZm9ybWFuY2VFbnRyeUN1c3RvbS5jcHAKQEAgLTQz
LDE0ICs0MywxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gVjhQZXJmb3JtYW5jZUVudHJ5OjpkaXNwYXRjaFdyYXBDdXN0b20oUGVyZm9ybWFuY2VF
bnRyeSogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJ
c29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFBlcmZvcm1hbmNl
RW50cnkqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6
SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAjaWYgRU5BQkxFKFJFU09V
UkNFX1RJTUlORykKICAgICBpZiAoaW1wbC0+aXNSZXNvdXJjZSgpKQotICAgICAgICByZXR1cm4g
ZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PFBlcmZvcm1hbmNlUmVzb3VyY2VUaW1pbmcqPihpbXBs
KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGlj
X2Nhc3Q8UGVyZm9ybWFuY2VSZXNvdXJjZVRpbWluZyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOwogI2VuZGlmCi0gICAgcmV0dXJuIFY4UGVyZm9ybWFuY2VFbnRyeTo6d3JhcFNs
b3coaW1wbCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICByZXR1cm4gVjhQZXJmb3Jt
YW5jZUVudHJ5OjpjcmVhdGVXcmFwcGVyKGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFNWR0RvY3VtZW50Q3VzdG9tLmNwcAppbmRleCBjMjhj
MzY1Yjc4OTM2Mjk1ZWMzMjhjNGEzMDUyNDY4YTJjNmQ4ZDY5Li42M2U1MGU5MGUwODljY2M1Nzcz
MTk1ZTI2YmFiZDgxNzIzMjQ3NThiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9jdXN0b20vVjhTVkdEb2N1bWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRG9jdW1lbnRDdXN0b20uY3BwCkBAIC0zOCwxMCArMzgs
MTAgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4
U1ZHRG9jdW1lbnQ6OmRpc3BhdGNoV3JhcEN1c3RvbShTVkdEb2N1bWVudCogaW1wbCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQor
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwKFNWR0RvY3VtZW50KiBpbXBsLCB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAg
ICAgQVNTRVJUKGltcGwpOwotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlciA9IFY4
U1ZHRG9jdW1lbnQ6OndyYXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7Cisg
ICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFwcGVyID0gVjhTVkdEb2N1bWVudDo6Y3JlYXRl
V3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGlmICh3cmFwcGVy
LklzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIHdyYXBwZXI7CiAgICAgaWYgKCFWOERPTVdpbmRv
d1NoZWxsOjpnZXRFbnRlcmVkKCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFNWR0VsZW1lbnRDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKaW5kZXggNmIyMmU5NTU3MzM2
ZTgzNzE3Y2M0MzEyMTBiOWMxNDZiOTg3MjA3MC4uZDVkMTgyNGZjYzMzOTM2NjJjOTU2NTg4N2Zm
NWY4MDI3NjdhNzRlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4U1ZHRWxlbWVudEN1c3RvbS5jcHAKQEAgLTM3LDcgKzM3LDcgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4U1ZHRWxlbWVudDo6
ZGlzcGF0Y2hXcmFwQ3VzdG9tKFNWR0VsZW1lbnQqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5kbGU8djg6
Ok9iamVjdD4gd3JhcChTVkdFbGVtZW50KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IGNy
ZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJUKGltcGwp
OwogICAgIHJldHVybiBjcmVhdGVWOFNWR1dyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9W
OFNWR1BhdGhTZWdDdXN0b20uY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9t
L1Y4U1ZHUGF0aFNlZ0N1c3RvbS5jcHAKaW5kZXggNmU4OGE5ZjdkODZmZjUyZDA2MmJlNGQ4ZWU3
ZTRlZmYzNzU3NDBlZS4uYjFkNDZhMTljNGQ0MzRiYmRkMmNkNWJiMTA4YTA1OTQ0ZTRjZjQxZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZHUGF0aFNl
Z0N1c3RvbS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvY3VzdG9tL1Y4U1ZH
UGF0aFNlZ0N1c3RvbS5jcHAKQEAgLTU3LDUxICs1Nyw1MSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLXY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhTVkdQYXRoU2VnOjpkaXNwYXRjaFdyYXBD
dXN0b20oU1ZHUGF0aFNlZyogaW1wbCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNv
bnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQordjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3cmFw
KFNWR1BhdGhTZWcqIGltcGwsIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0
LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKIHsKICAgICBBU1NFUlQoaW1wbCk7CiAgICAgc3dpdGNo
IChpbXBsLT5wYXRoU2VnVHlwZSgpKSB7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0NM
T1NFUEFUSDoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnQ2xvc2VQYXRoKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDbG9zZVBhdGgqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9W
RVRPX0FCUzoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTW92ZXRvQWJzKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9BYnMqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTU9W
RVRPX1JFTDoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTW92ZXRvUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdNb3ZldG9SZWwqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElO
RVRPX0FCUzoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvQWJzKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9BYnMqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElO
RVRPX1JFTDoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRo
U2VnTGluZXRvUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAg
IHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9SZWwqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VS
VkVUT19DVUJJQ19BQlM6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY0Ficyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1
YmljQWJzKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQ
YXRoU2VnOjpQQVRIU0VHX0NVUlZFVE9fQ1VCSUNfUkVMOgotICAgICAgICByZXR1cm4gZGlzcGF0
Y2hXcmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvQ3ViaWNSZWwqPihpbXBsKSwgY3Jl
YXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1JlbCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xh
dGUpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19BQlM6
Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZl
dG9RdWFkcmF0aWNBYnMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAg
ICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9RdWFkcmF0aWNBYnMq
PihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6
OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNfUkVMOgotICAgICAgICByZXR1cm4gZGlzcGF0Y2hX
cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKj4oaW1wbCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0
PFNWR1BhdGhTZWdDdXJ2ZXRvUXVhZHJhdGljUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwg
aXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19BQlM6Ci0gICAgICAg
IHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY0Ficyo+KGltcGwp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNf
Y2FzdDxTVkdQYXRoU2VnQXJjQWJzKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0FSQ19SRUw6Ci0gICAgICAgIHJldHVybiBk
aXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0FyY1JlbCo+KGltcGwpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQXJjUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2Fz
ZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVUT19IT1JJWk9OVEFMX0FCUzoKLSAgICAgICAgcmV0
dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFi
cyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3Jh
cChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvSG9yaXpvbnRhbEFicyo+KGltcGwpLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19MSU5F
VE9fSE9SSVpPTlRBTF9SRUw6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nh
c3Q8U1ZHUGF0aFNlZ0xpbmV0b0hvcml6b250YWxSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0
LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xp
bmV0b0hvcml6b250YWxSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKICAg
ICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfTElORVRPX1ZFUlRJQ0FMX0FCUzoKLSAgICAgICAg
cmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnTGluZXRvVmVydGljYWxB
YnMqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdy
YXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsQWJzKj4oaW1wbCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VHX0xJTkVU
T19WRVJUSUNBTF9SRUw6Ci0gICAgICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8
U1ZHUGF0aFNlZ0xpbmV0b1ZlcnRpY2FsUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdMaW5ldG9W
ZXJ0aWNhbFJlbCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogICAgIGNhc2Ug
U1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX0NVQklDX1NNT09USF9BQlM6Ci0gICAgICAgIHJl
dHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8U1ZHUGF0aFNlZ0N1cnZldG9DdWJpY1Ntb290
aEFicyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4g
d3JhcChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoQWJzKj4oaW1wbCks
IGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAgY2FzZSBTVkdQYXRoU2VnOjpQQVRIU0VH
X0NVUlZFVE9fQ1VCSUNfU01PT1RIX1JFTDoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChz
dGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3VydmV0b0N1YmljU21vb3RoUmVsKj4oaW1wbCksIGNyZWF0
aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNW
R1BhdGhTZWdDdXJ2ZXRvQ3ViaWNTbW9vdGhSZWwqPihpbXBsKSwgY3JlYXRpb25Db250ZXh0LCBp
c29sYXRlKTsKICAgICBjYXNlIFNWR1BhdGhTZWc6OlBBVEhTRUdfQ1VSVkVUT19RVUFEUkFUSUNf
U01PT1RIX0FCUzoKLSAgICAgICAgcmV0dXJuIGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxTVkdQ
YXRoU2VnQ3VydmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQs
IGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChzdGF0aWNfY2FzdDxTVkdQYXRoU2VnQ3Vy
dmV0b1F1YWRyYXRpY1Ntb290aEFicyo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUp
OwogICAgIGNhc2UgU1ZHUGF0aFNlZzo6UEFUSFNFR19DVVJWRVRPX1FVQURSQVRJQ19TTU9PVEhf
UkVMOgotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdD
dXJ2ZXRvUXVhZHJhdGljU21vb3RoUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0
ZSk7CisgICAgICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PFNWR1BhdGhTZWdDdXJ2ZXRvUXVh
ZHJhdGljU21vb3RoUmVsKj4oaW1wbCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiAgICAg
fQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBWOFNWR1BhdGhTZWc6Ondy
YXBTbG93KGltcGwsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIFY4U1ZH
UGF0aFNlZzo6Y3JlYXRlV3JhcHBlcihpbXBsLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwog
fQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhTdHlsZVNoZWV0Q3VzdG9tLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCmluZGV4IDNiOGY1NGI2
ZGUzMDkwMGY0OTE0Y2RiNGU2YTBmN2Q2MzM0NDQ0YTYuLmYxNzYxM2RiYmVmYWIwMGNiZGRjYTI2
NjgxMGY5NDhmODQ1N2NjOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4
L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L2N1c3RvbS9WOFN0eWxlU2hlZXRDdXN0b20uY3BwCkBAIC0zNywxMiArMzcsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi12ODo6SGFuZGxlPHY4OjpPYmplY3Q+IFY4U3R5bGVT
aGVldDo6ZGlzcGF0Y2hXcmFwQ3VzdG9tKFN0eWxlU2hlZXQqIGltcGwsIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRpb25Db250ZXh0LCB2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3Y4OjpIYW5k
bGU8djg6Ok9iamVjdD4gd3JhcChTdHlsZVNoZWV0KiBpbXBsLCB2ODo6SGFuZGxlPHY4OjpPYmpl
Y3Q+IGNyZWF0aW9uQ29udGV4dCwgdjg6Oklzb2xhdGUqIGlzb2xhdGUpCiB7CiAgICAgQVNTRVJU
KGltcGwpOwogICAgIGlmIChpbXBsLT5pc0NTU1N0eWxlU2hlZXQoKSkKLSAgICAgICAgcmV0dXJu
IGRpc3BhdGNoV3JhcChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oaW1wbCksIGNyZWF0aW9u
Q29udGV4dCwgaXNvbGF0ZSk7Ci0gICAgcmV0dXJuIFY4U3R5bGVTaGVldDo6d3JhcFNsb3coaW1w
bCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKKyAgICAgICAgcmV0dXJuIHdyYXAoc3RhdGlj
X2Nhc3Q8Q1NTU3R5bGVTaGVldCo+KGltcGwpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwor
ICAgIHJldHVybiBWOFN0eWxlU2hlZXQ6OmNyZWF0ZVdyYXBwZXIoaW1wbCwgY3JlYXRpb25Db250
ZXh0LCBpc29sYXRlKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwgYi9Tb3VyY2UvV2ViQ29yZS9kb20vbWFr
ZV9uYW1lcy5wbAppbmRleCA2NGRiNTY3YWMwYTRjODIyMjU5MDUwNjJhMzVhMzY3ZGQyYWI4MGJh
Li43MTViYTU2ZTQ3MGFkYmJkMTAyMDYwNGUyYTBkNjMwNzUxNTVhZTZlIDEwMDc1NQotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vbWFrZV9uYW1lcy5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
bWFrZV9uYW1lcy5wbApAQCAtMTA3MCw4ICsxMDcwLDggQEAgc3RhdGljIHY4OjpIYW5kbGU8djg6
Ok9iamVjdD4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1l
c3AKIHsKICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBlbGVtZW50LT5kb2N1bWVudCgpLT5zZXR0
aW5ncygpOwogICAgIGlmICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkgfHwgKHNldHRpbmdz
ICYmICFzZXR0aW5ncy0+aXNNZWRpYUVuYWJsZWQoKSkpCi0gICAgICAgIHJldHVybiBkaXNwYXRj
aFdyYXAoZWxlbWVudCwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKLSAgICByZXR1cm4gZGlz
cGF0Y2hXcmFwKHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQpLCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcChlbGVtZW50LCBjcmVh
dGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgIHJldHVybiB3cmFwKHN0YXRpY19jYXN0PCR7SlNJ
bnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogfQog
CiBFTkQKQEAgLTEwODIsOCArMTA4Miw4IEBAIEVORAogc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9i
amVjdD4gY3JlYXRlJHtKU0ludGVyZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3Bh
Y2V9RWxlbWVudCogZWxlbWVudCwgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRl
eHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQogewogICAgIGlmICghQ29udGV4dEZlYXR1cmVzOjok
e2NvbnRleHRDb25kaXRpb25hbH1FbmFibGVkKGVsZW1lbnQtPmRvY3VtZW50KCkpKQotICAgICAg
ICByZXR1cm4gZGlzcGF0Y2hXcmFwKHRvJHBhcmFtZXRlcnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1l
fShlbGVtZW50KSwgY3JlYXRpb25Db250ZXh0LCBpc29sYXRlKTsKLSAgICByZXR1cm4gZGlzcGF0
Y2hXcmFwKHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VOYW1lfSo+KGVsZW1lbnQpLCBjcmVhdGlv
bkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1cm4gd3JhcCh0byRwYXJhbWV0ZXJze2Zh
bGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7
CisgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVu
dCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9CiBFTkQKIDsKQEAgLTEwOTMsOCArMTA5
Myw4IEBAIEVORAogc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlJHtKU0ludGVy
ZmFjZU5hbWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29s
YXRlKQogewogICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6JHtydW50aW1lQ29uZGl0
aW9uYWx9RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHRvJHBhcmFtZXRl
cnN7ZmFsbGJhY2tJbnRlcmZhY2VOYW1lfShlbGVtZW50KSwgY3JlYXRpb25Db250ZXh0LCBpc29s
YXRlKTsKLSAgICByZXR1cm4gZGlzcGF0Y2hXcmFwKHN0YXRpY19jYXN0PCR7SlNJbnRlcmZhY2VO
YW1lfSo+KGVsZW1lbnQpLCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOworICAgICAgICByZXR1
cm4gd3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNrSW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNy
ZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAoc3RhdGljX2Nhc3Q8JHtK
U0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CiB9
CiBFTkQKIDsKQEAgLTExMTIsNyArMTExMiw3IEBAIEVORAogICAgICAgICAgICAgcHJpbnQgRiA8
PEVORAogc3RhdGljIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gY3JlYXRlJHtKU0ludGVyZmFjZU5h
bWV9V3JhcHBlcigkcGFyYW1ldGVyc3tuYW1lc3BhY2V9RWxlbWVudCogZWxlbWVudCwgdjg6Okhh
bmRsZTx2ODo6T2JqZWN0PiBjcmVhdGlvbkNvbnRleHQsIHY4OjpJc29sYXRlKiBpc29sYXRlKQog
ewotICAgIHJldHVybiBkaXNwYXRjaFdyYXAoc3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9
Kj4oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgcmV0dXJuIHdyYXAo
c3RhdGljX2Nhc3Q8JHtKU0ludGVyZmFjZU5hbWV9Kj4oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4
dCwgaXNvbGF0ZSk7CiB9CiAKIApAQCAtMTI2MSw3ICsxMjYxLDcgQEAgRU5ECiAgICAgICAgIGlm
ICgkcGFyYW1ldGVyc3tuYW1lc3BhY2V9IGVxICJIVE1MIikgewogICAgICAgICAgICAgcHJpbnQg
RiA8PEVORAogICAgICAgICBpZiAoY3JlYXRlV3JhcHBlckZ1bmN0aW9uID09IGNyZWF0ZUhUTUxF
bGVtZW50V3JhcHBlcikKLSAgICAgICAgICAgcmV0dXJuIFY4SFRNTEVsZW1lbnQ6OndyYXBTbG93
KGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAgICAgICAgIHJldHVybiBW
OEhUTUxFbGVtZW50OjpjcmVhdGVXcmFwcGVyKGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNv
bGF0ZSk7CiBFTkQKICAgICAgICAgfQogICAgICAgICBwcmludCBGIDw8RU5ECkBAIC0xMjcxLDEy
ICsxMjcxLDEyIEBAIEVORAogOwogICAgICAgICBpZiAoJHBhcmFtZXRlcnN7bmFtZXNwYWNlfSBl
cSAiU1ZHIikgewogICAgICAgICAgICAgcHJpbnQgRiA8PEVORAotICAgIHJldHVybiBWOFNWR0Vs
ZW1lbnQ6OndyYXBTbG93KGVsZW1lbnQsIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAg
cmV0dXJuIFY4U1ZHRWxlbWVudDo6Y3JlYXRlV3JhcHBlcihlbGVtZW50LCBjcmVhdGlvbkNvbnRl
eHQsIGlzb2xhdGUpOwogRU5ECiA7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBwcmlu
dCBGIDw8RU5ECi0gICAgcmV0dXJuIGRpc3BhdGNoV3JhcCh0byRwYXJhbWV0ZXJze2ZhbGxiYWNr
SW50ZXJmYWNlTmFtZX0oZWxlbWVudCksIGNyZWF0aW9uQ29udGV4dCwgaXNvbGF0ZSk7CisgICAg
cmV0dXJuIHdyYXAodG8kcGFyYW1ldGVyc3tmYWxsYmFja0ludGVyZmFjZU5hbWV9KGVsZW1lbnQp
LCBjcmVhdGlvbkNvbnRleHQsIGlzb2xhdGUpOwogRU5ECiA7CiAgICAgICAgIH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>