<?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>221748</bug_id>
          
          <creation_ts>2021-02-11 03:12:24 -0800</creation_ts>
          <short_desc>GPU process WebGL context toDataURL does not work for non-premultiplied contexts</short_desc>
          <delta_ts>2021-02-17 11:24:40 -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>WebGL</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=222054</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>217211</blocked>
    
    <blocked>221811</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kimmo Kinnunen">kkinnunen</reporter>
          <assigned_to name="Kimmo Kinnunen">kkinnunen</assigned_to>
          <cc>dino</cc>
    
    <cc>kbr</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1728024</commentid>
    <comment_count>0</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-11 03:12:24 -0800</bug_when>
    <thetext>GPU process WebGL context toDataURL does not work for non-premultiplied contexts

GraphicsContextGL::paintRenderingResultsToImageData() is unimplemented.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728026</commentid>
    <comment_count>1</comment_count>
      <attachid>419971</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-11 03:21:06 -0800</bug_when>
    <thetext>Created attachment 419971
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728572</commentid>
    <comment_count>2</comment_count>
      <attachid>419971</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2021-02-12 08:59:47 -0800</bug_when>
    <thetext>Comment on attachment 419971
Patch

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

&gt; Source/WebKit/ChangeLog:15
&gt; +        This does not make any failing test pass, as the tests test also premultiplied
&gt; +        case, which needs other currently unimplemented code.

:(

&gt; Source/WebKit/GPUProcess/graphics/RemoteGraphicsContextGLFunctionsGenerated.h:1178
&gt; +        returnValue = m_context-&gt;paintRenderingResultsToImageData();

I see this is the handler for paintRenderingResultsToImageData(), and I see the web process saying sendSync(PaintRenderingResultsToImageData) below, but it looks like the web process always says sendSync(GetImageData), and I don&apos;t see this patch adding a handler for getImageData() in the GPU process. Am I missing something? Is it autogenerated?

&gt; Source/WebKit/Platform/IPC/ImageDataReference.h:-33
&gt; -class ImageDataReference {

:)

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:2445
&gt; +RefPtr&lt;WebCore::ImageData&gt; RemoteGraphicsContextGLProxy::paintRenderingResultsToImageData()

Why is this checked into a file called *Generated.cpp? I&apos;d expect generated files not to be checked in.

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:2449
&gt; +        auto sendResult = sendSync(Messages::RemoteGraphicsContextGL::PaintRenderingResultsToImageData(), Messages::RemoteGraphicsContextGL::PaintRenderingResultsToImageData::Reply(returnValue));

What&apos;s the difference between paintRenderingResultsToImageData() and getImageData()? Why do we need both?

&gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:150
&gt; +    sendSync(Messages::RemoteRenderingBackend::GetImageData(outputFormat, srcRect, renderingResourceIdentifier), Messages::RemoteRenderingBackend::GetImageData::Reply(imageData), m_renderingBackendIdentifier, 1_s);

so sad we need a synchronous message here. I think it&apos;s unavoidable though.

&gt; Tools/Scripts/generate-gpup-webgl:252
&gt; -    
&gt; +

:)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728625</commentid>
    <comment_count>3</comment_count>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2021-02-12 10:12:04 -0800</bug_when>
    <thetext>Thanks for the review!

(In reply to Myles C. Maxfield from comment #2)
&gt; I see this is the handler for paintRenderingResultsToImageData(), and I see
&gt; the web process saying sendSync(PaintRenderingResultsToImageData) below, but
&gt; it looks like the web process always says sendSync(GetImageData), and I
&gt; don&apos;t see this patch adding a handler for getImageData() in the GPU process.
&gt; Am I missing something? Is it autogenerated?

This patch doesn&apos;t really have anything to do with getImageData(), namely RemoteRenderingBackend::getImageData(). That one is used for similar purpose as the 
paintRenderingResultsToImageData(), but for canvas. The only reason this patch mentions it, is that the return value is the same, and the return type was redundantly complexities for that.

In this patch, I remove that complexity.

This patch is mostly about paintRenderingResultsToImageData. 



&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:2445
&gt; &gt; +RefPtr&lt;WebCore::ImageData&gt; RemoteGraphicsContextGLProxy::paintRenderingResultsToImageData()
&gt; 
&gt; Why is this checked into a file called *Generated.cpp? I&apos;d expect generated
&gt; files not to be checked in.

So this generation case is a bit different:
1) 99.9% of compiles the files don&apos;t change
2) Very, very non-trivial to review the the generator changes without reviewing the changes induced by the generator changes
3) It&apos;s not a general purpose generator, rather it generates the one and only thing it is built for

As an example of 2), this patch also checks in generated code related to the IPC generator (messages.py). The stuff in &quot;WebKit/Platform/IPC/tests&quot; are the examples that the reviewer uses to review the stuff that gets added to messages.py.

&gt; 
&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteGraphicsContextGLProxyFunctionsGenerated.cpp:2449
&gt; &gt; +        auto sendResult = sendSync(Messages::RemoteGraphicsContextGL::PaintRenderingResultsToImageData(), Messages::RemoteGraphicsContextGL::PaintRenderingResultsToImageData::Reply(returnValue));
&gt; 
&gt; What&apos;s the difference between paintRenderingResultsToImageData() and
&gt; getImageData()? Why do we need both?

They&apos;re totally different functions for different classes.

(The real reason is that WebGL does not use ImageBuffer as its abstraction for drawing buffer / display buffer, where as canvas uses it for drawing buffer and there&apos;s not similar distinction between drawing buffer and display buffer for canvas.)



&gt; &gt; Source/WebKit/WebProcess/GPU/graphics/RemoteRenderingBackendProxy.cpp:150
&gt; &gt; +    sendSync(Messages::RemoteRenderingBackend::GetImageData(outputFormat, srcRect, renderingResourceIdentifier), Messages::RemoteRenderingBackend::GetImageData::Reply(imageData), m_renderingBackendIdentifier, 1_s);
&gt; 
&gt; so sad we need a synchronous message here. I think it&apos;s unavoidable though.

Sure, sync vs async discussion it&apos;s not part of this patch. (Not to mention that the GetImageData itself is not a major part of this patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728629</commentid>
    <comment_count>4</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-02-12 10:20:52 -0800</bug_when>
    <thetext>Committed r272786: &lt;https://commits.webkit.org/r272786&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 419971.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1728630</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-12 10:21:15 -0800</bug_when>
    <thetext>&lt;rdar://problem/74281552&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>419971</attachid>
            <date>2021-02-11 03:21:06 -0800</date>
            <delta_ts>2021-02-12 10:20:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221748-20210211132103.patch</filename>
            <type>text/plain</type>
            <size>40693</size>
            <attacher name="Kimmo Kinnunen">kkinnunen</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyNzEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGQ0OTY3YTYzNTdhZjM1YTEz
MWZkNjllYzgyNjVjMTg1ZjA1NjM0OWQuLmM4OTc3Y2YzYTUzMDYxODU4OTFmZjI5Y2MyODA0NjVm
YzViNzhjNzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzAgQEAKKzIwMjEtMDItMTEgIEtpbW1vIEtp
bm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KKworICAgICAgICBHUFUgcHJvY2VzcyBXZWJH
TCBjb250ZXh0IHRvRGF0YVVSTCBkb2VzIG5vdCB3b3JrIGZvciBub24tcHJlbXVsdGlwbGllZCBj
b250ZXh0cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjIxNzQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
SW1wbGVtZW50IEdyYXBoaWNzQ29udGV4dEdMOjpwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdl
RGF0YSgpLiBUaGlzCisgICAgICAgIGlzIHVzZWQgZm9yIEltYWdlLnRvRGF0YVVSTCgpIGNhbGws
IGFuZCByZXR1cm5zIHNvbWV0aGluZyBmb3IKKyAgICAgICAgV2ViR0wgY2FudmFzZXMgdGhhdCBo
YXZlIG5vbi1wcmVtdWx0aXBsaWVkIGFscGhhLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGVz
dGVkIGJ5IGN1cnJlbnRseSBmYWlsaW5nIFdlYkdMIGNvbmZvcm1hbmNlIGFuZCBhZCBob2MgdGVz
dHMgbGlrZQorICAgICAgICBwcmVtdWx0aXBseWFscGhhLXRlc3QuaHRtbC4KKyAgICAgICAgVGhp
cyBkb2VzIG5vdCBtYWtlIGFueSBmYWlsaW5nIHRlc3QgcGFzcywgYXMgdGhlIHRlc3RzIHRlc3Qg
YWxzbyBwcmVtdWx0aXBsaWVkCisgICAgICAgIGNhc2UsIHdoaWNoIG5lZWRzIG90aGVyIGN1cnJl
bnRseSB1bmltcGxlbWVudGVkIGNvZGUuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL2dyYXBoaWNz
L1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMLm1lc3NhZ2VzLmluOgorICAgICAgICAqIEdQVVByb2Nl
c3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQuaDoK
KyAgICAgICAgKHBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKToKKyAgICAgICAgR2Vu
ZXJhdGVkIEdQVSBwcm9jZXNzIHNpZGUgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBHUFVQ
cm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEpOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oOgorICAgICAgICAqIEdQ
VVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbjoKKyAg
ICAgICAgQ2hhbmdlIEltYWdlRGF0YVJlZmVyZW5jZSB0byBSZWZQdHI8SW1hZ2VEYXRhPi4KKwor
ICAgICAgICAqIFBsYXRmb3JtL0lQQy9JbWFnZURhdGFSZWZlcmVuY2UuaDogUmVtb3ZlZC4KKyAg
ICAgICAgVGhpcyBpbXBsZW1lbnRhdGlvbiBpcyByZWR1bmRhbnQuIFRoZSBtZXNzYWdlcyBjb3Vs
ZCBhY2NlcHQganVzdAorICAgICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiwgd2hpY2gg
aXMgZXhhY3RseSAicmVmZXJlbmNlIHRvCisgICAgICAgIEltYWdlIERhdGEiLCBpLmUuIEltYWdl
RGF0YVJlZmVyZW5jZS4KKworICAgICAgICBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBlbmNv
ZGVyIGFuZCBkZWNvZGVyIGFscmVhZHkgZXhpc3QuCisKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtp
dC9tZXNzYWdlcy5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC9tZXNzYWdlc191bml0dGVz
dC5weToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9NYWtlZmlsZToKKyAgICAgICAg
KiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwOgor
ICAgICAgICAoSVBDOjpqc1ZhbHVlRm9yQXJndW1lbnRzKToKKyAgICAgICAgKElQQzo6bWVzc2Fn
ZUFyZ3VtZW50RGVzY3JpcHRpb25zKToKKyAgICAgICAgKiBTY3JpcHRzL3dlYmtpdC90ZXN0cy9N
ZXNzYWdlTmFtZXMuY3BwOgorICAgICAgICAoSVBDOjpkZXNjcmlwdGlvbik6CisgICAgICAgIChJ
UEM6OnJlY2VpdmVyTmFtZSk6CisgICAgICAgIChJUEM6OmlzVmFsaWRNZXNzYWdlTmFtZSk6Cisg
ICAgICAgICogU2NyaXB0cy93ZWJraXQvdGVzdHMvTWVzc2FnZU5hbWVzLmg6CisgICAgICAgICog
U2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFnZURhdGEubWVzc2FnZXMuaW46IEFkZGVk
LgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2Fn
ZVJlY2VpdmVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJLaXQ6OlRlc3RXaXRoSW1hZ2VEYXRh
OjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChXZWJLaXQ6OlRlc3RXaXRoSW1hZ2VEYXRh
OjpkaWRSZWNlaXZlU3luY01lc3NhZ2UpOgorICAgICAgICAqIFNjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXMuaDogQWRkZWQuCisgICAgICAgIChNZXNzYWdlczo6
VGVzdFdpdGhJbWFnZURhdGE6Om1lc3NhZ2VSZWNlaXZlck5hbWUpOgorICAgICAgICAoTWVzc2Fn
ZXM6OlRlc3RXaXRoSW1hZ2VEYXRhOjpTZW5kSW1hZ2VEYXRhOjpuYW1lKToKKyAgICAgICAgKE1l
c3NhZ2VzOjpUZXN0V2l0aEltYWdlRGF0YTo6U2VuZEltYWdlRGF0YTo6U2VuZEltYWdlRGF0YSk6
CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhJbWFnZURhdGE6OlNlbmRJbWFnZURhdGE6OmFy
Z3VtZW50cyBjb25zdCk6CisgICAgICAgIChNZXNzYWdlczo6VGVzdFdpdGhJbWFnZURhdGE6OlJl
Y2VpdmVJbWFnZURhdGE6Om5hbWUpOgorICAgICAgICAoTWVzc2FnZXM6OlRlc3RXaXRoSW1hZ2VE
YXRhOjpSZWNlaXZlSW1hZ2VEYXRhOjphcmd1bWVudHMgY29uc3QpOgorICAgICAgICAqIFNjcmlw
dHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXNSZXBsaWVzLmg6IEFkZGVk
LgorICAgICAgICBUZXN0IHVzaW5nIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IGluIG1lc3Nh
Z2VzLmluLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eS5jcHA6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvR1BV
L2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSk6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUv
Z3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcDoKKyAgICAgICAgKFdlYktp
dDo6UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXRJbWFnZURhdGEpOgorICAgICAgICBH
ZW5lcmF0ZWQgV2ViIHByb2Nlc3Mgc2lkZSBpbXBsZW1lbnRhdGlvbi4KKwogMjAyMS0wMi0xMCAg
V2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2VicGFn
ZSB0cmFuc2xhdGlvbl0gQWRkIHN1cHBvcnQgZm9yIHRoZSAtX3RyYW5zbGF0ZTogYWN0aW9uIG9u
IFdLQ29udGVudFZpZXcKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFw
aGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQv
R1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTC5tZXNzYWdlcy5pbgpp
bmRleCBkMzI4Y2QxY2NkNjIxYjA1YWMyODMxOGU2MjVhN2JhNzJkY2M0YTE3Li43YTE5MjVkYmIy
N2FiZjNkMzAzNGNiN2ZjYjM4YTNmMzkzZTNkY2ZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0wubWVzc2FnZXMuaW4K
KysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29u
dGV4dEdMLm1lc3NhZ2VzLmluCkBAIC0yODgsNiArMjg4LDcgQEAgbWVzc2FnZXMgLT4gUmVtb3Rl
R3JhcGhpY3NDb250ZXh0R0wgTm90UmVmQ291bnRlZCB7CiAgICAgdm9pZCBNdWx0aURyYXdBcnJh
eXNJbnN0YW5jZWRBTkdMRSh1aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5UmVmZXJlbmNlPGludDMy
X3Q+IGZpcnN0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBjb3VudHMsIElQQzo6QXJy
YXlSZWZlcmVuY2U8aW50MzJfdD4gaW5zdGFuY2VDb3VudHMsIGludDMyX3QgZHJhd2NvdW50KQog
ICAgIHZvaWQgTXVsdGlEcmF3RWxlbWVudHNBTkdMRSh1aW50MzJfdCBtb2RlLCBJUEM6OkFycmF5
UmVmZXJlbmNlPGludDMyX3Q+IGNvdW50cywgdWludDMyX3QgdHlwZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxpbnQzMl90PiBvZmZzZXRzLCBpbnQzMl90IGRyYXdjb3VudCkKICAgICB2b2lkIE11bHRp
RHJhd0VsZW1lbnRzSW5zdGFuY2VkQU5HTEUodWludDMyX3QgbW9kZSwgSVBDOjpBcnJheVJlZmVy
ZW5jZTxpbnQzMl90PiBjb3VudHMsIHVpbnQzMl90IHR5cGUsIElQQzo6QXJyYXlSZWZlcmVuY2U8
aW50MzJfdD4gb2Zmc2V0cywgSVBDOjpBcnJheVJlZmVyZW5jZTxpbnQzMl90PiBpbnN0YW5jZUNv
dW50cywgaW50MzJfdCBkcmF3Y291bnQpCisgICAgdm9pZCBQYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpIC0+IChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiByZXR1cm5WYWx1ZSkg
U3luY2hyb25vdXMKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVBy
b2Nlc3MvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xGdW5jdGlvbnNHZW5lcmF0ZWQu
aCBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCmluZGV4IGJkZTc2ZjliZTdlOGVmMGM1MDIxY2E3NDAw
MzU5OWMwYWZjNGQ3YzAuLmUwZDkyOWRhNGI3N2I0ZTMwOTc4ZWUwYTFjNjlhZWRlMmZhODUzNmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFw
aGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRlZC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTEZ1bmN0aW9uc0dlbmVyYXRl
ZC5oCkBAIC0xMTcyLDQgKzExNzIsMTAgQEAKICAgICB7CiAgICAgICAgIG1fY29udGV4dC0+bXVs
dGlEcmF3RWxlbWVudHNJbnN0YW5jZWRBTkdMRShtb2RlLCBtYWtlR0NHTFNwYW4ocmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBHQ0dMc2l6ZWkqPihjb3VudHMuZGF0YSgpKSwgY291bnRzLnNpemUoKSks
IHR5cGUsIG1ha2VHQ0dMU3BhbihyZWludGVycHJldF9jYXN0PGNvbnN0IEdDR0xpbnQqPihvZmZz
ZXRzLmRhdGEoKSksIG9mZnNldHMuc2l6ZSgpKSwgbWFrZUdDR0xTcGFuKHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgR0NHTHNpemVpKj4oaW5zdGFuY2VDb3VudHMuZGF0YSgpKSwgaW5zdGFuY2VDb3Vu
dHMuc2l6ZSgpKSwgZHJhd2NvdW50KTsKICAgICB9CisgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jl
c3VsdHNUb0ltYWdlRGF0YShDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJ
bWFnZURhdGE+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQorICAgIHsKKyAgICAgICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlRGF0YT4gcmV0dXJuVmFsdWUgPSB7IH07CisgICAgICAgIHJldHVyblZh
bHVlID0gbV9jb250ZXh0LT5wYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpOworICAg
ICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJldHVyblZhbHVlKSk7CisgICAgfQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3RlUmVuZGVy
aW5nQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVtb3Rl
UmVuZGVyaW5nQmFja2VuZC5jcHAKaW5kZXggOGNhODMwYWY2Yzk4MjdlZDZmZmRkNTQwNDE2ZWVk
ODc2YjE0NzA5My4uMjFiMDJhMzNmMWUwZjVhNDA3ZjljYzI2ODZiNTQzMzA3ZGNiYzEyOCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmNwcApAQCAtMjk1LDE0ICsyOTUsMTQgQEAgdm9pZCBSZW1vdGVS
ZW5kZXJpbmdCYWNrZW5kOjpzZXROZXh0SXRlbUJ1ZmZlclRvUmVhZChEaXNwbGF5TGlzdDo6SXRl
bUJ1ZmZlcklkZW4KICAgICBtX3BlbmRpbmdXYWtldXBJbmZvID0ge3t7IGlkZW50aWZpZXIsIFNo
YXJlZERpc3BsYXlMaXN0SGFuZGxlOjpoZWFkZXJTaXplKCksIGRlc3RpbmF0aW9uSWRlbnRpZmll
ciwgR1BVUHJvY2Vzc1dha2V1cFJlYXNvbjo6VW5zcGVjaWZpZWQgfSwgV1RGOjpudWxsb3B0IH19
OwogfQogCi12b2lkIFJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OmdldEltYWdlRGF0YShBbHBoYVBy
ZW11bHRpcGxpY2F0aW9uIG91dHB1dEZvcm1hdCwgSW50UmVjdCBzcmNSZWN0LCBSZW5kZXJpbmdS
ZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlJiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQordm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRJbWFnZURhdGEoQWxwaGFQcmVt
dWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIEludFJlY3Qgc3JjUmVjdCwgUmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKICAgICBBU1NFUlQoIVJ1bkxvb3A6OmlzTWFpbigpKTsKIAogICAgIFJlZlB0cjxJ
bWFnZURhdGE+IGltYWdlRGF0YTsKICAgICBpZiAoYXV0byBpbWFnZUJ1ZmZlciA9IG1fcmVtb3Rl
UmVzb3VyY2VDYWNoZS5jYWNoZWRJbWFnZUJ1ZmZlcihyZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZp
ZXIpKQogICAgICAgICBpbWFnZURhdGEgPSBpbWFnZUJ1ZmZlci0+Z2V0SW1hZ2VEYXRhKG91dHB1
dEZvcm1hdCwgc3JjUmVjdCk7Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoSVBDOjpJbWFnZURhdGFS
ZWZlcmVuY2UoV1RGTW92ZShpbWFnZURhdGEpKSk7CisgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShpbWFnZURhdGEpKTsKIH0KIAogdm9pZCBSZW1vdGVSZW5kZXJpbmdCYWNrZW5kOjpnZXRE
YXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91
YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpQcmVzZXJ2ZVJlc29sdXRpb24gcHJlc2VydmVSZXNvbHV0
aW9uLCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGlj
cy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3Jh
cGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZC5oCmluZGV4IGQ3NTFmYjk1YmZiNGNiODk1NDQ4
NjVjMzFlMzE4MGM5MTM5NDU5ZmEuLmI3YWVlMjYyNzcwNWJiOWFjYzEwMTlkNzE1NWVmMjdlMTUz
ZDJiMjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kLmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL2dyYXBo
aWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmQuaApAQCAtMzEsNyArMzEsNiBAQAogI2luY2x1ZGUg
IkdQVVByb2Nlc3NXYWtldXBNZXNzYWdlQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiSVBDU2VtYXBo
b3JlLmgiCiAjaW5jbHVkZSAiSW1hZ2VCdWZmZXJCYWNrZW5kSGFuZGxlLmgiCi0jaW5jbHVkZSAi
SW1hZ2VEYXRhUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5j
bHVkZSAiTWVzc2FnZVNlbmRlci5oIgogI2luY2x1ZGUgIlJlbW90ZVJlc291cmNlQ2FjaGUuaCIK
QEAgLTExMiw3ICsxMTEsNyBAQCBwcml2YXRlOgogICAgIC8vIE1lc3NhZ2VzIHRvIGJlIHJlY2Vp
dmVkLgogICAgIHZvaWQgY3JlYXRlSW1hZ2VCdWZmZXIoY29uc3QgV2ViQ29yZTo6RmxvYXRTaXpl
JiBsb2dpY2FsU2l6ZSwgV2ViQ29yZTo6UmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlvblNj
YWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UsIFdlYkNvcmU6OlBpeGVsRm9ybWF0
LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIpOwogICAgIHZvaWQgd2FrZVVw
QW5kQXBwbHlEaXNwbGF5TGlzdChjb25zdCBHUFVQcm9jZXNzV2FrZXVwTWVzc2FnZUFyZ3VtZW50
cyYpOwotICAgIHZvaWQgZ2V0SW1hZ2VEYXRhKFdlYkNvcmU6OkFscGhhUHJlbXVsdGlwbGljYXRp
b24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNyY1JlY3QsIFdlYkNvcmU6OlJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChJUEM6OkltYWdl
RGF0YVJlZmVyZW5jZSYmKT4mJik7CisgICAgdm9pZCBnZXRJbWFnZURhdGEoV2ViQ29yZTo6QWxw
aGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6OkludFJlY3Qgc3JjUmVj
dCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYpPiYmKTsKICAgICB2b2lkIGdldERh
dGFVUkxGb3JJbWFnZUJ1ZmZlcihjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBPcHRpb25hbDxkb3Vi
bGU+IHF1YWxpdHksIFdlYkNvcmU6OlByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVy
aW5nUmVzb3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFN0cmluZyYmKT4m
Jik7CiAgICAgdm9pZCBnZXREYXRhRm9ySW1hZ2VCdWZmZXIoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlk
ZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9yPHVpbnQ4X3Q+JiYpPiYmKTsK
ICAgICB2b2lkIGdldEJHUkFEYXRhRm9ySW1hZ2VCdWZmZXIoV2ViQ29yZTo6UmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZlY3Rvcjx1aW50OF90PiYm
KT4mJik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvZ3JhcGhpY3MvUmVt
b3RlUmVuZGVyaW5nQmFja2VuZC5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCmluZGV4IGUwOGY4
MDY0OThhM2QwMGFmODAyYTYzODFmMTZjMDA1N2IyZDQ3M2IuLjY4OGM2NDJiZGM0ODliOGM4NDY1
MWJjMjYxNzIwYTI1YThjZDJiNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJj
ZS9XZWJLaXQvR1BVUHJvY2Vzcy9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kLm1lc3Nh
Z2VzLmluCkBAIC0yNSw3ICsyNSw3IEBACiBtZXNzYWdlcyAtPiBSZW1vdGVSZW5kZXJpbmdCYWNr
ZW5kIHsKICAgICBDcmVhdGVJbWFnZUJ1ZmZlcihXZWJDb3JlOjpGbG9hdFNpemUgbG9naWNhbFNp
emUsIFdlYkNvcmU6OlJlbmRlcmluZ01vZGUgcmVuZGVyaW5nTW9kZSwgZmxvYXQgcmVzb2x1dGlv
blNjYWxlLCBXZWJDb3JlOjpEZXN0aW5hdGlvbkNvbG9yU3BhY2UgY29sb3JTcGFjZSwgZW51bTp1
aW50OF90IFdlYkNvcmU6OlBpeGVsRm9ybWF0IHBpeGVsRm9ybWF0LCBXZWJDb3JlOjpSZW5kZXJp
bmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQogICAgIFdh
a2VVcEFuZEFwcGx5RGlzcGxheUxpc3Qoc3RydWN0IFdlYktpdDo6R1BVUHJvY2Vzc1dha2V1cE1l
c3NhZ2VBcmd1bWVudHMgYXJndW1lbnRzKQotICAgIEdldEltYWdlRGF0YShlbnVtOnVpbnQ4X3Qg
V2ViQ29yZTo6QWxwaGFQcmVtdWx0aXBsaWNhdGlvbiBvdXRwdXRGb3JtYXQsIFdlYkNvcmU6Oklu
dFJlY3Qgc3JjUmVjdCwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyIHJlbmRl
cmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlIGltYWdl
RGF0YSkgU3luY2hyb25vdXMKKyAgICBHZXRJbWFnZURhdGEoZW51bTp1aW50OF90IFdlYkNvcmU6
OkFscGhhUHJlbXVsdGlwbGljYXRpb24gb3V0cHV0Rm9ybWF0LCBXZWJDb3JlOjpJbnRSZWN0IHNy
Y1JlY3QsIFdlYkNvcmU6OlJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllciByZW5kZXJpbmdSZXNv
dXJjZUlkZW50aWZpZXIpIC0+IChSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBpbWFnZURhdGEp
IFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YVVSTEZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1lVHlw
ZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBlbnVtOnVpbnQ4X3QgV2ViQ29yZTo6UHJlc2Vy
dmVSZXNvbHV0aW9uIHByZXNlcnZlUmVzb2x1dGlvbiwgV2ViQ29yZTo6UmVuZGVyaW5nUmVzb3Vy
Y2VJZGVudGlmaWVyIHJlbmRlcmluZ1Jlc291cmNlSWRlbnRpZmllcikgLT4gKFN0cmluZyB1cmxT
dHJpbmcpIFN5bmNocm9ub3VzCiAgICAgR2V0RGF0YUZvckltYWdlQnVmZmVyKFN0cmluZyBtaW1l
VHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBXZWJDb3JlOjpSZW5kZXJpbmdSZXNvdXJj
ZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSAtPiAoVmVjdG9yPHVpbnQ4
X3Q+IGRhdGEpIFN5bmNocm9ub3VzCiAgICAgR2V0QkdSQURhdGFGb3JJbWFnZUJ1ZmZlcihXZWJD
b3JlOjpSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlm
aWVyKSAtPiAoVmVjdG9yPHVpbnQ4X3Q+IGRhdGEpIFN5bmNocm9ub3VzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1BsYXRmb3JtL0lQQy9JbWFnZURhdGFSZWZlcmVuY2UuaCBiL1NvdXJjZS9X
ZWJLaXQvUGxhdGZvcm0vSVBDL0ltYWdlRGF0YVJlZmVyZW5jZS5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAxMzFjYWQ5ODIyODUxMjJkZTIzYTA0YjdkMDZiYmEzMTY5ODBkYjc4Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJL
aXQvUGxhdGZvcm0vSVBDL0ltYWdlRGF0YVJlZmVyZW5jZS5oCisrKyAvZGV2L251bGwKQEAgLTEs
NjIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
Ci0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiV2ViQ29y
ZUFyZ3VtZW50Q29kZXJzLmgiCi0jaW5jbHVkZSA8V2ViQ29yZS9JbWFnZUJ1ZmZlci5oPgotCi1u
YW1lc3BhY2UgSVBDIHsKLQotY2xhc3MgSW1hZ2VEYXRhUmVmZXJlbmNlIHsKLXB1YmxpYzoKLSAg
ICBJbWFnZURhdGFSZWZlcmVuY2UoKSA9IGRlZmF1bHQ7Ci0gICAgSW1hZ2VEYXRhUmVmZXJlbmNl
KFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+JiYgaW1hZ2VEYXRhKQotICAgICAgICA6IG1faW1h
Z2VEYXRhKFdURk1vdmUoaW1hZ2VEYXRhKSkKLSAgICB7Ci0gICAgfQotCi0gICAgUmVmUHRyPFdl
YkNvcmU6OkltYWdlRGF0YT4mIGJ1ZmZlcigpIHsgcmV0dXJuIG1faW1hZ2VEYXRhOyB9Ci0gICAg
Y29uc3QgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4mIGJ1ZmZlcigpIGNvbnN0IHsgcmV0dXJu
IG1faW1hZ2VEYXRhOyB9Ci0KLSAgICB2b2lkIGVuY29kZShFbmNvZGVyJiBlbmNvZGVyKSBjb25z
dAotICAgIHsKLSAgICAgICAgZW5jb2RlciA8PCBtX2ltYWdlRGF0YTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgT3B0aW9uYWw8SW1hZ2VEYXRhUmVmZXJlbmNlPiBkZWNvZGUoRGVjb2RlciYgZGVjb2Rl
cikKLSAgICB7Ci0gICAgICAgIE9wdGlvbmFsPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+PiBp
bWFnZURhdGE7Ci0gICAgICAgIGRlY29kZXIgPj4gaW1hZ2VEYXRhOwotICAgICAgICBpZiAoIWlt
YWdlRGF0YSkKLSAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIHJldHVy
biB7IFdURk1vdmUoKmltYWdlRGF0YSkgfTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgUmVmUHRy
PFdlYkNvcmU6OkltYWdlRGF0YT4gbV9pbWFnZURhdGE7Ci19OwotCi19CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5IGIvU291cmNlL1dlYktpdC9T
Y3JpcHRzL3dlYmtpdC9tZXNzYWdlcy5weQppbmRleCBhMzYxNzdlZTBlMmJlYmFkZGIxOTJkM2Iz
N2I1NGMzYjE1M2IxYjlhLi44NzUwNTgzYjNmNjQ2MmViMjExOWE3NmFhYjJiZjgzNjk4NDU3YjJh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzLnB5Cisr
KyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXMucHkKQEAgLTU4OCw2ICs1
ODgsNyBAQCBkZWYgY2xhc3NfdGVtcGxhdGVfaGVhZGVycyh0ZW1wbGF0ZV9zdHJpbmcpOgogICAg
ICAgICAnVmVjdG9yJzogeydoZWFkZXJzJzogWyc8d3RmL1ZlY3Rvci5oPiddLCAnYXJndW1lbnRf
Y29kZXJfaGVhZGVycyc6IFsnIkFyZ3VtZW50Q29kZXJzLmgiJ119LAogICAgICAgICAnc3RkOjpw
YWlyJzogeydoZWFkZXJzJzogWyc8dXRpbGl0eT4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMn
OiBbJyJBcmd1bWVudENvZGVycy5oIiddfSwKICAgICAgICAgJ0lQQzo6QXJyYXlSZWZlcmVuY2Un
OiB7J2hlYWRlcnMnOiBbJyJBcnJheVJlZmVyZW5jZS5oIiddLCAnYXJndW1lbnRfY29kZXJfaGVh
ZGVycyc6IFsnIkFyZ3VtZW50Q29kZXJzLmgiJ119LAorICAgICAgICAnUmVmUHRyJzogeydoZWFk
ZXJzJzogWyc8d3RmL1JlZkNvdW50ZWQuaD4nXSwgJ2FyZ3VtZW50X2NvZGVyX2hlYWRlcnMnOiBb
JyJBcmd1bWVudENvZGVycy5oIiddfSwKICAgICB9CiAKICAgICBtYXRjaCA9IHJlLm1hdGNoKCco
P1A8dGVtcGxhdGVfbmFtZT4uKz8pPCg/UDxwYXJhbWV0ZXJfc3RyaW5nPi4rKT4nLCB0ZW1wbGF0
ZV9zdHJpbmcpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3Nh
Z2VzX3VuaXR0ZXN0LnB5IGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC9tZXNzYWdlc191
bml0dGVzdC5weQppbmRleCBlNGRlZTdlYjBhZjcwOGZkNTA3ZjRjOTZmYWU0ZTI1ZTE2NTZjMDhi
Li40OGQ4ZTFiNjI3Y2MzMWIxOGZhMWM1MGZhYmVlZWQ5NzFiZDE1YmU5IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L21lc3NhZ2VzX3VuaXR0ZXN0LnB5CisrKyBiL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvbWVzc2FnZXNfdW5pdHRlc3QucHkKQEAgLTM5LDcg
KzM5LDE0IEBAIHRlc3RzX2RpcmVjdG9yeSA9IG9zLnBhdGguam9pbihtb2R1bGVfZGlyZWN0b3J5
LCAndGVzdHMnKQogCiByZXNldF9yZXN1bHRzID0gRmFsc2UKIAotX3Rlc3RfcmVjZWl2ZXJfbmFt
ZXMgPSBbJ1Rlc3RXaXRoU3VwZXJjbGFzcycsICdUZXN0V2l0aExlZ2FjeVJlY2VpdmVyJywgJ1Rl
c3RXaXRob3V0QXR0cmlidXRlcycsICdUZXN0V2l0aElmTWVzc2FnZScsICdUZXN0V2l0aFNlbWFw
aG9yZSddCitfdGVzdF9yZWNlaXZlcl9uYW1lcyA9IFsKKyAgICAnVGVzdFdpdGhTdXBlcmNsYXNz
JywKKyAgICAnVGVzdFdpdGhMZWdhY3lSZWNlaXZlcicsCisgICAgJ1Rlc3RXaXRob3V0QXR0cmli
dXRlcycsCisgICAgJ1Rlc3RXaXRoSWZNZXNzYWdlJywKKyAgICAnVGVzdFdpdGhTZW1hcGhvcmUn
LAorICAgICdUZXN0V2l0aEltYWdlRGF0YScsCitdCiAKIAogZGVmIHJlY2VpdmVyX2hlYWRlcl9m
aWxlX25hbWUocmVjZWl2ZXJfbmFtZSk6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1Njcmlw
dHMvd2Via2l0L3Rlc3RzL01ha2VmaWxlIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90
ZXN0cy9NYWtlZmlsZQppbmRleCBiMWRkNzk4ODY1YTUxNTQ5ODIwYjcwZGJkYjYxYWNkNmVhY2Jj
MWU4Li4yMWIzMGFlMjBmYTEwMzNmYTY2NGUwM2FkYmQ4ODA4NmE2YzcyYzQyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01ha2VmaWxlCisrKyBiL1NvdXJj
ZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvTWFrZWZpbGUKQEAgLTEsMiArMSwxMiBAQAor
CitURVNUUyA9IFwKKyAgICBUZXN0V2l0aFN1cGVyY2xhc3MgXAorICAgIFRlc3RXaXRoTGVnYWN5
UmVjZWl2ZXIgXAorICAgIFRlc3RXaXRob3V0QXR0cmlidXRlcyBcCisgICAgVGVzdFdpdGhJZk1l
c3NhZ2UgXAorICAgIFRlc3RXaXRoU2VtYXBob3JlIFwKKyAgICBUZXN0V2l0aEltYWdlRGF0YSBc
CisjCisKIGFsbDoKLQlweXRob24gLi4vLi4vZ2VuZXJhdGUtbWVzc2FnZS1yZWNlaXZlci5weSAu
IFRlc3RXaXRoU3VwZXJjbGFzcyBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyIFRlc3RXaXRob3V0QXR0
cmlidXRlcyBUZXN0V2l0aElmTWVzc2FnZSBUZXN0V2l0aFNlbWFwaG9yZQorCXB5dGhvbiAuLi8u
Li9nZW5lcmF0ZS1tZXNzYWdlLXJlY2VpdmVyLnB5IC4gJChURVNUUykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvTWVzc2FnZUFyZ3VtZW50RGVzY3JpcHRp
b25zLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvTWVzc2FnZUFyZ3Vt
ZW50RGVzY3JpcHRpb25zLmNwcAppbmRleCBlZDkzMDg1MmIzZTNkYThjOTQ3NDMzMjRlNDU0MGMy
MzRhMThjYTE5Li45ZmM0YzJlNTZjMzUxZTAwNDgyZWU3NDQyOTQxZDZiYWUxZjk5ODgyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VBcmd1bWVu
dERlc2NyaXB0aW9ucy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0
cy9NZXNzYWdlQXJndW1lbnREZXNjcmlwdGlvbnMuY3BwCkBAIC00Niw2ICs0Niw3IEBACiAjaW5j
bHVkZSAiVGVzdFR3b1N0YXRlRW51bS5oIgogI2VuZGlmCiAjaW5jbHVkZSAiVGVzdFdpdGhJZk1l
c3NhZ2VNZXNzYWdlcy5oIgorI2luY2x1ZGUgIlRlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXMuaCIK
ICNpbmNsdWRlICJUZXN0V2l0aExlZ2FjeVJlY2VpdmVyTWVzc2FnZXMuaCIKICNpbmNsdWRlICJU
ZXN0V2l0aFNlbWFwaG9yZU1lc3NhZ2VzLmgiCiAjaW5jbHVkZSAiVGVzdFdpdGhTdXBlcmNsYXNz
TWVzc2FnZXMuaCIKQEAgLTU2LDYgKzU3LDcgQEAKICNpbmNsdWRlICJXZWJUb3VjaEV2ZW50Lmgi
CiAjZW5kaWYKICNpbmNsdWRlIDxXZWJDb3JlL0dyYXBoaWNzTGF5ZXIuaD4KKyNpbmNsdWRlIDxX
ZWJDb3JlL0ltYWdlRGF0YS5oPgogI2lmIFBMQVRGT1JNKE1BQykKICNpbmNsdWRlIDxXZWJDb3Jl
L0tleWJvYXJkRXZlbnQuaD4KICNlbmRpZgpAQCAtNjYsNiArNjgsNyBAQAogI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KICNlbmRpZgogI2luY2x1ZGUgPHd0Zi9PcHRpb25hbC5oPgorI2luY2x1
ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUg
PHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC0yMjIsNiArMjI1LDEwIEBAIE9wdGlvbmFsPEpT
Qzo6SlNWYWx1ZT4ganNWYWx1ZUZvckFyZ3VtZW50cyhKU0M6OkpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIE1lCiAgICAgICAgIHJldHVybiBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxN
ZXNzYWdlczo6VGVzdFdpdGhTZW1hcGhvcmU6OlNlbmRTZW1hcGhvcmU6OkFyZ3VtZW50cz4oZ2xv
YmFsT2JqZWN0LCBkZWNvZGVyKTsKICAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aFNlbWFw
aG9yZV9SZWNlaXZlU2VtYXBob3JlOgogICAgICAgICByZXR1cm4ganNWYWx1ZUZvckRlY29kZWRB
cmd1bWVudHM8TWVzc2FnZXM6OlRlc3RXaXRoU2VtYXBob3JlOjpSZWNlaXZlU2VtYXBob3JlOjpB
cmd1bWVudHM+KGdsb2JhbE9iamVjdCwgZGVjb2Rlcik7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhJbWFnZURhdGFfU2VuZEltYWdlRGF0YToKKyAgICAgICAgcmV0dXJuIGpzVmFsdWVG
b3JEZWNvZGVkQXJndW1lbnRzPE1lc3NhZ2VzOjpUZXN0V2l0aEltYWdlRGF0YTo6U2VuZEltYWdl
RGF0YTo6QXJndW1lbnRzPihnbG9iYWxPYmplY3QsIGRlY29kZXIpOworICAgIGNhc2UgTWVzc2Fn
ZU5hbWU6OlRlc3RXaXRoSW1hZ2VEYXRhX1JlY2VpdmVJbWFnZURhdGE6CisgICAgICAgIHJldHVy
biBqc1ZhbHVlRm9yRGVjb2RlZEFyZ3VtZW50czxNZXNzYWdlczo6VGVzdFdpdGhJbWFnZURhdGE6
OlJlY2VpdmVJbWFnZURhdGE6OkFyZ3VtZW50cz4oZ2xvYmFsT2JqZWN0LCBkZWNvZGVyKTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CkBAIC01MjksNiArNTM2LDEyIEBAIE9w
dGlvbmFsPFZlY3RvcjxBcmd1bWVudERlc2NyaXB0aW9uPj4gbWVzc2FnZUFyZ3VtZW50RGVzY3Jp
cHRpb25zKE1lc3NhZ2VOYW1lIG5hCiAgICAgICAgIH07CiAgICAgY2FzZSBNZXNzYWdlTmFtZTo6
VGVzdFdpdGhTZW1hcGhvcmVfUmVjZWl2ZVNlbWFwaG9yZToKICAgICAgICAgcmV0dXJuIFZlY3Rv
cjxBcmd1bWVudERlc2NyaXB0aW9uPiB7IH07CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdp
dGhJbWFnZURhdGFfU2VuZEltYWdlRGF0YToKKyAgICAgICAgcmV0dXJuIFZlY3RvcjxBcmd1bWVu
dERlc2NyaXB0aW9uPiB7CisgICAgICAgICAgICB7InMwIiwgIlJlZlB0cjxXZWJDb3JlOjpJbWFn
ZURhdGE+IiwgbnVsbHB0ciwgZmFsc2V9LAorICAgICAgICB9OworICAgIGNhc2UgTWVzc2FnZU5h
bWU6OlRlc3RXaXRoSW1hZ2VEYXRhX1JlY2VpdmVJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBW
ZWN0b3I8QXJndW1lbnREZXNjcmlwdGlvbj4geyB9OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVz
dHMvTWVzc2FnZU5hbWVzLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMv
TWVzc2FnZU5hbWVzLmNwcAppbmRleCA0YzZlYzJlNjc5NGM1MWVmMmRkYTgzZmM2M2I2NjM5MGQw
Njg2YjAyLi43ZDVhZmM5MThlNWIwNWI4ZjdhNWNkNjIzODUyYjVjMGUwYzE4YTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlTmFtZXMuY3Bw
CkBAIC0zMiw2ICszMiwxMCBAQCBjb25zdCBjaGFyKiBkZXNjcmlwdGlvbihNZXNzYWdlTmFtZSBu
YW1lKQogICAgIHN3aXRjaCAobmFtZSkgewogICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRo
SWZNZXNzYWdlX0xvYWRVUkw6CiAgICAgICAgIHJldHVybiAiVGVzdFdpdGhJZk1lc3NhZ2VfTG9h
ZFVSTCI7CisgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhJbWFnZURhdGFfUmVjZWl2ZUlt
YWdlRGF0YToKKyAgICAgICAgcmV0dXJuICJUZXN0V2l0aEltYWdlRGF0YV9SZWNlaXZlSW1hZ2VE
YXRhIjsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aEltYWdlRGF0YV9TZW5kSW1hZ2VE
YXRhOgorICAgICAgICByZXR1cm4gIlRlc3RXaXRoSW1hZ2VEYXRhX1NlbmRJbWFnZURhdGEiOwog
ICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfQWRkRXZlbnQ6CiAg
ICAgICAgIHJldHVybiAiVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9BZGRFdmVudCI7CiAgICAgY2Fz
ZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9DbG9zZToKQEAgLTE2NCw2ICsx
NjgsOSBAQCBSZWNlaXZlck5hbWUgcmVjZWl2ZXJOYW1lKE1lc3NhZ2VOYW1lIG1lc3NhZ2VOYW1l
KQogICAgIHN3aXRjaCAobWVzc2FnZU5hbWUpIHsKICAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0
V2l0aElmTWVzc2FnZV9Mb2FkVVJMOgogICAgICAgICByZXR1cm4gUmVjZWl2ZXJOYW1lOjpUZXN0
V2l0aElmTWVzc2FnZTsKKyAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aEltYWdlRGF0YV9S
ZWNlaXZlSW1hZ2VEYXRhOgorICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoSW1hZ2VEYXRh
X1NlbmRJbWFnZURhdGE6CisgICAgICAgIHJldHVybiBSZWNlaXZlck5hbWU6OlRlc3RXaXRoSW1h
Z2VEYXRhOwogICAgIGNhc2UgTWVzc2FnZU5hbWU6OlRlc3RXaXRoTGVnYWN5UmVjZWl2ZXJfQWRk
RXZlbnQ6CiAgICAgY2FzZSBNZXNzYWdlTmFtZTo6VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9DbG9z
ZToKICAgICBjYXNlIE1lc3NhZ2VOYW1lOjpUZXN0V2l0aExlZ2FjeVJlY2VpdmVyX0NyZWF0ZVBs
dWdpbjoKQEAgLTI1MCw2ICsyNTcsMTAgQEAgYm9vbCBpc1ZhbGlkTWVzc2FnZU5hbWUoTWVzc2Fn
ZU5hbWUgbWVzc2FnZU5hbWUpCiAgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5h
bWU6OlRlc3RXaXRoSWZNZXNzYWdlX0xvYWRVUkwpCiAgICAgICAgIHJldHVybiB0cnVlOwogI2Vu
ZGlmCisgICAgaWYgKG1lc3NhZ2VOYW1lID09IElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoSW1h
Z2VEYXRhX1JlY2VpdmVJbWFnZURhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmICht
ZXNzYWdlTmFtZSA9PSBJUEM6Ok1lc3NhZ2VOYW1lOjpUZXN0V2l0aEltYWdlRGF0YV9TZW5kSW1h
Z2VEYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKICNpZiAoRU5BQkxFKFRPVUNIX0VWRU5UUykg
JiYgKE5FU1RFRF9NRVNTQUdFX0NPTkRJVElPTiAmJiBTT01FX09USEVSX01FU1NBR0VfQ09ORElU
SU9OKSkKICAgICBpZiAobWVzc2FnZU5hbWUgPT0gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhM
ZWdhY3lSZWNlaXZlcl9BZGRFdmVudCkKICAgICAgICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5oIGIvU291
cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9NZXNzYWdlTmFtZXMuaAppbmRleCA1Nzc2
MTIxMmZkZDI5Y2YxZTA5ZjdlYjAzNzAyNzY4NmYxZDQ5YTczLi5lZmVhMjMwMmQ2ODdiZTRmNTIy
NjkwZjc4YTNjNjRmNjM2ZTMxZmQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMv
d2Via2l0L3Rlc3RzL01lc3NhZ2VOYW1lcy5oCisrKyBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93
ZWJraXQvdGVzdHMvTWVzc2FnZU5hbWVzLmgKQEAgLTMwLDE3ICszMCwyMCBAQCBuYW1lc3BhY2Ug
SVBDIHsKIAogZW51bSBjbGFzcyBSZWNlaXZlck5hbWUgOiB1aW50OF90IHsKICAgICBUZXN0V2l0
aElmTWVzc2FnZSA9IDEKLSAgICAsIFRlc3RXaXRoTGVnYWN5UmVjZWl2ZXIgPSAyCi0gICAgLCBU
ZXN0V2l0aFNlbWFwaG9yZSA9IDMKLSAgICAsIFRlc3RXaXRoU3VwZXJjbGFzcyA9IDQKLSAgICAs
IFRlc3RXaXRob3V0QXR0cmlidXRlcyA9IDUKLSAgICAsIElQQyA9IDYKLSAgICAsIEFzeW5jUmVw
bHkgPSA3Ci0gICAgLCBJbnZhbGlkID0gOAorICAgICwgVGVzdFdpdGhJbWFnZURhdGEgPSAyCisg
ICAgLCBUZXN0V2l0aExlZ2FjeVJlY2VpdmVyID0gMworICAgICwgVGVzdFdpdGhTZW1hcGhvcmUg
PSA0CisgICAgLCBUZXN0V2l0aFN1cGVyY2xhc3MgPSA1CisgICAgLCBUZXN0V2l0aG91dEF0dHJp
YnV0ZXMgPSA2CisgICAgLCBJUEMgPSA3CisgICAgLCBBc3luY1JlcGx5ID0gOAorICAgICwgSW52
YWxpZCA9IDkKIH07CiAKIGVudW0gY2xhc3MgTWVzc2FnZU5hbWUgOiB1aW50MTZfdCB7CiAgICAg
VGVzdFdpdGhJZk1lc3NhZ2VfTG9hZFVSTAorICAgICwgVGVzdFdpdGhJbWFnZURhdGFfUmVjZWl2
ZUltYWdlRGF0YQorICAgICwgVGVzdFdpdGhJbWFnZURhdGFfU2VuZEltYWdlRGF0YQogICAgICwg
VGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9BZGRFdmVudAogICAgICwgVGVzdFdpdGhMZWdhY3lSZWNl
aXZlcl9DbG9zZQogICAgICwgVGVzdFdpdGhMZWdhY3lSZWNlaXZlcl9DcmVhdGVQbHVnaW4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFn
ZURhdGEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rl
c3RXaXRoSW1hZ2VEYXRhLm1lc3NhZ2VzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE1M2RjZWYwODlkMzk2YTZi
N2ZlMzU5NThhZDQwYTdkMTliMzJmNTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhLm1lc3NhZ2VzLmluCkBAIC0w
LDAgKzEsMjYgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorIyBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAorIyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCisjIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisjIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyMgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyMgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwKKyMgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyMgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWVz
c2FnZXMgLT4gVGVzdFdpdGhJbWFnZURhdGEgeworICAgIHZvaWQgU2VuZEltYWdlRGF0YShSZWZQ
dHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiBzMCkKKyAgICB2b2lkIFJlY2VpdmVJbWFnZURhdGEoKSAt
PiAoUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gcjApCit9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2Vp
dmVyLmNwcCBiL1NvdXJjZS9XZWJLaXQvU2NyaXB0cy93ZWJraXQvdGVzdHMvVGVzdFdpdGhJbWFn
ZURhdGFNZXNzYWdlUmVjZWl2ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE4NmM0MTVmZmMzMjFlZDgwZmEy
N2JmZWM0ZmE5NGZjNzBmMTIzNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1Nj
cmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZVJlY2VpdmVyLmNwcApA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwLTIwMjEgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUgorICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAq
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RXaXRoSW1hZ2VEYXRhLmgiCisKKyNpbmNsdWRlICJBcmd1bWVudENvZGVy
cy5oIgorI2luY2x1ZGUgIkRlY29kZXIuaCIKKyNpbmNsdWRlICJIYW5kbGVNZXNzYWdlLmgiCisj
aW5jbHVkZSAiVGVzdFdpdGhJbWFnZURhdGFNZXNzYWdlcy5oIgorI2luY2x1ZGUgIldlYkNvcmVB
cmd1bWVudENvZGVycy5oIgorI2luY2x1ZGUgPFdlYkNvcmUvSW1hZ2VEYXRhLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgVGVzdFdp
dGhJbWFnZURhdGE6OmRpZFJlY2VpdmVNZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYgY29ubmVjdGlv
biwgSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQoreworICAgIGF1dG8gcHJvdGVjdGVkVGhpcyA9IG1h
a2VSZWYoKnRoaXMpOworICAgIGlmIChkZWNvZGVyLm1lc3NhZ2VOYW1lKCkgPT0gTWVzc2FnZXM6
OlRlc3RXaXRoSW1hZ2VEYXRhOjpTZW5kSW1hZ2VEYXRhOjpuYW1lKCkpIHsKKyAgICAgICAgSVBD
OjpoYW5kbGVNZXNzYWdlPE1lc3NhZ2VzOjpUZXN0V2l0aEltYWdlRGF0YTo6U2VuZEltYWdlRGF0
YT4oZGVjb2RlciwgdGhpcywgJlRlc3RXaXRoSW1hZ2VEYXRhOjpzZW5kSW1hZ2VEYXRhKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBVTlVTRURfUEFSQU0oY29ubmVjdGlvbik7CisgICAg
VU5VU0VEX1BBUkFNKGRlY29kZXIpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2
b2lkIFRlc3RXaXRoSW1hZ2VEYXRhOjpkaWRSZWNlaXZlU3luY01lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiBjb25uZWN0aW9uLCBJUEM6OkRlY29kZXImIGRlY29kZXIsIHN0ZDo6dW5pcXVlX3B0cjxJ
UEM6OkVuY29kZXI+JiByZXBseUVuY29kZXIpCit7CisgICAgYXV0byBwcm90ZWN0ZWRUaGlzID0g
bWFrZVJlZigqdGhpcyk7CisgICAgaWYgKGRlY29kZXIubWVzc2FnZU5hbWUoKSA9PSBNZXNzYWdl
czo6VGVzdFdpdGhJbWFnZURhdGE6OlJlY2VpdmVJbWFnZURhdGE6Om5hbWUoKSkgeworICAgICAg
ICBJUEM6OmhhbmRsZU1lc3NhZ2U8TWVzc2FnZXM6OlRlc3RXaXRoSW1hZ2VEYXRhOjpSZWNlaXZl
SW1hZ2VEYXRhPihkZWNvZGVyLCAqcmVwbHlFbmNvZGVyLCB0aGlzLCAmVGVzdFdpdGhJbWFnZURh
dGE6OnJlY2VpdmVJbWFnZURhdGEpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFVOVVNF
RF9QQVJBTShjb25uZWN0aW9uKTsKKyAgICBVTlVTRURfUEFSQU0oZGVjb2Rlcik7CisgICAgVU5V
U0VEX1BBUkFNKHJlcGx5RW5jb2Rlcik7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdlRGF0YU1lc3NhZ2VzLmggYi9Tb3VyY2UvV2ViS2l0
L1NjcmlwdHMvd2Via2l0L3Rlc3RzL1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXMuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zNTc2MTU4YjFkOWI1M2RkZDhlNDhlZDU2NDMwYjdiNTA4ODg5NzFjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdl
RGF0YU1lc3NhZ2VzLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
MC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFn
bWEgb25jZQorCisjaW5jbHVkZSAiQXJndW1lbnRDb2RlcnMuaCIKKyNpbmNsdWRlICJDb25uZWN0
aW9uLmgiCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgiCisjaW5jbHVkZSAiVGVzdFdpdGhJbWFn
ZURhdGFNZXNzYWdlc1JlcGxpZXMuaCIKKyNpbmNsdWRlIDxXZWJDb3JlL0ltYWdlRGF0YS5oPgor
I2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworCituYW1lc3BhY2UgTWVzc2Fn
ZXMgeworbmFtZXNwYWNlIFRlc3RXaXRoSW1hZ2VEYXRhIHsKKworc3RhdGljIGlubGluZSBJUEM6
OlJlY2VpdmVyTmFtZSBtZXNzYWdlUmVjZWl2ZXJOYW1lKCkKK3sKKyAgICByZXR1cm4gSVBDOjpS
ZWNlaXZlck5hbWU6OlRlc3RXaXRoSW1hZ2VEYXRhOworfQorCitjbGFzcyBTZW5kSW1hZ2VEYXRh
IHsKK3B1YmxpYzoKKyAgICB1c2luZyBBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPGNvbnN0IFJlZlB0
cjxXZWJDb3JlOjpJbWFnZURhdGE+Jj47CisKKyAgICBzdGF0aWMgSVBDOjpNZXNzYWdlTmFtZSBu
YW1lKCkgeyByZXR1cm4gSVBDOjpNZXNzYWdlTmFtZTo6VGVzdFdpdGhJbWFnZURhdGFfU2VuZElt
YWdlRGF0YTsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIGlzU3luYyA9IGZhbHNlOworCisgICAg
ZXhwbGljaXQgU2VuZEltYWdlRGF0YShjb25zdCBSZWZQdHI8V2ViQ29yZTo6SW1hZ2VEYXRhPiYg
czApCisgICAgICAgIDogbV9hcmd1bWVudHMoczApCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IEFyZ3VtZW50cyYgYXJndW1lbnRzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Fy
Z3VtZW50czsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQXJndW1lbnRzIG1fYXJndW1lbnRzOwor
fTsKKworY2xhc3MgUmVjZWl2ZUltYWdlRGF0YSB7CitwdWJsaWM6CisgICAgdXNpbmcgQXJndW1l
bnRzID0gc3RkOjp0dXBsZTw+OworCisgICAgc3RhdGljIElQQzo6TWVzc2FnZU5hbWUgbmFtZSgp
IHsgcmV0dXJuIElQQzo6TWVzc2FnZU5hbWU6OlRlc3RXaXRoSW1hZ2VEYXRhX1JlY2VpdmVJbWFn
ZURhdGE7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBpc1N5bmMgPSB0cnVlOworCisgICAgdXNp
bmcgUmVwbHkgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+Jj47CisgICAg
dXNpbmcgUmVwbHlBcmd1bWVudHMgPSBzdGQ6OnR1cGxlPFJlZlB0cjxXZWJDb3JlOjpJbWFnZURh
dGE+PjsKKyAgICBjb25zdCBBcmd1bWVudHMmIGFyZ3VtZW50cygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9hcmd1bWVudHM7CisgICAgfQorCitwcml2YXRlOgorICAgIEFyZ3VtZW50
cyBtX2FyZ3VtZW50czsKK307CisKK30gLy8gbmFtZXNwYWNlIFRlc3RXaXRoSW1hZ2VEYXRhCit9
IC8vIG5hbWVzcGFjZSBNZXNzYWdlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TY3JpcHRz
L3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdlRGF0YU1lc3NhZ2VzUmVwbGllcy5oIGIvU291cmNl
L1dlYktpdC9TY3JpcHRzL3dlYmtpdC90ZXN0cy9UZXN0V2l0aEltYWdlRGF0YU1lc3NhZ2VzUmVw
bGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjI2NjZiMTg2OTI2M2VkZGZhM2MxYjY5NTkwYTI5MTc0MzUzZjk3
MWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NjcmlwdHMvd2Via2l0L3Rlc3Rz
L1Rlc3RXaXRoSW1hZ2VEYXRhTWVzc2FnZXNSZXBsaWVzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMC0yMDIxIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuICBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgor
ICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiTWVzc2FnZU5hbWVzLmgi
CisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworCituYW1lc3BhY2UgTWVzc2FnZXMgeworbmFt
ZXNwYWNlIFRlc3RXaXRoSW1hZ2VEYXRhIHsKKworCit9IC8vIG5hbWVzcGFjZSBUZXN0V2l0aElt
YWdlRGF0YQorfSAvLyBuYW1lc3BhY2UgTWVzc2FnZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNz
Q29udGV4dEdMUHJveHkuY3BwCmluZGV4IDY5ZmFjMzc4ZGQyMGZhYzU0NGI2MjQyMDY5ODg5N2Iw
MTE3ZDc1MmIuLmYyOWJlMDA2ZWI3Yjk3NjRiNzgyZDkxNjI1YzgwMTYwZmY4ZjM2ZjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3MvUmVtb3RlR3JhcGhp
Y3NDb250ZXh0R0xQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9n
cmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmNwcApAQCAtMTQwLDEyICsxNDAs
NiBAQCB2b2lkIFJlbW90ZUdyYXBoaWNzQ29udGV4dEdMUHJveHk6OnBhaW50Q29tcG9zaXRlZFJl
c3VsdHNUb0NhbnZhcyhJbWFnZUJ1ZmZlciopCiAgICAgbm90SW1wbGVtZW50ZWQoKTsKIH0KIAot
UmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6cGFpbnRSZW5k
ZXJpbmdSZXN1bHRzVG9JbWFnZURhdGEoKQotewotICAgIG5vdEltcGxlbWVudGVkKCk7Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KIHZvaWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6
c3ludGhlc2l6ZUdMRXJyb3IoR0NHTGVudW0gZXJyb3IpCiB7CiAgICAgaWYgKCFpc0NvbnRleHRM
b3N0KCkpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKaW5kZXggMGE3
MzhiNDZlZTI1NzdhYTI5YjIzODlhZmE2NDczMmYxMjU2ODc5Ny4uODMxYjRiMGFiMTM3ZTZhYWY4
MzU5NmUwYjBhMDc2ZGYxZTA5MTc2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRleHRH
TFByb3h5LmgKQEAgLTY0LDcgKzY0LDYgQEAgcHVibGljOgogICAgIHZvaWQgbm90aWZ5TWFya0Nv
bnRleHRDaGFuZ2VkKCkgZmluYWw7CiAgICAgdm9pZCBzaW11bGF0ZUNvbnRleHRDaGFuZ2VkKCkg
ZmluYWw7CiAgICAgdm9pZCBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0NhbnZhcyhXZWJDb3JlOjpJ
bWFnZUJ1ZmZlciopIGZpbmFsOwotICAgIFJlZlB0cjxXZWJDb3JlOjpJbWFnZURhdGE+IHBhaW50
UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhKCkgZmluYWw7CiAgICAgdm9pZCBwYWludENvbXBv
c2l0ZWRSZXN1bHRzVG9DYW52YXMoV2ViQ29yZTo6SW1hZ2VCdWZmZXIqKSBmaW5hbDsKICAgICB2
b2lkIHN5bnRoZXNpemVHTEVycm9yKEdDR0xlbnVtIGVycm9yKSBmaW5hbDsKICAgICBHQ0dMZW51
bSBnZXRFcnJvcigpIGZpbmFsOwpAQCAtMzIxLDYgKzMyMCw3IEBAIHB1YmxpYzoKICAgICB2b2lk
IG11bHRpRHJhd0FycmF5c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdDR0xTcGFuPGNv
bnN0IEdDR0xpbnQ+IGZpcnN0cywgR0NHTFNwYW48Y29uc3QgR0NHTHNpemVpPiBjb3VudHMsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gaW5zdGFuY2VDb3VudHMsIEdDR0xzaXplaSBkcmF3Y291
bnQpIGZpbmFsOwogICAgIHZvaWQgbXVsdGlEcmF3RWxlbWVudHNBTkdMRShHQ0dMZW51bSBtb2Rl
LCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGNvdW50cywgR0NHTGVudW0gdHlwZSwgR0NHTFNw
YW48Y29uc3QgR0NHTGludD4gb2Zmc2V0cywgR0NHTHNpemVpIGRyYXdjb3VudCkgZmluYWw7CiAg
ICAgdm9pZCBtdWx0aURyYXdFbGVtZW50c0luc3RhbmNlZEFOR0xFKEdDR0xlbnVtIG1vZGUsIEdD
R0xTcGFuPGNvbnN0IEdDR0xzaXplaT4gY291bnRzLCBHQ0dMZW51bSB0eXBlLCBHQ0dMU3Bhbjxj
b25zdCBHQ0dMaW50PiBvZmZzZXRzLCBHQ0dMU3Bhbjxjb25zdCBHQ0dMc2l6ZWk+IGluc3RhbmNl
Q291bnRzLCBHQ0dMc2l6ZWkgZHJhd2NvdW50KSBmaW5hbDsKKyAgICBSZWZQdHI8V2ViQ29yZTo6
SW1hZ2VEYXRhPiBwYWludFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpIGZpbmFsOwogICAg
IC8vIEVuZCBvZiBsaXN0IHVzZWQgYnkgZ2VuZXJhdGUtZ3B1cC13ZWJnbCBzY3JpcHQuCiAKIHBy
b3RlY3RlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhp
Y3MvUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZUdyYXBoaWNzQ29udGV4
dEdMUHJveHlGdW5jdGlvbnNHZW5lcmF0ZWQuY3BwCmluZGV4IDI5NDc1ZTExNDdjMTdkZTU5OTVk
ODgyNDMxNTA1MGY4Y2QwYzMzYjUuLjQ2NmRkMDhiMWIyYjM3MmI2ZTFkODU3OTdmNDg2MGEyOGNm
OTUzZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvZ3JhcGhpY3Mv
UmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eUZ1bmN0aW9uc0dlbmVyYXRlZC5jcHAKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1vdGVHcmFwaGljc0NvbnRl
eHRHTFByb3h5RnVuY3Rpb25zR2VuZXJhdGVkLmNwcApAQCAtMjQ0Miw2ICsyNDQyLDE3IEBAIHZv
aWQgUmVtb3RlR3JhcGhpY3NDb250ZXh0R0xQcm94eTo6bXVsdGlEcmF3RWxlbWVudHNJbnN0YW5j
ZWRBTkdMRShHQ0dMZW51bSBtb2RlCiAgICAgfQogfQogCitSZWZQdHI8V2ViQ29yZTo6SW1hZ2VE
YXRhPiBSZW1vdGVHcmFwaGljc0NvbnRleHRHTFByb3h5OjpwYWludFJlbmRlcmluZ1Jlc3VsdHNU
b0ltYWdlRGF0YSgpCit7CisgICAgUmVmUHRyPFdlYkNvcmU6OkltYWdlRGF0YT4gcmV0dXJuVmFs
dWUgPSB7IH07CisgICAgaWYgKCFpc0NvbnRleHRMb3N0KCkpIHsKKyAgICAgICAgYXV0byBzZW5k
UmVzdWx0ID0gc2VuZFN5bmMoTWVzc2FnZXM6OlJlbW90ZUdyYXBoaWNzQ29udGV4dEdMOjpQYWlu
dFJlbmRlcmluZ1Jlc3VsdHNUb0ltYWdlRGF0YSgpLCBNZXNzYWdlczo6UmVtb3RlR3JhcGhpY3ND
b250ZXh0R0w6OlBhaW50UmVuZGVyaW5nUmVzdWx0c1RvSW1hZ2VEYXRhOjpSZXBseShyZXR1cm5W
YWx1ZSkpOworICAgICAgICBpZiAoIXNlbmRSZXN1bHQpCisgICAgICAgICAgICBtYXJrQ29udGV4
dExvc3QoKTsKKyAgICB9CisgICAgcmV0dXJuIHJldHVyblZhbHVlOworfQorCiB9CiAKICNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9ncmFwaGljcy9SZW1v
dGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9ncmFwaGljcy9SZW1vdGVSZW5kZXJpbmdCYWNrZW5kUHJveHkuY3BwCmluZGV4IDU1YjE1YWYw
ODJlODE2MzcwYTgyMGU2ODEyOTRhYjE0ZjIzZjRjZjUuLmE0YzQ1ZTAwODBhYmM2M2ZmNmNiYzUz
OTE2MzUzYzk3ZTIxOGQxN2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9H
UFUvZ3JhcGhpY3MvUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvR1BVL2dyYXBoaWNzL1JlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94
eS5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKIAogI2luY2x1ZGUgIkRpc3BsYXlMaXN0V3JpdGVySGFu
ZGxlLmgiCiAjaW5jbHVkZSAiR1BVQ29ubmVjdGlvblRvV2ViUHJvY2Vzcy5oIgotI2luY2x1ZGUg
IkltYWdlRGF0YVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtUmVtb3RlSW1hZ2VCdWZm
ZXJQcm94eS5oIgogI2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRNZXNzYWdlcy5oIgog
I2luY2x1ZGUgIlJlbW90ZVJlbmRlcmluZ0JhY2tlbmRQcm94eU1lc3NhZ2VzLmgiCkBAIC0xNDcs
OSArMTQ2LDkgQEAgUmVmUHRyPEltYWdlRGF0YT4gUmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5
OjpnZXRJbWFnZURhdGEoQWxwaGFQcmVtdWx0aXBsaWNhdGkKIHsKICAgICBzZW5kRGVmZXJyZWRX
YWtldXBNZXNzYWdlSWZOZWVkZWQoKTsKIAotICAgIElQQzo6SW1hZ2VEYXRhUmVmZXJlbmNlIGlt
YWdlRGF0YVJlZmVyZW5jZTsKLSAgICBzZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlUmVuZGVyaW5n
QmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVjdCwgcmVuZGVyaW5nUmVz
b3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmluZ0JhY2tlbmQ6OkdldElt
YWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhUmVmZXJlbmNlKSwgbV9yZW5kZXJpbmdCYWNrZW5kSWRl
bnRpZmllciwgMV9zKTsKLSAgICByZXR1cm4gaW1hZ2VEYXRhUmVmZXJlbmNlLmJ1ZmZlcigpOwor
ICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YTsKKyAgICBzZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlUmVuZGVyaW5nQmFja2VuZDo6R2V0SW1hZ2VEYXRhKG91dHB1dEZvcm1hdCwgc3JjUmVj
dCwgcmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKSwgTWVzc2FnZXM6OlJlbW90ZVJlbmRlcmlu
Z0JhY2tlbmQ6OkdldEltYWdlRGF0YTo6UmVwbHkoaW1hZ2VEYXRhKSwgbV9yZW5kZXJpbmdCYWNr
ZW5kSWRlbnRpZmllciwgMV9zKTsKKyAgICByZXR1cm4gaW1hZ2VEYXRhOwogfQogCiBTdHJpbmcg
UmVtb3RlUmVuZGVyaW5nQmFja2VuZFByb3h5OjpnZXREYXRhVVJMRm9ySW1hZ2VCdWZmZXIoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSwgT3B0aW9uYWw8ZG91YmxlPiBxdWFsaXR5LCBQcmVzZXJ2ZVJl
c29sdXRpb24gcHJlc2VydmVSZXNvbHV0aW9uLCBSZW5kZXJpbmdSZXNvdXJjZUlkZW50aWZpZXIg
cmVuZGVyaW5nUmVzb3VyY2VJZGVudGlmaWVyKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9n
IGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDNhODRlMGUzNjM2ZDQ4MWJjMmU1NDhhNmZiNzU0NTEw
M2FkNTc5MTguLjk4MDRjNGUwMGU3YWEzZjkyOWZmMWY1MDczMTI4NTlkODNlZTVhNDQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAyMS0wMi0xMSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUuY29tPgor
CisgICAgICAgIEdQVSBwcm9jZXNzIFdlYkdMIGNvbnRleHQgdG9EYXRhVVJMIGRvZXMgbm90IHdv
cmsgZm9yIG5vbi1wcmVtdWx0aXBsaWVkIGNvbnRleHRzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjE3NDgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc3VwcG9ydCBmb3IgZ2VuZXJhdGluZyBJUEMg
aW1wbGVtZW50YXRpb24gZm9yIGZ1bmN0aW9ucyB3aXRoIFJlZlB0cjw+LgorCisgICAgICAgICog
U2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsOgorCiAyMDIxLTAyLTEwICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtXZWJwYWdlIHRyYW5zbGF0aW9u
XSBBZGQgc3VwcG9ydCBmb3IgdGhlIC1fdHJhbnNsYXRlOiBhY3Rpb24gb24gV0tDb250ZW50Vmll
dwpkaWZmIC0tZ2l0IGEvVG9vbHMvU2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsIGIvVG9vbHMv
U2NyaXB0cy9nZW5lcmF0ZS1ncHVwLXdlYmdsCmluZGV4IGFlZGVlZDNkNmUyNWJhNGUxZDg1ZjM0
YWIyZDllM2FjZWJiNDRmZGMuLjU2ODVlOTA3NTM1M2ZkMWQyY2VhOTQ2MjA2YjU3ZTQ4YjQyNjYz
ZmQgMTAwNzU1Ci0tLSBhL1Rvb2xzL1NjcmlwdHMvZ2VuZXJhdGUtZ3B1cC13ZWJnbAorKysgYi9U
b29scy9TY3JpcHRzL2dlbmVyYXRlLWdwdXAtd2ViZ2wKQEAgLTIyMywxMCArMjIzLDE0IEBAIGNs
YXNzIGNwcF90eXBlX2NvbnRhaW5lcihjcHBfdHlwZSk6CiAgICAgICAgIHJldHVybiBzZWxmLmNv
bnRhaW5lZF90eXBlLmlzX2NvbnN0KCkKIAogZGVmIGNyZWF0ZV9jcHBfdHlwZV9jb250YWluZXIo
dHlwZV9uYW1lIDogc3RyKSAtPiBPcHRpb25hbFtjcHBfdHlwZV9jb250YWluZXJdOgorICAgICMg
VGhlIGxvZ2ljIHRvIGRldGVybWluZSBjb250YWluZXIgaXMgdG8ganVzdCBhc3N1bWUgYWxsIHRl
bXBsYXRlcyBhcmUgY29udGFpbmVycy4KICAgICBtID0gcmUubWF0Y2gociIoW1x3Ol0rKTwoLisp
PiQiLCB0eXBlX25hbWUpCiAgICAgaWYgbm90IG06CiAgICAgICAgIHJldHVybiBOb25lCiAgICAg
Y29udGFpbmVyX25hbWUgPSBtWzFdCisgICAgIyBBbGwgdGVtcGxhdGVzIGFyZSBjb250YWluZXJz
IGV4Y2VwdCB0aGVzZSBiZWxvdy4KKyAgICBpZiBjb250YWluZXJfbmFtZSBpbiBbJ1JlZlB0cics
ICdSZWYnXToKKyAgICAgICAgcmV0dXJuIE5vbmUKICAgICB0ZW1wbGF0ZXMgPSBtWzJdCiAgICAg
YXJpdHkgPSBOb25lCiAgICAgbSA9IHJlLm1hdGNoKHIiKFteLF0rKSxccyooXGQrKSIsIHRlbXBs
YXRlcykKQEAgLTI0NSw3ICsyNDksNyBAQCBkZWYgY3BwX3NwbGl0X2FyZ3Nfc3BlY3MoYXJnc19z
cGVjIDogc3RyKSAtPiBJdGVyYXRvcltzdHJdOgogICAgICAjIGh0dHBzOi8vc3RhY2tvdmVyZmxv
dy5jb20vcXVlc3Rpb25zLzMzNTI3MjQ1L3B5dGhvbi1zcGxpdC1ieS1jb21tYS1za2lwcGluZy10
aGUtY29udGVudC1pbnNpZGUtcGFyZW50aGVzZXMKICAgICBjb21tYSA9IHIiLCg/ISg/OltePF0q
XDxbXj5dKlw+KSpbXjw+XSpcPikiCiAgICAgcmV0dXJuIGZpbHRlcihOb25lLCBbYS5zdHJpcCgp
IGZvciBhIGluIHJlLnNwbGl0KGNvbW1hLCBhcmdzX3NwZWMuc3RyaXAoKSldKQotICAgIAorCiBk
ZWYgY3JlYXRlX2NwcF90eXBlX2Z1bmN0aW9uKHR5cGVfbmFtZSA6IHN0cikgLT4gT3B0aW9uYWxb
Y3BwX3R5cGVfZnVuY3Rpb25dOgogICAgIG0gPSByZS5tYXRjaChyJyguKilcKCguKilcKScsIHR5
cGVfbmFtZSkKICAgICBpZiBub3QgbToKQEAgLTI1MywxMiArMjU3LDEyIEBAIGRlZiBjcmVhdGVf
Y3BwX3R5cGVfZnVuY3Rpb24odHlwZV9uYW1lIDogc3RyKSAtPiBPcHRpb25hbFtjcHBfdHlwZV9m
dW5jdGlvbl06CiAgICAgcmV0dXJuX3ZhbHVlX3R5cGUgPSBnZXRfY3BwX3R5cGUobVsxXSkKICAg
ICBhcmdzX3R5cGVzID0gW2dldF9jcHBfdHlwZShhKSBmb3IgYSBpbiBjcHBfc3BsaXRfYXJnc19z
cGVjcyhtWzJdKV0KICAgICByZXR1cm4gY3BwX3R5cGVfZnVuY3Rpb24odHlwZV9uYW1lLCByZXR1
cm5fdmFsdWVfdHlwZSwgYXJnc190eXBlcykKLSAgICAgICAgCisKICMgUG9pbnRlciBvciByZWZl
cmVyZW5jZQogY2xhc3MgY3BwX3R5cGVfaW5kaXJlY3QoY3BwX3R5cGUpOgogICAgIGNhdGVnb3J5
IDogc3RyCiAgICAgdmFsdWVfdHlwZSA6IGNwcF90eXBlCi0gICAgCisKICAgICBkZWYgX19pbml0
X18oc2VsZiwgdHlwZV9uYW1lIDogc3RyLCBjYXRlZ29yeSA6IHN0ciwgdmFsdWVfdHlwZSA6IGNw
cF90eXBlKToKICAgICAgICAgY3BwX3R5cGUuX19pbml0X18oc2VsZiwgdHlwZV9uYW1lKQogICAg
ICAgICBzZWxmLmNhdGVnb3J5ID0gY2F0ZWdvcnkKQEAgLTI4MCw3ICsyODQsNyBAQCBjbGFzcyBj
cHBfdHlwZV9pbmRpcmVjdChjcHBfdHlwZSk6CiBkZWYgY3JlYXRlX2NwcF90eXBlX2luZGlyZWN0
KHR5cGVfbmFtZSA6IHN0cikgLT4gT3B0aW9uYWxbY3BwX3R5cGVfaW5kaXJlY3RdOgogICAgIG0g
PSByZS5tYXRjaChyImNvbnN0ICguKykmJiQiLCB0eXBlX25hbWUpCiAgICAgaWYgbm90IG06Ci0g
ICAgICAgIG0gPSByZS5tYXRjaChyIiguKykmJiQiLCB0eXBlX25hbWUpIAorICAgICAgICBtID0g
cmUubWF0Y2gociIoLispJiYkIiwgdHlwZV9uYW1lKQogICAgIGlmIG06CiAgICAgICAgIHJldHVy
biBjcHBfdHlwZV9pbmRpcmVjdCh0eXBlX25hbWUsICcmJicsIGdldF9jcHBfdHlwZShtWzFdKSkK
ICAgICBtID0gcmUubWF0Y2gociJjb25zdCAoLispJiQiLCB0eXBlX25hbWUpCkBAIC05ODMsNyAr
OTg3LDcgQEAgZGVmIG1haW4oKToKICAgICBmb3IgY3BwX3R5cGUgaW4gc29ydGVkKGFsbF90eXBl
cywga2V5PWxhbWJkYSB4OiBsZW4oeC50eXBlX25hbWUpKToKICAgICAgICAgaWYgY3BwX3R5cGUg
aW4gd2Via2l0X2lwY190eXBlczoKICAgICAgICAgICAgIGNvbnRpbnVlCi0gICAgICAKKwogICAg
ICAgICBpZiBjcHBfdHlwZS5pc19keW5hbWljX3NwYW4oKSBvciBjcHBfdHlwZS5pc19zcGFuKCk6
CiAgICAgICAgICAgICB0cmFuc2Zlcl90eXBlID0gd2Via2l0X2lwY19nZXRfc3Bhbl90cmFuc2Zl
cl90eXBlKGNwcF90eXBlKQogICAgICAgICAgICAgd2Via2l0X2lwY190eXBlc1tjcHBfdHlwZV0g
PSB0cmFuc2Zlcl90eXBlLmdldF92YWx1ZV90eXBlKCkKQEAgLTEwMTIsNyArMTAxNiw3IEBAIGRl
ZiBtYWluKCk6CiAgICAgICAgICAgICAgICAgd2Via2l0X2lwY190eXBlc1tjcHBfdHlwZV0gPSB2
YWx1ZV90eXBlCiAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICB3ZWJraXRfaXBjX3R5cGVzW2Nw
cF90eXBlXSA9IGNwcF90eXBlLmdldF92YWx1ZV90eXBlKCkKLSAgICAKKwogICAgICMgVGhlIGlu
cHV0IHRvIHRoZSBnZW5lcmF0b3JzIGlzIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIHJlbW90ZS4KICAg
ICAjIFJ1biB0aGUgdmFyaW91cyBnZW5lcmF0b3JzLgogICAgIGdlbmVyYXRvcnMgPSBbCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>